opengl生成一个房间,在房间内放入光源,墙面由很多个正方形组合,生成示例代码
时间: 2023-11-12 21:09:04 浏览: 53
以下是使用OpenGL生成一个简单的房间,并在房间内放置光源的示例代码:
```c++
#include <GL/glut.h>
void init() {
glEnable(GL_DEPTH_TEST); // 开启深度测试
glEnable(GL_LIGHTING); // 开启光照
glEnable(GL_LIGHT0); // 开启0号光源
GLfloat light_pos[] = {2.0f, 2.0f, 2.0f, 1.0f}; // 光源位置
glLightfv(GL_LIGHT0, GL_POSITION, light_pos);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // 设置背景颜色为黑色
}
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 绘制房间墙面
glBegin(GL_QUADS);
glNormal3f(0.0f, 1.0f, 0.0f); // 墙面法向量
glVertex3f(-1.0f, 0.0f, -1.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f(1.0f, 0.0f, 1.0f);
glVertex3f(1.0f, 0.0f, -1.0f);
glEnd();
// 绘制房间天花板
glBegin(GL_QUADS);
glNormal3f(0.0f, -1.0f, 0.0f); // 天花板法向量
glVertex3f(-1.0f, 2.0f, -1.0f);
glVertex3f(-1.0f, 2.0f, 1.0f);
glVertex3f(1.0f, 2.0f, 1.0f);
glVertex3f(1.0f, 2.0f, -1.0f);
glEnd();
// 绘制房间地面
glBegin(GL_QUADS);
glNormal3f(0.0f, 0.0f, 1.0f); // 地面法向量
glVertex3f(-1.0f, 0.0f, -1.0f);
glVertex3f(1.0f, 0.0f, -1.0f);
glVertex3f(1.0f, 2.0f, -1.0f);
glVertex3f(-1.0f, 2.0f, -1.0f);
glEnd();
// 绘制光源
glPushMatrix();
glTranslatef(2.0f, 2.0f, 2.0f); // 将光源移动到指定位置
glutSolidSphere(0.1f, 20, 20); // 绘制球体表示光源
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("Room");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
```
在这个示例代码中,我们使用了OpenGL的基本绘图函数绘制了一个房间。其中,我们开启了深度测试和光照,并启用了0号光源来照亮房间内的场景。我们使用了`glPushMatrix()`和`glPopMatrix()`函数来保存和恢复光源的位置。最后,我们使用`glutSolidSphere()`函数绘制了一个球体来表示光源。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)