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)
等轴投影只是使用具有特定旋转角度的正投影.
您应该能够使用正交投影选择8个潜在方向中的任何一个,并获得模型的完美等距视图.只需按照引用的Wiki文章中的数学设置来设置视图矩阵,并为投影矩阵进行正交投影,就可以了.