前提・実現したいこと
OpenGLプログラムの勉強をしています。
glViewport()を2回使用し、ウインドウの上下に図形を表示しようとするのですが、
2回glviewport()を使用し描画すると、意図しない挙動となります。
その原因と、対処法についてご教示ください。
発生している問題・エラーメッセージ
は、緑と赤の三角形が、上下逆(意図と違う)に描画されている。
欲しいプログラムの出力は、以下で記載の output2,3を合成したもの(砂時計形状)
なぜoutput1のようになるのでしょうか?
エラーメッセージ
OpenGL コード #include <GL/glut.h> const GLfloat vertex[] = { -0.9, 0.9, 0.9, 0.9, 0, -0.9, -0.9, -0.9, 0.9, -0.9, 0, 0.9 }; int width, height; void disp(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3d(1.0, 0.0, 0.0); //(A) glDrawArrays(GL_POLYGON, 0, 3); //(A) glViewport(0, height / 2, width, height / 2); //(A) glColor3d(0.0, 1.0, 0.0); //(B) glDrawArrays(GL_POLYGON, 3, 3); //(B) glViewport(0, 0, width, height / 2); //(B) glFlush(); } void reshape(int w, int h) { width = w; height = h; disp(); } int main(int argc, char ** argv) { glutInit(&argc, argv); glutInitWindowPosition(100, 50); glutInitWindowSize(400, 300); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA); glutCreateWindow("3DCGへの道遠し"); glutDisplayFunc(disp); glutReshapeFunc(reshape); glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(2, GL_FLOAT, 0, vertex); glutMainLoop(); return 0; }
試したこと
1)プログラム中 (B)3か所をコメントアウトした時の出力(output2)は意図通り
2)プログラム中 (A)3か所をコメントアウトした時の出力(output3)も意図通り
補足情報(FW/ツールのバージョンなど)
特に何かに依存した現象と思えないので記載しません。
必要ならご指摘ください。
回答1件
あなたの回答
tips
プレビュー