diff --git a/src/osgVolume/Shaders/volume_accumulateSamples_lit_frag.cpp b/src/osgVolume/Shaders/volume_accumulateSamples_lit_frag.cpp index 2d658757e..4baa80963 100644 --- a/src/osgVolume/Shaders/volume_accumulateSamples_lit_frag.cpp +++ b/src/osgVolume/Shaders/volume_accumulateSamples_lit_frag.cpp @@ -1,7 +1,9 @@ char volume_accumulateSamples_lit_frag[] = "#version 110\n" "\n" "uniform sampler3D volumeTexture;\n" + "\n" "uniform float AlphaFuncValue;\n" + "uniform float TransparencyValue;\n" "\n" "varying vec3 lightDirection;\n" "\n" @@ -14,11 +16,13 @@ char volume_accumulateSamples_lit_frag[] = "#version 110\n" " vec3 deltaY = vec3(0.0, normalSampleDistance, 0.0);\n" " vec3 deltaZ = vec3(0.0, 0.0, normalSampleDistance);\n" "\n" - " while(num_iterations>0 && fragColor.a0 && transmittance>=t_cutoff)\n" " {\n" " vec4 color = texture3D( volumeTexture, texcoord);\n" "\n" - " if (color.a>AlphaFuncValue)\n" + " if (color.a>=AlphaFuncValue)\n" " {\n" "\n" " float px = texture3D( volumeTexture, texcoord + deltaX).a;\n" @@ -40,9 +44,11 @@ char volume_accumulateSamples_lit_frag[] = "#version 110\n" " color.b *= lightScale;\n" " }\n" "\n" - " float r = color.a * ((1.0-fragColor.a)*scale);\n" + " float ca = clamp(color.a*TransparencyValue, 0.0, 1.0);\n" + " float new_transmitance = transmittance*pow(1.0-ca, scale);\n" + " float r = transmittance-new_transmitance;\n" " fragColor.rgb += color.rgb*r;\n" - " fragColor.a += r;\n" + " transmittance = new_transmitance;\n" " }\n" "\n" " texcoord += dt;\n" @@ -50,6 +56,7 @@ char volume_accumulateSamples_lit_frag[] = "#version 110\n" " --num_iterations;\n" " }\n" "\n" + " fragColor.a = clamp(1.0-transmittance, 0.0, 1.0);\n" " if (num_iterations>0) fragColor.a = 1.0;\n" "\n" " return fragColor;\n" diff --git a/src/osgVolume/Shaders/volume_accumulateSamples_lit_tf_frag.cpp b/src/osgVolume/Shaders/volume_accumulateSamples_lit_tf_frag.cpp index ef8e93529..6132ee250 100644 --- a/src/osgVolume/Shaders/volume_accumulateSamples_lit_tf_frag.cpp +++ b/src/osgVolume/Shaders/volume_accumulateSamples_lit_tf_frag.cpp @@ -6,37 +6,28 @@ char volume_accumulateSamples_lit_tf_frag[] = "#version 110\n" "uniform float tfScale;\n" "uniform float tfOffset;\n" "uniform float TransparencyValue;\n" - "\n" "uniform float AlphaFuncValue;\n" "\n" "varying vec3 lightDirection;\n" "\n" "vec4 accumulateSamples(vec4 fragColor, vec3 ts, vec3 te, vec3 dt, float scale, float cutoff, int num_iterations)\n" "{\n" + " vec3 texcoord = te.xyz;\n" "\n" " float normalSampleDistance = length(dt);\n" " vec3 deltaX = vec3(normalSampleDistance, 0.0, 0.0);\n" " vec3 deltaY = vec3(0.0, normalSampleDistance, 0.0);\n" " vec3 deltaZ = vec3(0.0, 0.0, normalSampleDistance);\n" - " vec3 texcoord = te.xyz;\n" "\n" - " // scale = mix(scale, 1.0, 1.0);\n" - " //scale = mix(scale, 1.0, 0.75);\n" - "\n" - " // scale = 4.0;\n" - " if (scale>=1.0)\n" - " {\n" - " return vec4(1.0,1.0,1.0,1.0);\n" - " scale = 1.0;\n" - " }\n" - "\n" - " while(num_iterations>0 && fragColor.a0 && transmittance>=t_cutoff)\n" " {\n" " float a = texture3D( volumeTexture, texcoord).a;\n" " float v = a * tfScale + tfOffset;\n" " vec4 color = texture1D( tfTexture, v);\n" "\n" - " if (a>AlphaFuncValue)\n" + " if (a>=AlphaFuncValue)\n" " {\n" "\n" " float px = texture3D( volumeTexture, texcoord + deltaX).a;\n" @@ -58,22 +49,11 @@ char volume_accumulateSamples_lit_tf_frag[] = "#version 110\n" " color.b *= lightScale;\n" " }\n" "\n" - "#if 0\n" - " float r = color.a * (1.0-fragColor.a)*scale;\n" + " float ca = clamp(color.a*TransparencyValue, 0.0, 1.0);\n" + " float new_transmitance = transmittance*pow(1.0-ca, scale);\n" + " float r = transmittance-new_transmitance;\n" " fragColor.rgb += color.rgb*r;\n" - " fragColor.a += r;\n" - "#else\n" - " if (color.a0) fragColor.a = 1.0;\n" - " if (fragColor.wfragColor.a)\n" + " if (colorcolor.a>AlphaFuncValue && color.a>fragColor.a)\n" " {\n" " fragColor = color;\n" " }\n" diff --git a/src/osgVolume/Shaders/volume_accumulateSamples_standard_frag.cpp b/src/osgVolume/Shaders/volume_accumulateSamples_standard_frag.cpp index 9885617d0..5eb458736 100644 --- a/src/osgVolume/Shaders/volume_accumulateSamples_standard_frag.cpp +++ b/src/osgVolume/Shaders/volume_accumulateSamples_standard_frag.cpp @@ -2,21 +2,26 @@ char volume_accumulateSamples_standard_frag[] = "#version 110\n" "\n" "uniform sampler3D volumeTexture;\n" "\n" + "uniform float TransparencyValue;\n" "uniform float AlphaFuncValue;\n" "\n" "vec4 accumulateSamples(vec4 fragColor, vec3 ts, vec3 te, vec3 dt, float scale, float cutoff, int num_iterations)\n" "{\n" " vec3 texcoord = te.xyz;\n" "\n" - " while(num_iterations>0 && fragColor.a0 && transmittance>=t_cutoff)\n" " {\n" " vec4 color = texture3D( volumeTexture, texcoord);\n" "\n" - " if (color.a>AlphaFuncValue)\n" + " if (color.a>=AlphaFuncValue)\n" " {\n" - " float r = color.a * ((1.0-fragColor.a)*scale);\n" + " float ca = clamp(color.a*TransparencyValue, 0.0, 1.0);\n" + " float new_transmitance = transmittance*pow(1.0-ca, scale);\n" + " float r = transmittance-new_transmitance;\n" " fragColor.rgb += color.rgb*r;\n" - " fragColor.a += r;\n" + " transmittance = new_transmitance;\n" " }\n" "\n" " texcoord += dt;\n" @@ -24,6 +29,7 @@ char volume_accumulateSamples_standard_frag[] = "#version 110\n" " --num_iterations;\n" " }\n" "\n" + " fragColor.a = clamp(1.0-transmittance, 0.0, 1.0);\n" " if (num_iterations>0) fragColor.a = 1.0;\n" "\n" " return fragColor;\n" diff --git a/src/osgVolume/Shaders/volume_multipass_vert.cpp b/src/osgVolume/Shaders/volume_multipass_vert.cpp index 5a71e0f1e..fa6545d6c 100644 --- a/src/osgVolume/Shaders/volume_multipass_vert.cpp +++ b/src/osgVolume/Shaders/volume_multipass_vert.cpp @@ -1,13 +1,14 @@ char volume_multipass_vert[] = "#version 110\n" "\n" - "uniform mat4 texgen;\n" + "uniform mat4 eyeToTile;\n" + "uniform mat4 tileToImage;\n" "\n" - "varying vec4 cameraPos;\n" "varying vec4 vertexPos;\n" "varying vec3 lightDirection;\n" - "varying mat4 texgen_withProjectionMatrixInverse;\n" "varying vec4 baseColor;\n" "\n" + "varying mat4 texgen_eyeToTile;\n" + "\n" "varying float near;\n" "varying float far;\n" "varying float near_mult_far;\n" @@ -24,7 +25,6 @@ char volume_multipass_vert[] = "#version 110\n" "\n" " gl_Position = ftransform();\n" "\n" - " cameraPos = gl_ModelViewMatrixInverse * vec4(0,0,0,1);\n" " vertexPos = gl_Vertex;\n" " baseColor = gl_FrontMaterial.diffuse;\n" "\n" @@ -40,6 +40,6 @@ char volume_multipass_vert[] = "#version 110\n" " lightDirection = normalize((lightPosition-vertexPos).xyz);\n" " }\n" "\n" - " texgen_withProjectionMatrixInverse = texgen * gl_ProjectionMatrixInverse;\n" + " texgen_eyeToTile = eyeToTile * gl_ProjectionMatrixInverse;\n" "}\n" "\n";