PDA

View Full Version : 3D texture rendering artifacts



vincent911001
04-07-2015, 06:54 PM
Hi all,

I have encountered a problem of rendering artifacts of 3D texture as below:

Rendering artifacts(texture get hidden when viewed from certain angle) (http://i.imgur.com/qv3aczV.gif?1)

I have searched on net as to find solution of this problem, and most answer pointed towards the problem in regards of depth buffer bit.
While i have tried to change the depth buffer bit to 24 bit from GL_DEPTH to GL_STENCIL in GLUT, the result remains the same as the texture(or geometry-not really sure) get hidden when viewed from certain angle..

So, can i know what is exactly the problem that results in this kind of artifacts??

Below is the fragment shader code snippet(OpenGL Development Cookbook)


void main()
{
//get the 3D texture coordinates for lookup into the volume dataset
vec3 dataPos = vUV;

vec3 geomDir = normalize((vec3(0.556,0.614,0.201)*vUV-vec3(0.278,0.307,0.1005)) - camPos);

vec3 dirStep = geomDir * step_size;

//flag to indicate if the raymarch loop should terminate
bool stop = false;

//for all samples along the ray
for (int i = 0; i < MAX_SAMPLES; i++) {
// advance ray by dirstep
dataPos = dataPos + dirStep;

stop = dot(sign(dataPos-texMin),sign(texMax-dataPos)) < 3.0f;

//if the stopping condition is true we brek out of the ray marching loop
if (stop)
break;

// data fetching from the red channel of volume texture
float sample = texture(volume, dataPos).r;


float prev_alpha = sample - (sample * vFragColor.a);
vFragColor.rgb = (prev_alpha) * vec3(sample) + vFragColor.rgb;
vFragColor.a += prev_alpha;


if( vFragColor.a>0.99)
break;
}

Thanks a lot...