# HG changeset patch # User Eleni Maria Stea # Date 1390003072 -7200 # Node ID e6485ef45e6edf69277d7caa7786b28aaf495924 # Parent 92c163c939be9a4133a32a6ba11dcd1b1d2fa1a8 visualize volume diff -r 92c163c939be -r e6485ef45e6e data/test1.vol --- a/data/test1.vol Fri Jan 17 23:45:56 2014 +0200 +++ b/data/test1.vol Sat Jan 18 01:57:52 2014 +0200 @@ -3,6 +3,7 @@ SLICES /home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0001.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0002.png /home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0003.png /home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0004.png /home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0005.png @@ -17,3 +18,243 @@ /home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0014.png /home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0015.png /home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0016.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0017.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0018.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0019.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0020.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0021.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0022.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0023.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0024.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0025.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0026.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0027.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0028.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0029.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0030.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0031.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0032.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0033.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0034.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0035.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0036.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0037.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0038.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0039.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0040.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0041.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0042.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0043.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0044.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0045.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0046.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0047.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0048.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0049.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0050.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0051.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0052.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0053.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0054.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0055.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0056.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0057.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0058.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0059.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0060.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0061.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0062.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0063.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0064.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0065.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0066.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0067.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0068.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0069.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0070.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0071.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0072.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0073.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0074.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0075.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0076.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0077.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0078.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0079.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0080.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0081.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0082.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0083.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0084.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0085.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0086.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0087.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0088.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0089.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0090.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0091.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0092.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0093.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0094.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0095.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0096.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0097.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0098.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0099.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0100.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0101.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0102.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0103.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0104.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0105.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0106.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0107.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0108.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0109.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0110.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0111.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0112.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0113.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0114.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0115.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0116.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0117.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0118.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0119.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0120.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0121.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0122.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0123.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0124.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0125.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0126.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0127.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0128.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0129.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0130.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0131.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0132.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0133.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0134.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0135.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0136.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0137.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0138.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0139.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0140.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0141.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0142.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0143.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0144.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0145.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0146.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0147.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0148.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0149.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0150.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0151.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0152.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0153.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0154.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0155.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0156.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0157.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0158.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0159.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0160.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0161.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0162.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0163.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0164.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0165.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0166.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0167.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0168.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0169.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0170.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0171.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0172.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0173.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0174.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0175.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0176.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0177.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0178.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0179.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0180.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0181.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0182.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0183.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0184.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0185.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0186.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0187.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0188.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0189.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0190.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0191.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0192.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0193.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0194.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0195.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0196.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0197.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0198.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0199.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0200.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0201.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0202.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0203.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0204.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0205.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0206.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0207.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0208.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0209.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0210.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0211.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0212.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0213.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0214.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0215.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0216.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0217.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0218.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0219.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0220.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0221.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0222.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0223.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0224.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0225.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0226.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0227.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0228.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0229.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0230.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0231.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0232.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0233.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0234.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0235.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0236.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0237.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0238.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0239.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0240.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0241.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0242.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0243.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0244.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0245.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0246.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0247.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0248.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0249.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0250.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0251.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0252.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0253.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0254.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0255.png +/home/eleni/code/med/test1/data/la_colonoscopie/IM-0001-0256.png diff -r 92c163c939be -r e6485ef45e6e src/main.cc --- a/src/main.cc Fri Jan 17 23:45:56 2014 +0200 +++ b/src/main.cc Sat Jan 18 01:57:52 2014 +0200 @@ -4,7 +4,7 @@ #include #include -#include "image.h" +#include "volume.h" //static void init(void); static void display(void); @@ -19,8 +19,9 @@ // debug TODO remove //////////////////////////// static bool init(); -Image img; -unsigned int tex; + +static Volume *vol; +static float cur_z; int main(int argc, char **argv) { @@ -53,15 +54,15 @@ void display(void) { //render - glBindTexture(GL_TEXTURE_2D, tex); - glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_3D, vol->get_texture()); + glEnable(GL_TEXTURE_3D); glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex3f(-1, -1, 0); - glTexCoord2f(0, 1); glVertex3f(-1, 1, 0); - glTexCoord2f(1, 1); glVertex3f(1, 1, 0); - glTexCoord2f(1, 0); glVertex3f(1, -1, 0); + glTexCoord3f(0, 0, cur_z); glVertex3f(-1, -1, 0); + glTexCoord3f(0, 1, cur_z); glVertex3f(-1, 1, 0); + glTexCoord3f(1, 1, cur_z); glVertex3f(1, 1, 0); + glTexCoord3f(1, 0, cur_z); glVertex3f(1, -1, 0); glEnd(); - glDisable(GL_TEXTURE_2D); + glDisable(GL_TEXTURE_3D); glutSwapBuffers(); assert(glGetError() == GL_NO_ERROR); @@ -100,21 +101,21 @@ int dy = y - prev_y; prev_x = x; prev_y = y; + + if(dx != 0) { + cur_z = (float)x / (float)win_xsz; + glutPostRedisplay(); + } } bool init() { - if(!img.load("data/la_colonoscopie/IM-0001-0248.png")) { - fprintf(stderr, "Failed to load votre Colonoscopie\n"); + vol = new Volume; + if(!vol->load("data/test1.vol")) { + fprintf(stderr, "Failed to load test1.vol"); return false; } - - glGenTextures(1, &tex); - glBindTexture(GL_TEXTURE_2D, tex); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE16F_ARB, img.get_width(), - img.get_height(), 0, GL_LUMINANCE, GL_FLOAT, img.get_pixels()); + cur_z = 0.5; return true; } diff -r 92c163c939be -r e6485ef45e6e src/volume.cc --- a/src/volume.cc Fri Jan 17 23:45:56 2014 +0200 +++ b/src/volume.cc Sat Jan 18 01:57:52 2014 +0200 @@ -1,3 +1,7 @@ +#include + +#include + #include #include #include @@ -14,9 +18,40 @@ { width = height = 0; zaspect = 1; + vol_tex_valid = false; + + glGenTextures(1, &vol_tex); } -bool Volume::load_volume(const char *fname) +Volume::~Volume() +{ + glDeleteTextures(1, &vol_tex); +} + +void Volume::create_vol_tex() const +{ + if(slices.empty()) + return; + + glBindTexture(GL_TEXTURE_3D, vol_tex); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); + + assert(glGetError() == GL_NO_ERROR); + glTexImage3D(GL_TEXTURE_3D, 0, GL_LUMINANCE, width, height, + slices.size(), 0, GL_LUMINANCE, GL_FLOAT, 0); + assert(glGetError() == GL_NO_ERROR); + + for(size_t i=0; i= (int)slices.size() || num_slice < 0) + return 0; + + return &slices[num_slice]; +} + +const Image *Volume::get_slice_by_z(float z) const +{ + int idx = get_slice_idx_by_z(z); + return get_slice(idx); +} + +int Volume::get_slice_count() const +{ + return (int)slices.size(); +} + +int Volume::get_slice_idx_by_z(float z) const +{ + int last_slice_idx = (int)slices.size() - 1; + int idx = z * last_slice_idx; + if(idx < 0) { + idx = 0; + } + else if(idx > last_slice_idx) { + idx = last_slice_idx; + } + + return idx; +} + +unsigned int Volume::get_texture() const +{ + if(!vol_tex_valid) { + create_vol_tex(); + vol_tex_valid = true; + } + + return vol_tex; +} + void Volume::draw() { } diff -r 92c163c939be -r e6485ef45e6e src/volume.h --- a/src/volume.h Fri Jan 17 23:45:56 2014 +0200 +++ b/src/volume.h Sat Jan 18 01:57:52 2014 +0200 @@ -7,15 +7,30 @@ class Volume { private: std::vector slices; + int width; int height; float zaspect; + unsigned int vol_tex; + mutable bool vol_tex_valid; + + void create_vol_tex() const; + public: Volume(); + ~Volume(); - bool load_volume(const char *fname); + bool load(const char *fname); + bool push_slice(Image &&slice); + const Image *get_slice(int num_slice) const; + const Image *get_slice_by_z(float z) const; + int get_slice_count() const; + + int get_slice_idx_by_z(float z) const; + + unsigned int get_texture() const; void draw(); };