用球体模拟天空

本文介绍了如何使用OpenGL中的Sky Dome技术来模拟更逼真的天空,对比了Sky Dome与Sky Box在雾效果上的差异。通过Cubemap技术,结合6张贴图分别对应6个方向,详细阐述了创建Cubemap纹理的过程,并提供了加载纹理、设置纹理参数、生成纹理坐标及渲染球体的代码示例。
摘要由CSDN通过智能技术生成

之前说到可以用球体作为Sky Dome模拟天空,那么就来说一说其中的细节.

Sky Dome就是天空穹顶,是一种在三维场景中模拟天空的方法,用Sky Dome模拟的天空较Sky Box更为逼真,对应用Sky Box的场景采用雾效果很容易穿帮,而Sky Dome不会,因为Sky Box是方形从视点到各个顶点的距离不相等,Sky Dome则是球体,把视点设置为球体中心则到各个顶点的距离相等,雾效果的可见程度与视点到顶点的距离有直接关系.

那么来看看这么用之前的球体模型模拟Sky Dome吧.


之前已经给球体建了个模,现在的问题是怎么把天空贴图贴到球体上去,这将会用到一种新的贴图方法Cubemap以及着色器. 先看一下效果如何:




嗯,效果就是这样.现在看下具体是怎么实现的:

首先要了解Cubemap的原理,具体的教程网上有很多,可以搜索一些来看,这边讨论一下天空穹顶的实现细节.

先准备6张图,Cubemap需要6张贴图分别是:

  • GL_TEXTURE_CUBE_MAP_POSITIVE_X​
  • GL_TEXTURE_CUBE_MAP_NEGATIVE_X​
  • GL_TEXTURE_CUBE_MAP_POSITIVE_Y​
  • GL_TEXTURE_CUBE_MAP_NEGATIVE_Y​
  • GL_TEXTURE_CUBE_MAP_POSITIVE_Z​
  • GL_TEXTURE_CUBE_MAP_NEGATIVE_Z​

这6张图各自在四个方向上必须与相邻的四张贴图是连续的,这样才不会导致穿帮. 使用以下方法创建Cubemap:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. bool loadCubemapTexture(const char* xpos,const char* xneg,  
  2.         const char* ypos,const char* yneg,  
  3.         const char* zpos,const char* zneg,  
  4.         GLuint& id) {  
  5.     BmpLoader bmpXpos,bmpXneg,bmpYpos,bmpYneg,bmpZpos,bmpZneg;  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值