Hallo Community,
Ich habe eine Problem mit meiner Projection Matrix die ich mir geschrieben habe.
Momentan zum testen wirt normalerweise ein weißes Dreieck gezeichnet, das Problem ist aber wenn ich nun meine Projection Matrix hinzu füge wird nichts mehr angezeigt.
Die World und View Matrix werden als Indentity an die Shader übergeben und mit den Position-Koordinaten Multipliziert soweit funktioniert das alles noch doch nur wenn ich jetzt noch die Projection Matrix mit hinzu nehme funktioniert das nicht mehr.
Die Matrix habe ich so geschrieben wie es in einigen Tutorials erklärt wird bsp(ogldev).
Hoffe ihr Könnt mir helfen.
Initialisiert werden die Matrizen so:
|
C-/C++-Quelltext
|
1
2
3
|
view.InitIdentity();
identity.InitIdentity();
projection.InitPerspectiveProjection((float)800 / (float)600, 70.0f, 0.1f, 1000.0f);
|
Hier mal mein Code für die Matrix:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
|
void Matrix4f::InitPerspectiveProjection(float ar, float fov, float znear, float zfar)
{
float tanHalfFOV = tanf(TO_RADIAN(fov / 2));
float zRange = znear - zfar;
m[0] = 1.0f / (tanHalfFOV * ar); m[4] = 0.0f; m[8] = 0.0f; m[12] = 0.0f;
m[1] = 0.0f; m[5] = 1.0f/tanHalfFOV; m[9] = 0.0f; m[13] = 0.0f;
m[2] = 0.0f; m[6] = 0.0f; m[10] = (-znear - zfar) / zRange; m[14] = 2 * zfar * znear / zRange;
m[3] = 0.0f; m[7] = 0.0f; m[11] = 1.0f; m[15] = 0.0f;
}
|
Funktion zum Rendern
|
C-/C++-Quelltext
|
1
2
3
4
5
|
shader->BindShader();
buffer->Draw();
InitializeShaderComponents(identity.m, view.m, projection.m);
|
Funktionen für die Übergabe der Uniform variable
Shader-Klasse:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
bool ShaderClass::addUniform(char* uniformName, float* mat)
{
unsigned int Location;
Location = glGetUniformLocation(m_program, uniformName);
if(Location == -1)
{
return false;
}
glUniformMatrix4fv(Location, 1, false, mat);
return true;
}
|
Graphics-Klasse
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
bool GraphicsClass::InitializeShaderComponents(float* world, float* view, float* projection)
{
bool result;
result = shader->addUniform("world", world);
if (!result)
{
return false;
}
result = shader->addUniform("view", view);
if (!result)
{
return false;
}
result = shader->addUniform("projection", projection);
if (!result)
{
return false;
}
return true;
}
|
Gruß DevShadownight