1

テスト目的で、すべての頂点の位置をゼロに設定しようとしています。しかし、3 つ以上のディメンションを変更しようとすると (どちらでもかまいません)、シェーダーは静かにクラッシュします。ここで何が起こっているのか、誰か私に手がかりを与えることができますか? 私のコード:

static const float  vertices[12] = {
                -0.5,-0.5, 0.0,
                0.5,-0.5, 0.0,
                -0.5, 0.5, 0.0,
                0.5, 0.5, 0.0,
            };
glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)vertices);
glEnableVertexAttribArray(vertexHandle);            
glUniformMatrix4fv(mvpMatrixHandle, 1, GL_FALSE, (const GLfloat*)&modelViewProjection.data[0]);
glDrawArrays(GL_POINTS, 0, 4);

そして私のシェーダー:

attribute vec4 vertexPosition;
uniform mat4 modelViewProjectionMatrix;

void main()
{
    vec4 temp = vertexPosition;
    temp.x = 0.0;
    temp.y = 0.0;
    temp.z = 0.0; // Can set any 2 dimensions (e.g. x and y or y and z)
                  // to zero, but not all three or the shader crashes.

    gl_Position = modelViewProjectionMatrix * vec4(temp.xyz, 1.0);
}
4

1 に答える 1

0

vertexPositionとして宣言しているからかもしれませんが、C コードで頂点ごとにvec43 秒しか渡していませんか? floatあなたのtempベクトルに関する部分はニシンだと思います。

于 2012-04-07T00:15:21.963 に答える