Skip to content
Snippets Groups Projects
Commit e05954d8 authored by Michael Heyde's avatar Michael Heyde
Browse files

fixed midmap generation

improved distance metrics
parent d097d1dc
No related branches found
No related tags found
No related merge requests found
......@@ -247,10 +247,7 @@ public class Texture {
}
updateTextureParameters(gl2);
GLErrorHandler.assertGL(gl2);
if(shouldGenerateMidmaps){
gl2.glGenerateMipmap(textureType);
}
GLErrorHandler.assertGL(gl2);
switch (dimensions.length) {
case 1:
......@@ -288,6 +285,9 @@ public class Texture {
default:
break;
}
if(shouldGenerateMidmaps){
gl2.glGenerateMipmap(textureType);
}
GLErrorHandler.assertGL(gl2);
}
......
......@@ -617,9 +617,10 @@ public class MultiVolumeRenderer extends AbstractShaderSceneElement{
for(int i =0; i< sources.getMaxNumberOfVolumes(); i++){
location = getArrayEntryLocation(gl2, suvVolumeTexture, i);
Texture t = createVolumeTexture(gl2, location);
// t.setTexParameteri(gl2, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR_MIPMAP_LINEAR);
t.setTexParameteri(gl2, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR_MIPMAP_LINEAR);
t.setShouldGenerateMidmaps(true);
volumeTextureMap.put(i, t);
GLErrorHandler.assertGL(gl2);
}
location = getLocation(suvColorTexture);
colorTexture = new Texture(GL2.GL_TEXTURE_1D,location,GL2.GL_RGBA,GL2.GL_RGBA,GL2.GL_FLOAT);
......
......@@ -2,7 +2,6 @@ package bdv.jogl.VolumeRenderer.ShaderPrograms.ShaderSources.functions.accumulat
import static bdv.jogl.VolumeRenderer.ShaderPrograms.ShaderSources.MultiVolumeRendererShaderSource.scvMaxNumberOfVolumes;
import static bdv.jogl.VolumeRenderer.ShaderPrograms.ShaderSources.MultiVolumeRendererShaderSource.sgvRayPositions;
import static bdv.jogl.VolumeRenderer.ShaderPrograms.ShaderSources.MultiVolumeRendererShaderSource.suvVolumeTexture;
import static bdv.jogl.VolumeRenderer.ShaderPrograms.ShaderSources.MultiVolumeRendererShaderSource.sgvVolumeNormalizeFactor;
import static bdv.jogl.VolumeRenderer.utils.ShaderSourceUtil.addCodeArrayToList;
import static bdv.jogl.VolumeRenderer.utils.ShaderSourceUtil.appendNewLines;
......@@ -123,26 +122,26 @@ public class MaxCurvatureDifference extends AbstractVolumeAccumulator {
"uniform float "+suvCurvatureMax+";",
"uniform float "+suvCurvatureMin+";",
"float curveNormalizeFactor = 1.0/("+suvCurvatureMax+"-"+suvCurvatureMin+");",
"bool factorChanged = false;",
"",
"float "+getFunctionName()+"(float densities["+scvMaxNumberOfVolumes+"]) {",
" float difference = 0.0;",
" float minValue = "+Float.MAX_VALUE+";",
" float maxValue = "+Float.MIN_VALUE+";",
" if(!factorChanged){",
//TODO
" "+sgvVolumeNormalizeFactor+" = curveNormalizeFactor;",
" factorChanged = true;",
" }",
" for(int n = 0; n < "+scvMaxNumberOfVolumes+"; n++){",
" vec3 texCN = getCorrectedTexturePositions("+sgvRayPositions+", n);",
" for(int m = 0; m < "+scvMaxNumberOfVolumes+";m++){",
" if(densities[n]<0 || densities[m]<0){",
" if(densities[n] < 0.0 ){",
" continue;",
" }",
" vec3 texCM = getCorrectedTexturePositions("+sgvRayPositions+", m);",
" vec3 texCN = getCorrectedTexturePositions("+sgvRayPositions+", n);",
" float cn = texture("+suvCurvatureTexture+"[n],texCN).r;",
" float cm = texture("+suvCurvatureTexture+"[m],texCM).r;",
"",
" "+sgvVolumeNormalizeFactor+" = curveNormalizeFactor;",
" //manhatten distance",
" float currentDifference = cn-cm;",
" difference = max(difference,currentDifference);",
" }",
" maxValue = max(maxValue,cn);",
" minValue = min(minValue,cn);",
" }",
" return difference;",
" return maxValue -minValue;",
"}"
};
addCodeArrayToList(dec, code);
......
......@@ -19,17 +19,16 @@ public class MaxDifferenceAccumulator extends AbstractVolumeAccumulator {
String[] dec= new String[]{
"#line "+Thread.currentThread().getStackTrace()[1].getLineNumber()+ " 7",
"float "+getFunctionName()+"(float densities["+scvMaxNumberOfVolumes+"]) {",
" float difference = 0;",
" float maxValue = 0.0;",
" float minValue = "+Float.MAX_VALUE+";",
" for(int n = 0; n < "+scvMaxNumberOfVolumes+"; n++){",
" for(int m = 0; m < "+scvMaxNumberOfVolumes+";m++){",
" if(densities[n]<0 || densities[m]<0){",
" if(densities[n]< 0.0 ){",
" continue;",
" }",
" float currentDifference = densities[n]-densities[m];",
" difference = max(difference,currentDifference);",
" maxValue = max(maxValue,densities[n]);",
" minValue = min(minValue,densities[n]);",
" }",
" }",
" return difference;",
" return maxValue - minValue;",
"}"
};
addCodeArrayToList(dec, code);
......
......@@ -34,25 +34,22 @@ public class MidmapMaxDifference extends AbstractVolumeAccumulator {
"}",
"",
"float "+getFunctionName()+"(float densities["+scvMaxNumberOfVolumes+"]){",
" float density = 0;",
" float maxValue = 0.0;",
" float minValue = "+Float.MAX_VALUE+";",
" float midMap["+scvMaxNumberOfVolumes+"] = getMidmapValues("+sgvRayPositions+");",
" int numberOfChanges = 0;",
" for(int n = 0; n < "+scvMaxNumberOfVolumes+"; n++){",
" if(densities[n] < 0.0){",
" continue;",
" }",
" for(int m = n+1; m < "+scvMaxNumberOfVolumes+"; m++){",
" if(densities[m] < 0.0){",
" continue;",
" }",
" density = max(density, abs(midMap[n]-midMap[m]));",
" maxValue = max(maxValue,midMap[n]);",
" minValue = min(minValue,midMap[n]);",
" numberOfChanges++;",
" }",
" }",
" if(numberOfChanges ==0){",
" return 0.0;",
" }",
" return density;",
" return maxValue - minValue;",
"}"
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment