Hello,
In our current project we use Opengl via JOGL ( Java bindings for OpenGL ). I was asked to test GL 3.1 functionality. My problem is : when i provide required matrix for 3D object transformation i get some clipping artifacts. I know that ftransform( ) removed with glsl 1.4.
What i do is:
In Application side:
- Calculate View and Projection matrices for current frame
- Calculate World matrix of the 3D object for current frame
- Calculate ViewProj = Projection * View matrix for current
frame and for each object calculate WorldViewProj =
ViewProj * World. - Pass World and WorldViewProj as uniforms to vertex shader
My Vertex shader is something like that :
( it transforms objects from object space to clip space and performs some calculations for lambertian diffuse shading)
#version 140
uniform mat4 WorldViewProj;
uniform mat4 World;
uniform vec3 lightPos;
in vec3 position;
in vec3 normal;
out vec3 outNormal;
out vec3 lightVector;
void main()
{
gl_Position = WorldViewProj * vec4(position.xyz , 1.0);
vec3 worldPos = vec3(World * vec4(position,1.0));
outNormal = vec3(World * vec4(normal , 0.0));
lightVector = lightPos - worldPos;
outNormal = normalize(outNormal);
lightVector = normalize(lightVector);
}
This code produces an image something like that :
i coded glsl 1.3 and glsl 1.2 versions of that vertex shader. Results were the same. Then i tried ftransform( )with glsl 1.3 and glsl 1.2 everything was ok ( no clipping artifacts ).
Last thing i tried with GL 3.1 and glsl 1.4 was : passing world , view and projection matrices to vertex shader and do matrix multipications in the shader.
uniform mat4 World;
uniform mat4 View;
uniform mat4 Proj;
in vec3 position;
in vec3 normal;
out vec3 outNormal;
out vec3 lightVector;
void main()
{
gl_Position = (Proj * View * World ) * vec4(position.xyz , 1.0);
// rest is the same..
}
This code gives correct output but doing 2 matrix muls + 1 matrix - vector mul per vertex is overkill.
I use WinXp pro , Nvidia GTX 285 , 182.52 drivers installed.
Am i missing something too obivous ?
Thanks.
scg.