Opengl+glfw+glew 大作业 绘制房间卧室客厅+雪花雪人

news/2024/11/23 0:45:43/

一、开发环境说明

  • 操作系统:windows
  • 开发软件:Visual Studio 2017
  • 编程语言:基于控制台下的opengl
  • 用到的库: glfw 、glew
  • 底部提供代码下载

opengl环境配置可参照上一篇博客opengl环境配置+GLFW+GLEW+VS2017

二、运行效果展示如下

三、内容说明:

1 、功能介绍
  • 实现三维场景,可以游览以及可以看到模型物体的不同状态。
  • 三维场景有不同的模型组合,有房子,有雪人。
  • 可以模拟真实的光照效果,路灯效果。
  • 模拟粒子系统的,下雪效果。
  • 房子有真实效果的模型和细节。
  • 鼠标键盘交互实现漫游功能
2、操作说明
  • 鼠标左键:按下拖动控制视角
  • 按键 ‘W’ : 控制视角前进
  • 按键 ‘S’ : 控制视角后退
3、程序目录截图

在这里插入图片描述

4、程序部分代码展示
void GraphicRenderer::DrawSprite(int modetype,glm::mat4 modelview, Texture2D texture, glm::vec3 position, glm::vec3 size, glm::vec3 rotate, glm::vec3 color)
{// Prepare transformationsthis->shader.Use();//绑定shaderglm::mat4 model = modelview;model = glm::translate(model, glm::vec3(position));  // 平移model = glm::rotate(model, rotate[0], glm::vec3(1.0f, 0.0f, 0.0f)); //绕X轴旋转model = glm::rotate(model, rotate[1], glm::vec3(0.0f, 1.0f, 0.0f)); // 绕Y轴旋转model = glm::rotate(model, rotate[2], glm::vec3(0.0f, 0.0f, 1.0f)); // 绕Z轴旋转model = glm::scale(model, glm::vec3(size)); //缩放this->shader.SetMatrix4("model", model);//模型矩阵this->shader.SetVector3f("spriteColor", color);//传入颜色glActiveTexture(GL_TEXTURE0);//绑定纹理texture.Bind();if (modetype == 0)//四边形{glBindVertexArray(this->quadVAO);glDrawArrays(GL_TRIANGLES, 0, 6);}if (modetype == 1)//正方体{glBindVertexArray(this->cubeVAO);glDrawArrays(GL_TRIANGLES, 0, 36);}if (modetype == 2)//球体{glBindVertexArray(this->shpereVAO);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, shpereVEO);glDrawElements(GL_TRIANGLES, (40 - 1)*(30 - 1) * 6, GL_UNSIGNED_INT, (void *)0);}glActiveTexture(0);glBindVertexArray(0);glUseProgram(0);
}void Render()
{//shader 1 光照ResourceManager::GetShader("GraphicLight").Use();glm::mat4 view = camera.GetViewMatrix();ResourceManager::GetShader("GraphicLight").SetMatrix4("view", view);ResourceManager::GetShader("GraphicLight").SetVector3f("viewPos", camera.Position);glm::mat4 model;Renderer->SetShader(ResourceManager::GetShader("GraphicLight"));//绘制地面Renderer->DrawSprite(1, model, ResourceManager::GetTexture("smoke"), glm::vec3(0, -1.0, 0), glm::vec3(1000, 1, 1000.0), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));//绘制墙壁{glm::mat4  model1 = glm::translate(model, glm::vec3(60.0, 0.0, 0.0));model1 = glm::scale(model, glm::vec3(1.2, 1.0, 1.0));Renderer->DrawSprite(1, model1, ResourceManager::GetTexture("wall"), glm::vec3(0, 50, 0), glm::vec3(300, 100, 300.0), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));//门Renderer->DrawSprite(1, model, ResourceManager::GetTexture("door"), glm::vec3(160, 35, 150), glm::vec3(30, 70, 1.0), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));}//绘制雪人DrawXueren(model); shader 3  室内ResourceManager::GetShader("Graphic").Use();ResourceManager::GetShader("Graphic").SetMatrix4("view", view);	Renderer->SetShader(ResourceManager::GetShader("Graphic"));model = glm::translate(model, glm::vec3(0, 0, 0));绘制路灯DrawRoadLight(model);//房间1;DrawRoom1(model);//房间2DrawRoom2(model);//房间3DrawRoom3(model);//shader 2 雪花ResourceManager::GetShader("Particle").Use();//ResourceManager::GetShader("Particle").SetMatrix4("projection", projection);ResourceManager::GetShader("Particle").SetMatrix4("view", view);//绘制雪花m_ParticleGenerator->Draw(model);
}
5、 运行效果展示

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

四、测试用例及代码下载

  • 测试用例下载:点击exe文件,可以直接运行;
  • 完整代码工程下载

http://www.ppmy.cn/news/796811.html

相关文章

树莓派串流客厅电视玩游戏

前段时间想入手一个steamlink享受在客厅用电视玩steam的快感,但是由于穷逼学生一枚,买不起!!!只好自己DIY一个,正好家里有个树莓派,开始折腾!!! 最初在网上找…

小米盒子 smb Android,客厅里的多媒体 小米盒子SMB本地连接

客厅里的多媒体 小米盒子SMB本地连接 2013年07月01日 15:02作者:厂商投稿文章出处:泡泡网原创 分享 泡泡网手机频道7月1日 还未在电脑上操作繁琐步骤来实现小米盒子的SMB么?小编教你只需在PC端设定分享影片、音乐及图片,就可以在你的小米盒子…

客厅的走廊应该怎么去设计

对于原来,由于我们房子的面积小,所以说家里面会显得特别的拥挤。现在随着人们生活水平的提高和对于物质的追求,房子的面积也比原来大了不少,虽说面积大了,但是客厅的走廊还是不被人们所重视,然而今天我们要…

使用Pano2VR实现客厅VR效果

内容简介 本文分享如何使用Pano2VR来实现客厅VR效果,并有常见的进入动画和热点提示等。效果如下图(为了可以上传缩小屏幕,属于PC端运行): 实现过程 一、Pano2VR操作 1、 运行Pano2VR软件后,类型选择“自动”…

为什么在房间里显示无服务器,家里路由器在客厅,房间没信号怎么办?

原标题:家里路由器在客厅,房间没信号怎么办? 我家也遇到了这个问题,尤其是一些户型不规整的家庭,即使不是大户型也会经常遇到这种情况。我觉得解决问题最简单或者最好的方式,就是电力猫。 比如我家&#xf…

超全客厅su模型素材网站整理

因为工作的原因,我会经常使用到素材网站,各个平台的模式不太一样,内容也各有特点。刚开始接触素材网站都是一头雾水,走了很多弯路,一些很简单的操作都花去很长的操作时间.....今天给大家安利客厅su模型素材网站&#x…

客厅窗帘要安装纱帘吗?怎么选择纱帘?-好佳居窗帘十大品牌

窗帘是我们常见的,但是客厅窗帘有必要装纱帘?很多人在选择窗帘的时候纠结要不要加一层纱帘。这种纠结可能不仅仅是选择的困难,纱帘的具体功能性也不是那么好理解。别急,我们来看看。 客厅窗帘要不要安装纱帘? 众所周知…

批量删除电脑上客厅的奇异果媒体设备

Get-PnpDevice | Where-Object {$_.FriendlyName -like "客厅的奇异果*"}|ForEach-Object{pnputil.exe /remove-device $_.InstanceId } 客厅的奇异果* 用了通配符 可以换为其他的 用管理员权限执行powershall 运行命令即可 参考一条powershell命令 批量删除Win10蓝…