2016-06-24 3 views
2

(...私の英語力のため申し訳ありませんが)私はので、私はまた、私自身の投影行列を使用GLSLの#version 440で自分のシェーダを書くためにしようと試みたが、私はこれだけを得る:(その の代わりにoutput を2番目のものは投影行列なし)なぜこの投影行列は機能しませんか?</p> <p>

何が起こっているのか知っていますか?

マトリックスの定義:

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

    projectionMatrix[0] = f/aspect; projectionMatrix[4] = 0; projectionMatrix[8] = 0;   projectionMatrix[12] = 0; 
    projectionMatrix[1] = 0;  projectionMatrix[5] = f; projectionMatrix[9] = 0;   projectionMatrix[13] = 0; 
    projectionMatrix[2] = 0;  projectionMatrix[6] = 0; projectionMatrix[10] = (far+near)/(near-far); projectionMatrix[14] = (2*far*near)/near-far; 
    projectionMatrix[3] = 0;  projectionMatrix[7] = 0; projectionMatrix[11] = -1;   projectionMatrix[15] = 1; 

    gl 

UniformMatrix4fv(posProjectionMatrix, 1, GL_TRUE, 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, 1); 
    Color = vertexColor; 
} 

//END 

あなたはより多くのコードが必要な場合は、単に尋ねます。

答えて

2

あなたの射影行列のエラーのカップルがあります:式で行方不明括弧があり

projectionMatrix[14] = (2*far*near)/near-far; 

、それは次のようになります。

projectionMatrix[14] = (2*far*near)/(near-far); 

最後の要素も間違っている:

projectionMatrix[15] = 1; 

この行列要素は、0である必要があります。

projectionMatrix[15] = 0.0f; 

@Nicolボーラはすでに今削除の回答で指摘したようにまた、あなたは列の主要な順序で行列を構築しているので、あなたがアップロードの一部として、行列を転置glUniformMatrix4fv()への引数を使用しないでください。正しい電話番号は:

glUniformMatrix4fv(posProjectionMatrix, 1, GL_FALSE, projectionMatrix); 
関連する問題