1

ポリゴンを変換したいとしましょう。描画する前に glTranslatef を使用すると変換されますが、2 つのポリゴンを描画して 1 つだけ変換したい場合はどうすればよいですか?

#include <OpenGL/OpenGL.h>
#include <GLUT/GLUT.h>
#include "utility.h"

void init()
{
    glLoadIdentity();
    glOrtho(-1, 1, -1, 1, -1, 1);
}

void render()
{
    glClearColor(APPLE_GRAY);
    glClear(GL_COLOR_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glTranslatef(0.5, 0.0, 0.0);
    glBegin(GL_POLYGON);
    glColor4f(RED);
    glVertex2f(0,0.5);
    glVertex2f(-0.5,-0.5);
    glVertex2f(0.5, -0.5);
    glBegin(GL_POLYGON);
    glColor4f(BLUE);
    glVertex2f(0.5,0.5);
    glVertex2f(-0.5,0.5);
    glVertex2f(-0.5, -0.5);
    glVertex2f(0.5, -0.5);
    glEnd();
    glFlush();
}

四角形ではなく、三角形だけを翻訳したいのですが、どうすればいいですか?

4

1 に答える 1

7

翻訳する前に、次のように呼び出します。

glPushMatrix()

次に、最初のポリゴンを描画した後、次を呼び出します。

glPopMatrix()

glEnd()また、最初のポリゴンの後に呼び出しがないことに気付きました。さらに、リストされていないコードがない限り、 を呼び出すときにモデルビューから射影行列に切り替えていないことに気付きましたglOrtho()。この例でモデル ビュー マトリックスのみを使用している場合、これは厳密には必要ありませんが、従来のアプローチでは、次のようにプロジェクションを設定します。

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1, 1, -1, 1, -1, 1);

次に、レンダリング関数は、ポリゴン レンダリング用のモデル ビュー マトリックスを設定します。繰り返しますが、要件ではなく、マトリックスを1つしか使用していないため、必要なことを実行するように見えます。

リファレンス: glPushMatrix() OpenGL ドキュメント

于 2012-10-16T14:29:25.807 に答える