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){",
" continue;",
" }",
" vec3 texCM = getCorrectedTexturePositions("+sgvRayPositions+", m);",
" 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);",
" }",
" if(densities[n] < 0.0 ){",
" continue;",
" }",
" vec3 texCN = getCorrectedTexturePositions("+sgvRayPositions+", n);",
" float cn = texture("+suvCurvatureTexture+"[n],texCN).r;",
" 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){",
" continue;",
" }",
" float currentDifference = densities[n]-densities[m];",
" difference = max(difference,currentDifference);",
" }",
" if(densities[n]< 0.0 ){",
" continue;",
" }",
" maxValue = max(maxValue,densities[n]);",
" minValue = min(minValue,densities[n]);",
" }",
" return difference;",
" return maxValue - minValue;",
"}"
};
addCodeArrayToList(dec, code);
......
......@@ -27,32 +27,29 @@ public class MidmapMaxDifference extends AbstractVolumeAccumulator {
" float ret["+scvMaxNumberOfVolumes+"];",
" for(int i = 0; i < "+scvMaxNumberOfVolumes+";i++){",
" vec3 textureCoord = getCorrectedTexturePositions(position,i);",
" float midmapValue = textureLod("+suvVolumeTexture+"[i],textureCoord,1.0).r;",
" float midmapValue = textureLod( "+suvVolumeTexture+"[i],textureCoord,1.0).r;",
" ret[i] = midmapValue;",
" }",
" return ret;",
"}",
"",
"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;",
" 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]));",
" numberOfChanges++;",
" }",
" 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 register or to comment