私はglutDisplayFunc(render)で関数を呼び出すと、画面に単純な移動三角形を表示できません。私の関数を通常の呼び出しrender()のように呼び出すと、三角形はうまく表示されますが、この場合は三角形がアニメーション化されません。glutDisplayFunc()は描画しませんが、通常の関数呼び出しは
だから、基本的に私は2つの問題があります。
- をglutDisplayFuncとの通話機能三角形を描くことはできません(レンダリング)
- のような関数呼び出しが(レンダリング時に三角形をアニメーション化することはできません)が、それは三角形を描くことができますしかし、。
int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutInitWindowSize(600,600); glutInitContextVersion(4,3); glutInitContextProfile(GLUT_CORE_PROFILE); glutCreateWindow("Shader"); if (glewInit()) { cerr << "Unable to initialize GLEW ... exiting" << endl; exit(EXIT_FAILURE); } startup(); // render(); // WORKS FINE AND DRAW TRIANGLE glutDisplayFunc(render); //DOESN'T DRAW TRIANGLE shutdown(); glutMainLoop(); return 0; }
私はシェーダーがうまくコンパイルされていると信じて、そのためのコードの一部に誤りがない:
void render() { currentTime = glutGet(GLUT_ELAPSED_TIME); glClear(GL_COLOR_BUFFER_BIT); GLfloat color[] = { (float)sin(currentTime) * 0.5f + 0.5f, (float)cos(currentTime) * 0.5f + 0.5f, 0.0f, 1.0f }; glClearBufferfv(GL_COLOR, 0, color); GLfloat attrib[] = { (float)sin(currentTime) * 0.5f, (float)cos(currentTime) * 0.6f, 0.0f, 0.0f }; glVertexAttrib4fv(0, attrib); // Use the program object we created earlier for rendering glUseProgram(rendering_program); //Draw triangle glDrawArrays(GL_TRIANGLES,0,3); glutSwapBuffers(); }
メイン:
は、以下の私のメインとディスプレイのコードですglutDisplayFunc()を使わないで三角形を描画しています。唯一の問題はglutDisplayFunc(render)を使うときです。何も描かれていない。
どこが間違っていますか?上記の2つの問題を解決するにはどうすればよいですか?
あなたは 'glutMainLoop()'を入力する前に 'shutdown()'を呼んでいることに気づいていますね。あなたが私たちに示したコードでコールバックを呼び出さないようにする理由は絶対にありません。私が 'render()'にブレークポイントを設定すると、デバッガは少なくとも1回は実行されません。 'shutdown()'でコールバックを再度登録解除します... – thokra
omg私はそれを認識しませんでした。 !それは今働く。説明してくれてありがとう。 –