当前位置: 首页 > news >正文

opengl制作天空盒

首先创建顶点数组

unsigned int m_uiVaoBufferID;
glGenVertexArrays(1, &m_uiVaoBufferID);

然后创建顶点缓冲区

    float skyboxVertices[] = {// positions-1.0f,  1.0f, -1.0f,-1.0f, -1.0f, -1.0f,1.0f, -1.0f, -1.0f,1.0f, -1.0f, -1.0f,1.0f,  1.0f, -1.0f,-1.0f,  1.0f, -1.0f,-1.0f, -1.0f,  1.0f,-1.0f, -1.0f, -1.0f,-1.0f,  1.0f, -1.0f,-1.0f,  1.0f, -1.0f,-1.0f,  1.0f,  1.0f,-1.0f, -1.0f,  1.0f,1.0f, -1.0f, -1.0f,1.0f, -1.0f,  1.0f,1.0f,  1.0f,  1.0f,1.0f,  1.0f,  1.0f,1.0f,  1.0f, -1.0f,1.0f, -1.0f, -1.0f,-1.0f, -1.0f,  1.0f,-1.0f,  1.0f,  1.0f,1.0f,  1.0f,  1.0f,1.0f,  1.0f,  1.0f,1.0f, -1.0f,  1.0f,-1.0f, -1.0f,  1.0f,-1.0f,  1.0f, -1.0f,1.0f,  1.0f, -1.0f,1.0f,  1.0f,  1.0f,1.0f,  1.0f,  1.0f,-1.0f,  1.0f,  1.0f,-1.0f,  1.0f, -1.0f,-1.0f, -1.0f, -1.0f,-1.0f, -1.0f,  1.0f,1.0f, -1.0f, -1.0f,1.0f, -1.0f, -1.0f,-1.0f, -1.0f,  1.0f,1.0f, -1.0f,  1.0f};unsigned int m_uiVboBufferID;
glGenBuffers(1, &m_uiVboBufferID);
glBindBuffer(GL_ARRAY_BUFFER, m_uiVboBufferID);
glBufferData(GL_ARRAY_BUFFER, sizeof(skyboxVertices), skyboxVertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(0))
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3*sizeof(float), 0);

创建并编译shader(这里我将编译shader封装成了类,通用的用法)

m_pShaderObject = new CShaderObject("/res/shaders/skybox.shader", m_pOpenglParent);

创建纹理

glGenTextures(1, &m_uiBufferID);
glBindTexture(GL_TEXTURE_CUBE_MAP, m_uiBufferID);std::vector<std::string> strFilePathVector = {"/res/textures/skybox2/cube_+x.png","/res/textures/skybox2/cube_-x.png","/res/textures/skybox2/cube_+y.png","/res/textures/skybox2/cube_-y.png","/res/textures/skybox2/cube_+z.png","/res/textures/skybox2/cube_-z.png",
};int iWidth, iHeight, iBpp;
for(unsigned int i=0; i<strFilePathVector.size(); i++){stbi_set_flip_vertically_on_load(0);unsigned char* data = stbi_load(strFilePathVector.at(i).c_str(), &iWidth, &iHeight, &iBpp, 0);glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, \GL_RGB, iWidth, iHeight, 0, \GL_RGB, GL_UNSIGNED_BYTE, data);if(data){stbi_image_free(data);}
}
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_CUBE_MAP, 0);

我们把下述全景图片进行切割后载入到程序中

以下是切割后的图片

以下是图片顺序

推荐一款由全景图片切成符合opengl六面图的工具:PanoSplit - Microsoft Store 中的官方应用

或者微软应用商店搜索PanoSplit

http://www.lryc.cn/news/239624.html

相关文章:

  • 单片机和FreeRTOS上跑机器人ROS的应用
  • Spring Cloud学习(十一)【深入Elasticsearch 分布式搜索引擎03】
  • 【gitlab初始密码登录失败】
  • 2017年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版
  • 2、基础入门——web应用架构搭建漏洞HTTP数据包代理服务器
  • 【精选】OpenCV多视角摄像头融合的目标检测系统:全面部署指南&源代码
  • 力扣算法练习BM45—滑块窗口的最大值
  • 最小二乘估计及与极大似然估计的关系
  • 02房价预测
  • 【Springboot】pom.xml中的<build>标签详解
  • 智能驾驶产品开发中如何贯彻“正向开发”理念
  • 【机器学习】038_梯度消失、梯度爆炸
  • 【转】OAK-D双目相机进行标定及标定结果说明
  • whip和whep
  • SpringBoot集成jjwt和使用
  • RedisConnectionFactory is required已解决!!!!
  • redis的高可用之持久化
  • onnx模型转换opset版本和固定动态输入尺寸
  • 远程运维如何更高效的远程管理?向日葵的这几项功能会帮到你
  • python BDD 的相关概念
  • 【Exception】Error: Dynamic require of “path“ is not supported
  • 【蓝桥杯选拔赛真题25】C++两个数比大小 第十三届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析
  • C++学习——C++运算符重载(含义、格式、示例、遵循的规则)
  • 【unity实战】unity3D中的PRG库存系统和换装系统(附项目源码)
  • 编程语言发展史:C语言的诞生及其影响
  • (二)pytest自动化测试框架之添加测试用例步骤(@allure.step())
  • 【用unity实现100个游戏之16】Unity程序化生成随机2D地牢游戏2(附项目源码)
  • 潮玩宇宙大逃杀游戏开发源码说明
  • UE5 操作WebSocket
  • Linux文件