1

私はOpenGLES2.0を試していますが、ほとんどOpenGLの初心者です。現時点では、原点に赤い正方形を描くだけの簡単なプログラムがあり、マトリックスを使用して原点から画面の中央に移動したいと思います。これまでのところすべてが正しく行われたと思いますが、マトリックスをシェーダーに適用すると画面が空白になるため、何かが欠けているに違いありません。

シェーダー:

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);

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

4

1 に答える 1

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,
};
于 2012-04-27T08:43:03.737 に答える