0

コードの一部を最新の OpenGL に変換しようとしています。OpenGL エラーが発生しないところまで到達しましたが、オブジェクトを描画しようとしても何も表示されません。これが私のコードです(コンテキスト作成とエラーチェックを除く):

//Compile shaders and create/link program
//I very highly doubt the problem's here (all my tests say it worked fine),
//so I'm leaving this out for now,  but I'll dig it out of my classes if
//there's no obvious problem with the VBO code.

//Create VAO, VBO

unsigned vaoId, vboId;
int positionAttributeLocation;
float vertices[] = {...vertex data here...};
unsigned indices[] = {...index data here...};

positionAttributeLocation = glGetAttribLocation(programId, "position");

glGenVertexArrays(1, &vaoId);
glGenBuffers(1, &vboId);

glBindVertexArray(vaoId);
glBindBuffer(GL_ARRAY_BUFFER, vboId);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glVertexAttribPointer(positionAttributeLocation, 3, GL_FLOAT, GL_FALSE, 0, null);
glEnableVertexAttribArray(positionAttributeLocation);

//Create index buffer
unsigned indexId;
glGenBuffers(1, &indexId);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexId);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

glUseProgram(programId);
glDrawElements(GL_TRIANGLES, sizeof(indices)/sizeof(unsigned int), GL_UNSIGNED_INT, null);

完全な SSCCE ではありませんが、問題を引き起こす可能性のあるコードはこれだけであり、ほぼ自己完結型です。

4

3 に答える 3

0

私はそれを考え出した。一部のリファクタリングで、幅と高さの変数を適切に設定するのを忘れて、0 x 0 のビューポートを作成しました。おっとっと...

于 2012-08-18T03:46:10.040 に答える
0

あなたの問題は、cg プログラムとモデルビュー空間にある可能性が高いです。

cgGLSetStateMatrixParameter(modelViewMatrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);gldrawarrays の直前にプログラムに追加し、cg ファイルに を追加しOUT.HPos = mul(ModelViewProj, IN.position);ます。

またmodelViewMatrix、initcg セクションに cgparameter として追加します。

私は cgtoolkit の基本的な opengl サンプルからこれを解決しました。私のレンダリング機能はあなたのものと非常に似ており、同じ問題が発生した後に動作します。

于 2012-08-10T18:18:50.063 に答える
0

電話をかけるglUseProgram()前に試してみてください。glGetAttribLocation()/glEnableVertexAttribArray()

于 2012-06-19T16:22:42.520 に答える