# I have a problem wit my projection matrix...

(Sorry for my english skills…)

I tryed to write my own GLSL #version440 schader but when I add my projectionMatrix I get a black screen, I think because of any reason my matrix is 0 (when I use the vertex coords for the color the object is black (matrix is not added to the vertex but to the color…))

Matrix :
// projectionMatrix is defined
void Perspective(float fovy, float aspect, float near, float far)
{
fovy = degree*90;
float f;
f = 1/tan(fovy/2);

projectionMatrix = f/aspect; projectionMatrix = 0; projectionMatrix = 0; projectionMatrix = 0;
projectionMatrix = 0; projectionMatrix = f; projectionMatrix = 0; projectionMatrix = 0;
projectionMatrix = 0; projectionMatrix = 0; projectionMatrix = (far+near)/(near-far); projectionMatrix = (2farnear)/near-far;
projectionMatrix = 0; projectionMatrix = 0; projectionMatrix = -1; projectionMatrix = 1;

glUniformMatrix4fv(posProjectionMatrix, 1, GL_FALSE, projectionMatrix);
}

#version 440

in vec4 vertexPosition;
in vec4 vertexColor;

out vec4 Color;

uniform mat4 modelMatrix;
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;

void main()
{
gl_Position = projectionMatrix*vec4(vertexPosition.xyz, 10);
Color = vertexColor;
}

//END

Do anyone know why I get a black screen ??

First, the matrix needs to be transposed. The above would (almost) be typical for a perspective projection if the matrix was in row-major order, but OpenGL uses column-major order by default.

Second, index 15 should be 0, not 1. For a perspective projection, the W component should be strictly proportional to the Z component. Affine transformations (such as rotation, scale, translation and orthographic projection) simply copy the W component (i.e. the bottom row is [0 0 0 1]), but a perspective projection isn’t an affine transformation.

Why are you setting the W component to 10? This effectively scales vertexPosition by 1/10 (this only affects the computed depth value, so the effect is as if you scaled the near and far distances by 10).

Now I get a strange result.
I don’t know why but may it be that I miss something in the shader ??

I changed the GL_FALSE to GL_TRUE, now I get a black screen.

MATRIX :

void Perspective(float fovy, float aspect, float near, float far)
{
fovy = degree*90;
float f;
f = 1/tan(fovy/2);

projectionMatrix = f/aspect; projectionMatrix = 0; projectionMatrix = 0; projectionMatrix = 0;
projectionMatrix = 0; projectionMatrix = f; projectionMatrix = 0; projectionMatrix = 0;
projectionMatrix = 0; projectionMatrix = 0; projectionMatrix = (far+near)/(near-far); projectionMatrix = (2farnear)/near-far;
projectionMatrix = 0; projectionMatrix = 0; projectionMatrix = -1; projectionMatrix = 0;

glUniformMatrix4fv(posProjectionMatrix, 1, GL_TRUE, projectionMatrix);
}

I solved it, projectionMatrix has to be (2farnear)/(near-far) not (2farnear)/near-far .