Advertisement Jump to content
Sign in to follow this  

reflections with GLSL

This topic is 4987 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi, I'm afraid my problem is something that has been discussed much, but either I'm birdbrained or my setting does not fit in most cases. :\ Task: Take Cubemap and get correct reflection vectors for an object inside the map. The Cubemap is no problem at itselft, it works nice, but the Reflection-Vectors are. A took the folowing spectations: - When using simply gl_Vertex and I take a Cubemaplookup, the Cubemap is mapped on the Object. This works as expected with a simple thing like a sphere, but does not work good on complex objects like a VRML-Tree that uses a lot of internal transformations. - When using the modelview-transform gl_Vertex (pos=gl_ModelViewMatrx*gl_Vertex), the "Reflections" are screen-aligned, that means you never can see the "backside"-Reflection if you rotate the object, your always faced to one half of the map. (also understandable, since Vertices are always transformed in the same results to be shown on screen). - I tried some other methods, used often, but no one ever did it for me (using cam-position and so on). I'll have to add that I have to use a Library that traverses VRML-Trees, so I can not be sure what Object-Transformations are done. Thus, I would prefer a solution that only depends on the Camera-Transformation (means ModelView). Does anyone has an idea or got to a similar problem once? Any help would be highly appreciated! Thank you!

Share this post

Link to post
Share on other sites
This should be simple as I've done it tons of times;

a)1st mehtod (not so sure about it):

vec4 viewVector = gl_ModelViewMatrix * -gl_Vertex;
vec3 newNormal = gl_NormalMatrix * gl_Normal;
reflection = reflect(, newNormal);

reflection = gl_TextureMatrix[0]*reflection; //Where gl_TextureMatrix holds the inverse modelview matrix with zero translation components.

b)2nd method that I'm totally sure of the correct outcome:
Pass the cumulative transform matrix from the beginning of the stack all the way down to your shape transforms.

uniform vec4 worldTransform0;
uniform vec4 worldTransform1;
uniform vec4 worldTransform2;
uniform vec4 worldTransform3;
uniform vec4 cameraPosition;

void main(void)
mat3 rotations = mat3(,,;

vec4 worldSpaceVertexPos = vec4(worldTransform0.x * gl_Vertex.x +
worldTransform1.x * gl_Vertex.y +
worldTransform2.x * gl_Vertex.z +
worldTransform0.y * gl_Vertex.x +
worldTransform1.y * gl_Vertex.y +
worldTransform2.y * gl_Vertex.z +
worldTransform0.z * gl_Vertex.x +
worldTransform1.z * gl_Vertex.y +
worldTransform2.z * gl_Vertex.z +
worldTransform3.z, 0.0);

gl_TexCoord[0] = gl_MultiTexCoord0;
gl_TexCoord[1] = cameraPosition - worldSpaceVertexPos;
gl_TexCoord[2].xyz = rotations*gl_Normal;
gl_Position = ftransform();

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!