2012-04-27 8 views
1

私はOpenGL ES 2.0を試してみようとしています。私はOpenGL初心者です。私は、現時点では原点に赤い四角形を描画し、行列を原点から画面の中央に移動するために使用したいという単純なプログラムを持っています。私はこれまでのところすべてを正しく行ったと信じていますが、シェーダに行列を適用すると何も見当たりません。C++ OpenGL ES 2.0マトリックス変換 - 初心者

シェーダ:

const char vShaderStr[] = "attribute vec4 a_position; \n" 
     "attribute vec4 a_colour; \n" 
     "varying vec4 v_colour; \n" 
     "uniform mat4 u_transformation; \n" 
     "void main() \n" 
     "{ \n" 
     "  v_colour = a_colour; \n" 
     "  gl_Position = u_transformation * a_position; \n" 
     "} \n"; 
const char fShaderStr[] = "varying vec4 v_colour; \n" 
     "void main() \n" 
     "{ \n" 
     "  gl_FragColor = v_colour; \n" 
     "} \n"; 

マトリックスを作成し、シェーダに送る:

transformationMatrix = glGetUniformLocation(programObject, "u_transformation"); 
... 
GLfloat vMatrix[] = { 
     0.0f, 0.0f, 0.0f, 0.0f, 
     0.0f, 0.0f, 0.0f, 0.0f, 
     0.0f, 0.0f, 0.0f, 0.0f, 
     -0.5f, -0.5f, 0.0f, 1.0f, 
    }; 
glUniformMatrix4fv(transformationMatrix, 1, GL_FALSE, vMatrix); 

私はそれはシェーダに送られる前に、このマトリックスと、いくつかの数学を行う必要がありますか?もしそうなら、どのように?私はここでほとんどの人に明白な何かを見逃していると感じています。

答えて

2

あなたのマトリックスはおそらく間違っています。他のすべてが正しく設定されていると仮定すると、これは正しい行列になります。

GLfloat vMatrix[] = { 
    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.5f, -0.5f, 0.0f, 1.0f, 
}; 
+0

これは素晴らしい感謝です!だから、まず恒等行列から始めて、その周りの他の値を変えなければなりません。 –

+0

Yup、それ以外の場合、u_transformation * a_positionは不正な値を返します(x = 0、y = 0、z = 0)。 – starbugs