真正的等角投影与opengl

som*_*one 17 c++ opengl projection isometric

我是使用C++进行OpenGL编程的新手,并不是很擅长数学.是否有一种简单的方法来进行等角投影?

我指的是真正的等距投影,而不是一般的正交投影.

(等距投影仅在单位X,Y和Z矢量的投影长度相等且它们之间的角度恰好为120度时发生.)

代码片段受到高度赞赏..

cob*_*bal 27

尝试使用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();
Run Code Online (Sandbox Code Playgroud)

结果是

替代文字

我们可以绘制一个立方体来检查平行线是否确实平行

glPushMatrix();
glTranslated(0.5, 0.5, 0.5);
glColor3d(0.5, 0.5, 0.5);
glutWireCube(1);
glPopMatrix();
Run Code Online (Sandbox Code Playgroud)

替代文字


Ree*_*sey 8

等轴投影只是使用具有特定旋转角度的正投影.

您应该能够使用正交投影选择8个潜在方向中的任何一个,并获得模型的完美等距视图.只需按照引用的Wiki文章中的数学设置来设置视图矩阵,并为投影矩阵进行正交投影,就可以了.