2012-04-03 17 views
0

私は、次の頂点シェーダがありますアイデンティティ行列の混乱

attribute vec4 Position; 
attribute vec4 SourceColor; 
varying vec4 DestinationColor; 
uniform mat4 Projection; 

void main(void) { 
    DestinationColor = SourceColor; 
    gl_Position = Projection * Position; 
} 

を私はその後Projection均一に次の行列を適用しよう:

float matrix[16] = { 
    1.0f, 0.0f, 0.0f, 0.0f, 
    0.0f, 1.0f, 0.0f, 0.0f, 
    0.0f, 0.0f, 1.0f, 0.0f, 
    0.0f, 0.0f, 0.0f, 1.0f 
}; 

glUniformMatrix4fv(projectionSlot, 1, GL_FALSE, matrix); 

はこの何もしないではないでしょうか?これを実行した後、私はもはや画面上に私のオブジェクトを見ることができません...

答えて

1

はいそれはノーオペレーションでなければなりません。プロジェクションを削除した場合は、それがうまくいくと言うでしょうか? カップルのアイデア:

  • glGetError
  • チェックシェーダのコンパイル/リンクステータス(glGetShader/Programiv)
  • を確認がglUniform通話中にバインドされたプログラムですか?
  • projectionSlotは有効な値ですか?
+0

'glGetError()'は0を返します。 'glUniformMatrix4fv()'と 'projectionSlot = glGetAttribLocation(programHandle、" Projection ");'を呼び出す前にプログラムをコンパイルしてリンクしました。 「glUniform呼び出し中にプログラムがバインドされていますか?」という意味はどうですか? – rid

+0

@Radu:Attribではなく、「glGetUniformLocation」である必要があります。 – Tim

+0

「glGetUniformLocation()」に変更されましたが、それでも同じ問題です。 – rid

0

私はプログラミングで行列を使用したことはありませんが、私は数学のコースをたくさん取っています。使用している投影がどのように働いているのか分かりませんが、xをyに投影することは、yをxに投影することとはまったく異なります。あなたがしていない場合は、それらを回してみてください。