用vc++6.0编写一个单位立方体的正平行投影、斜平行投影的程序
时间: 2023-11-26 17:04:39 浏览: 104
简单的立方体投影算法编写
以下是使用VC++6.0编写单位立方体正平行投影和斜平行投影程序的代码示例:
```c++
#include <windows.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glut.h>
void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glShadeModel(GL_FLAT);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glLoadIdentity();
gluLookAt(1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glPushMatrix();
glTranslatef(0.5, 0.5, 0.5); /* 将立方体移到第一象限 */
glutWireCube(1.0); /* 绘制单位立方体 */
glPopMatrix();
glFlush();
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w <= h)
glOrtho(-1.5, 1.5, -1.5*(GLfloat)h / (GLfloat)w,
1.5*(GLfloat)h / (GLfloat)w, -10.0, 10.0);
else
glOrtho(-1.5*(GLfloat)w / (GLfloat)h,
1.5*(GLfloat)w / (GLfloat)h, -1.5, 1.5, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("Orthographic Projection");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
```
上述程序使用了glOrtho函数来设置正平行投影和斜平行投影的参数。在正平行投影中,我们设置观察体的大小和位置,使其与视口大小相同,并且视线与z轴平行,从而实现了正投影效果。在斜平行投影中,我们根据窗口的宽高比例来设置观察体的大小和位置,使其沿着斜线平行投影到平面上,从而实现了斜投影效果。
阅读全文