试编写实现输出一个单位立方体的正平行投影、斜平行投影和透视图投影的程序VC6
时间: 2023-11-26 10:04:39 浏览: 217
以下是一个简单的 VC6 程序,用于绘制立方体的正、斜平行投影和透视图投影。这里使用 OpenGL 库来进行绘制,需要在 VC6 中安装 OpenGL 库并配置好编译环境。
```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); // 设置绘制颜色为白色
// 绘制正平行投影
glViewport(0, 0, 200, 200); // 设置视口为 200x200
glMatrixMode(GL_PROJECTION); // 设置矩阵模式为投影模式
glLoadIdentity(); // 重置投影矩阵
glOrtho(-1.5, 1.5, -1.5, 1.5, -1.5, 1.5); // 设置正交投影矩阵
glMatrixMode(GL_MODELVIEW); // 设置矩阵模式为模型视图模式
glLoadIdentity(); // 重置模型视图矩阵
glBegin(GL_LINE_LOOP); // 绘制线框图
glVertex3f(-1.0, -1.0, -1.0);
glVertex3f(-1.0, 1.0, -1.0);
glVertex3f( 1.0, 1.0, -1.0);
glVertex3f( 1.0, -1.0, -1.0);
glEnd();
// 绘制斜平行投影
glViewport(200, 0, 200, 200); // 设置视口为 200x200
glMatrixMode(GL_PROJECTION); // 设置矩阵模式为投影模式
glLoadIdentity(); // 重置投影矩阵
glFrustum(-1.0, 1.0, -1.0, 1.0, 1.0, 10.0); // 设置透视投影矩阵
glMatrixMode(GL_MODELVIEW); // 设置矩阵模式为模型视图模式
glLoadIdentity(); // 重置模型视图矩阵
gluLookAt(2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // 设置观察矩阵
glBegin(GL_LINE_LOOP); // 绘制线框图
glVertex3f(-1.0, -1.0, -1.0);
glVertex3f(-1.0, 1.0, -1.0);
glVertex3f( 1.0, 1.0, -1.0);
glVertex3f( 1.0, -1.0, -1.0);
glEnd();
// 绘制透视图投影
glViewport(400, 0, 200, 200); // 设置视口为 200x200
glMatrixMode(GL_PROJECTION); // 设置矩阵模式为投影模式
glLoadIdentity(); // 重置投影矩阵
gluPerspective(60.0, 1.0, 1.0, 10.0); // 设置透视投影矩阵
glMatrixMode(GL_MODELVIEW); // 设置矩阵模式为模型视图模式
glLoadIdentity(); // 重置模型视图矩阵
gluLookAt(2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // 设置观察矩阵
glBegin(GL_LINE_LOOP); // 绘制线框图
glVertex3f(-1.0, -1.0, -1.0);
glVertex3f(-1.0, 1.0, -1.0);
glVertex3f( 1.0, 1.0, -1.0);
glVertex3f( 1.0, -1.0, -1.0);
glEnd();
glFlush(); // 刷新绘图
}
int main(int argc, char** argv)
{
glutInit(&argc, argv); // 初始化 GLUT 库
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // 设置显示模式
glutInitWindowSize(600, 200); // 设置窗口大小
glutInitWindowPosition(100, 100); // 设置窗口位置
glutCreateWindow("Cube Projection"); // 创建窗口
init(); // 初始化
glutDisplayFunc(display); // 设置显示回调函数
glutMainLoop(); // 进入消息循环
return 0;
}
```
注意,上述程序仅提供了绘制立方体的代码,需要自行添加窗口创建和消息循环等相关代码。此外,还需要在项目属性中添加 OpenGL 库的链接和头文件路径。
阅读全文