能不能用C++写出一个计算机图形学的室内三维建筑的作业
时间: 2023-06-19 09:07:43 浏览: 85
当然可以!C++ 是一种强大的编程语言,用于编写计算机图形学应用程序非常合适。
下面是一个简单的示例程序,演示了如何用 C++ 和 OpenGL 库创建一个简单的室内场景。这个场景包括墙壁、地板、天花板和一些基本的家具。这个程序可以帮助你入门计算机图形学的室内三维建筑。
```c++
#include <GL/glut.h>
void init() {
glClearColor(0.0, 0.0, 0.0, 1.0); // 设置背景颜色为黑色
glEnable(GL_DEPTH_TEST); // 启用深度测试
glEnable(GL_LIGHTING); // 启用光照
glEnable(GL_LIGHT0); // 启用光源0
glEnable(GL_NORMALIZE); // 启用法向量归一化
}
void drawWalls() {
glColor3f(0.9, 0.9, 0.9); // 墙壁颜色
glBegin(GL_QUADS);
// 前墙
glNormal3f(0.0, 0.0, 1.0);
glVertex3f(-5.0, -2.5, -5.0);
glVertex3f(-5.0, 2.5, -5.0);
glVertex3f(5.0, 2.5, -5.0);
glVertex3f(5.0, -2.5, -5.0);
// 后墙
glNormal3f(0.0, 0.0, -1.0);
glVertex3f(-5.0, -2.5, 5.0);
glVertex3f(5.0, -2.5, 5.0);
glVertex3f(5.0, 2.5, 5.0);
glVertex3f(-5.0, 2.5, 5.0);
// 左墙
glNormal3f(1.0, 0.0, 0.0);
glVertex3f(-5.0, -2.5, 5.0);
glVertex3f(-5.0, 2.5, 5.0);
glVertex3f(-5.0, 2.5, -5.0);
glVertex3f(-5.0, -2.5, -5.0);
// 右墙
glNormal3f(-1.0, 0.0, 0.0);
glVertex3f(5.0, -2.5, -5.0);
glVertex3f(5.0, 2.5, -5.0);
glVertex3f(5.0, 2.5, 5.0);
glVertex3f(5.0, -2.5, 5.0);
glEnd();
}
void drawFloor() {
glColor3f(0.8, 0.8, 0.8); // 地板颜色
glBegin(GL_QUADS);
glNormal3f(0.0, 1.0, 0.0);
glVertex3f(-5.0, -2.5, 5.0);
glVertex3f(-5.0, -2.5, -5.0);
glVertex3f(5.0, -2.5, -5.0);
glVertex3f(5.0, -2.5, 5.0);
glEnd();
}
void drawCeiling() {
glColor3f(0.8, 0.8, 0.8); // 天花板颜色
glBegin(GL_QUADS);
glNormal3f(0.0, -1.0, 0.0);
glVertex3f(-5.0, 2.5, 5.0);
glVertex3f(5.0, 2.5, 5.0);
glVertex3f(5.0, 2.5, -5.0);
glVertex3f(-5.0, 2.5, -5.0);
glEnd();
}
void drawTable() {
glColor3f(0.5, 0.5, 0.5); // 桌子颜色
glPushMatrix();
glTranslatef(0.0, -2.0, 0.0);
glScalef(1.0, 0.1, 1.0);
glutSolidCube(2.0);
glPopMatrix();
glPushMatrix();
glTranslatef(0.0, -1.0, 0.0);
glScalef(0.1, 1.0, 0.1);
glutSolidCube(2.0);
glPopMatrix();
}
void drawChair() {
glColor3f(0.5, 0.5, 0.5); // 椅子颜色
glPushMatrix();
glTranslatef(1.0, -1.5, 1.0);
glScalef(1.0, 0.1, 1.0);
glutSolidCube(2.0);
glPopMatrix();
glPushMatrix();
glTranslatef(1.0, -0.5, 1.0);
glScalef(0.1, 1.0, 0.1);
glutSolidCube(2.0);
glPopMatrix();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除颜色缓冲区和深度缓冲区
glMatrixMode(GL_MODELVIEW); // 设置模型视图矩阵
glLoadIdentity(); // 将矩阵重置为单位矩阵
gluLookAt(0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // 设置视点和目标点
drawWalls(); // 绘制墙壁
drawFloor(); // 绘制地板
drawCeiling(); // 绘制天花板
drawTable(); // 绘制桌子
drawChair(); // 绘制椅子
glutSwapBuffers(); // 交换缓冲区
}
void reshape(int width, int height) {
glViewport(0, 0, width, height); // 设置视口
glMatrixMode(GL_PROJECTION); // 设置投影矩阵
glLoadIdentity();
gluPerspective(60.0, (float)width / (float)height, 1.0, 100.0); // 设置透视投影
}
int main(int argc, char* argv[]) {
glutInit(&argc, argv); // 初始化 GLUT 库
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); // 设置显示模式
glutInitWindowSize(640, 480); // 设置窗口大小
glutCreateWindow("Simple Interior Scene"); // 创建窗口
init(); // 初始化 OpenGL 环境
glutDisplayFunc(display); // 设置显示回调函数
glutReshapeFunc(reshape); // 设置窗口大小改变回调函数
glutMainLoop(); // 进入 GLUT 主循环
return 0;
}
```
这个程序创建了一个简单的室内场景,包括墙壁、地板、天花板和一些基本的家具。你可以根据需要修改场景的布局和细节,以便更好地符合你的要求。