I’m starting to play around with OpenGL ES 2 and when trying to move an object in the Z coord it just either disappears or doesn’t do anything.
It moves well in X and Y but not Z.
To move in Z I use the gl_Position.z in the shader.
The source of the project is in: http://cl.ly/24240x2D1t2A3I0c1l1P
It’s a XCode project for iOS, the setup code can be found in EAGLView.m @ createFramebuffer, and the draw code can be found in TranslateSinZ.m @ drawView.
I believe the problem should be in the setup code but I can’t figure out what’s wrong…
Anyone can help me out?
gl_Position is the position of the vertex in homogeneous clip space. Its Z component is only used for clipping against the near and far planes as well as for the depth test. It does not affect the position of the vertex in X and Y on screen.
I suspect that what you actually want is to translate the vertices in view space Z, before applying a projection transformation.
I thought just changing the value in “gl_Position.z” would work since it works for “gl_Position.x” and “gl_Position.y”.
So to translate the rectangle in Z, how can I achieve that?
“Translate the vertices in view space Z” can you explain in another fashion?
Thank you for your time.
Indeed, changing the value of gl_Position.z wont work because the rendered image is on a 2d plane with no depth
What you need to do is add back in the model, view and projection matrices that got deprecated in the move to programmable shaders, so my vertex shader looks a little something like:
attribute lowp vec4 v_position;
attribute lowp vec2 v_texture;
uniform mat4 m_model;
uniform mat4 m_view;
uniform mat4 m_projection;
varying vec2 textureVarying;
textureVarying = v_texture;
gl_Position = m_projection * m_view * m_model * v_position;
Here, translations and rotations for a given model are loaded into the model matrix, m_model , the camera setup is loaded into the view matrix, m_view and the projection (ortho or perspective) is loaded into the projection matrix m_projection .
This topic was automatically closed 183 days after the last reply. New replies are no longer allowed.