Problem with mapping a reflection texture

Started by
2 comments, last by 50_Cal 11 years, 7 months ago
Hello guys.
I used FBO to render the reflected stuff to a texture, after that I was confusing how to compute the correct texture coordinate for the texture?
Here is the main stuff I wrote in GLSL and it didnt give me the right thing:

// VERTEX SHADER
varying vec2 v;

vec4 vertex = gl_ModelVIewMatrix * gl_Vertex;
v.x = vertex.x/vertex.z;
v.y = vertex.y/vertex.z;


// FRAGMENT SHADER
texture2D( reflectTex, vec2((v.x+1) * 0.5, (v.y+1) * 0.5) );

What is wrong with the calculation? or is there another way to achieve it?
Advertisement
You need to use the ModelViewProjection matrix, and divide by [font=courier new,courier,monospace]w[/font], not [font=courier new,courier,monospace]z[/font], to get it into screen space.
To properly obtain the coordinates, I think that you need to multiply the vertex coordinates by the projection matrix and then divide the x/y values by -z.
However, I'd recommend considering using the stencil buffer to mask out the non-mirror areas, render the reflection, then render the unreflected scene. It's a bit more complex than that, but that's the general idea. The advantage to this method is that you don't need an additional texture, and the stencil test prevents some of the unnecessary fragment processing from happening.

You need to use the ModelViewProjection matrix, and divide by [font=courier new,courier,monospace]w[/font], not [font=courier new,courier,monospace]z[/font], to get it into screen space.


To properly obtain the coordinates, I think that you need to multiply the vertex coordinates by the projection matrix and then divide the x/y values by -z.
However, I'd recommend considering using the stencil buffer to mask out the non-mirror areas, render the reflection, then render the unreflected scene. It's a bit more complex than that, but that's the general idea. The advantage to this method is that you don't need an additional texture, and the stencil test prevents some of the unnecessary fragment processing from happening.

Thanks for your help, I will try these methods.

This topic is closed to new replies.

Advertisement