0

みなさん、このコードに何か問題があることに気づきましたか? それは本「Open GLES 2.0 Programming Guide」からまっすぐであり、結果を探し回り、コードの変更などに取り組んでいますが、それでも機能しません!! このコードが生成する結果は、画像を介して添付されます三角形であるべきところに長方形が表示される

頂点シェーダー コード:

attribute vec4 v_Position;

void main()
{
    gl_Position = v_Position;
}

フラグメント シェーダー コード:

precision mediump float;

void main()
{
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

最後に私のコード: (シェーダーが正常にコンパイルされることに注意してください。2 つのシェーダー プログラムが「shaderProgram」というプログラムにリンクされます)

GLfloat verts[] = {0.0f, 0.5f, 0.0f,
    -0.5f, -0.5f, 0.0f,
    0.5f, -0.5f, 0.0f};
GLushort inds[] = {0,1,2};
GLuint ibo = 0;
glUseProgram(shaderProgram);
////get the buffer object
glGenBuffers(1,&vbo);
glGenBuffers(1,&ibo);

glBindBuffer(GL_ARRAY_BUFFER,vbo);
glBufferData(GL_ARRAY_BUFFER,3*3,verts,GL_STATIC_DRAW);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLushort)*3,inds,GL_STATIC_DRAW);

GLint vPos = glGetAttribLocation(shaderProgram, "v_Position");
glBindBuffer(GL_ARRAY_BUFFER,vbo);
glEnableVertexAttribArray(vPos);
glVertexAttribPointer(vPos,3,GL_FLOAT,GL_FALSE,3,0);
glBindAttribLocation(shaderProgram, vPos, "v_Position");


glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, 0);

glDeleteBuffers(1,&vbo);
glDeleteBuffers(1,&ibo);
4

1 に答える 1

0

問題は機能にあるようです glVertexAttribPointer(vPos,3,GL_FLOAT,GL_FALSE,3,0);

5 番目のパラメータはストライドで、最後のパラメータはサイズです。この場合は必要ありません: 次のようにする必要があります: glVertexAttribPointer(vPos,3,GL_FLOAT,GL_FALSE,0, nullptr);

于 2013-10-03T10:54:16.313 に答える