19

私はC++を使用したOpenGLプログラミングの初心者であり、数学はあまり得意ではありません。等角投影を行う簡単な方法はありますか?

私は、一般的な正射影ではなく、真の等角投影を意味します。

(等角投影は、ユニットX、Y、およびZベクトルの投影が等しく長く、それらの間の角度が正確に120度である場合にのみ発生します。)

コードスニペットは高く評価されています。

4

4 に答える 4

28

gluLookAtを使ってみる

glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

/* use this length so that camera is 1 unit away from origin */
double dist = sqrt(1 / 3.0);

gluLookAt(dist, dist, dist,  /* position of camera */
          0.0,  0.0,  0.0,   /* where camera is pointing at */
          0.0,  1.0,  0.0);  /* which direction is up */
glMatrixMode(GL_MODELVIEW);

glBegin(GL_LINES);

glColor3d(1.0, 0.0, 0.0);
glVertex3d(0.0, 0.0, 0.0);
glVertex3d(1.0, 0.0, 0.0);

glColor3d(0.0, 1.0, 0.0);
glVertex3d(0.0, 0.0, 0.0);
glVertex3d(0.0, 1.0, 0.0);

glColor3d(0.0, 0.0, 1.0);
glVertex3d(0.0, 0.0, 0.0);
glVertex3d(0.0, 0.0, 1.0);

glEnd();

glFlush();

結果は

代替テキスト

立方体を描いて、平行線が実際に平行であることを確認できます

glPushMatrix();
glTranslated(0.5, 0.5, 0.5);
glColor3d(0.5, 0.5, 0.5);
glutWireCube(1);
glPopMatrix();

代替テキスト

于 2009-06-29T16:27:03.027 に答える
9

等角図法は、特定の回転角度で正射図法を使用するだけの問題です。

正射投影を使用して、8 つの潜在的な方向のいずれかを選択し、モデルの完全な等角図を取得できる必要があります。参照されている Wiki 記事の数学に従ってビュー マトリックスを設定し、射影マトリックスの正投影を行うだけで、準備は完了です。

于 2009-06-29T16:46:19.187 に答える
3

多分私は数学を正しく理解していないかもしれませんが、ウィキペディアのリンクで説明されているようにカメラを配置して、標準の正射影を使用することはできませんか?

同じでなくても、プロジェクション スタックは完全にあなた次第です。

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// your isometric matrix here (see math on Wikipedia)
glMatrixMode(GL_MODELVIEW);
于 2009-06-29T16:28:37.037 に答える