オンラインで画面を横切ってボックスを移動し、ボックスが画面の最後に当たった後にリセットするコードをオンラインで見つけました。ここで
コードです:今glPushMatrix()とglPopMatrix()はどのようにシーンを同じに保ちますか?
void display(void) {
int sign = 1;
if (lastFrameTime == 0) {
/*
* sets lastFrameTime to be the number of milliseconds since
* Init() was called;
*/
lastFrameTime = glutGet(GLUT_ELAPSED_TIME);
}
int now = glutGet(GLUT_ELAPSED_TIME);
int elapsedMilliseconds = now - lastFrameTime;
float elapsedTime = float(elapsedMilliseconds)/1000.0f;
lastFrameTime = now;
int windowWidth = glutGet(GLUT_WINDOW_WIDTH);
if (boxX > windowWidth) {
boxX -= windowWidth;
}
boxX += (sign)*256.0f * elapsedTime;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
//creates a new matrix at the top that we can do things to?
glTranslatef(boxX, 0.0f, 0.0f);
/*
* draw a "quad" (rectangle)
*/
glBegin(GL_QUADS);
glVertex2f(0.0f, 0.0f);
glVertex2f(128.0f, 0.0f);
glVertex2f(128.0f, 128.0f);
glVertex2f(0.0f, 128.0f);
glEnd();
glPopMatrix();
//pops that matrix off the stack so we can have a "clean" version to do something next time.?
glutSwapBuffers();
}
した後、あなたがそれを開くように、私はglPushMatrix()
とglPopMatrix()
を理解する方法は、スタック上glPushMatrix()
プット(またはプッシュ)新しい行列は、あなたが物事を行うためということですあなたはもう一度 "きれいな"スレートを持っています。これは、の後にglPopMatrix()
を無視すると、私の四角形は一定の速度で動くのではなく、加速するように見えます。
しかし、私がglPushMatrix()
とglPopMatrix()
の内部で行った変更はどのように保たれていますか? glPushMatrix()
を使用してトップマトリックスを変更すると、変更が視覚化されますが、glPopMatrix()
を使用すると、それらの変更はすべて終了していませんか?私が「クリーン」スレートに再び復元されたとき、私のボックスは画面上をどのように動きますか?
変更を加えた後にマトリックスをもう一度ポップすると、その翻訳の状態はどのように記録されますか?
ところで。あなたは、減価償却されたコードを読んでOpenGLを学んでいることを知っていますか? PushMatrixとPopMatrixはOpenGL 3.0では廃止されているためです。 http://www.opengl.org/registry/doc/glspec30.20080923.pdf(406ページ) あなたの描画方法(begin; vertex; end)も廃止予定です。それは実際にそれを行う最悪の方法です。 私は問題を指摘していますが、私はそれらのための良い解決策を持っていません。 OpenGL 3.1チュートリアルのためにgoogleを試してみてください。良いOpenGL ESのチュートリアルを見つけることさえできます。 OpenGLを学習し始めたばかりの方は、きれいな方法でOpenGLを学んでみてください。 – petraszd
@petraszd:問題は、古いスタイルを使ってOpenGLを教える多くのリソースがあるということです。 NeHeなどのリソースがアップグレードされるまで、これらの問題に対するソリューションを提供する必要があります。 –
@ミハイ:NeHeはかなり死んでいる(アップデートしていない)ので、アップグレードするつもりはない。 –