opengl设置法向量_一步步学OpenGL(25) -《Skybox天空盒子》

天空盒子是一种视觉技术,用无缝纹理包围摄像机视口,模拟广阔场景。本文介绍OpenGL中如何使用立方体贴图(Cubemap)实现天空盒子,讲解了立方体贴图纹理的加载、使用以及Skybox的顶点和片段着色器的工作原理,通过渲染一个巨大的正六面体封闭盒子,提供无边界的视觉效果。
摘要由CSDN通过智能技术生成

94dcacc1000f78d57bc156b3e6f6a369.png

教程 25

Skybox天空盒子

ceed3aaf5a5b92cc379ed78592c397a6.png

原文: http://ogldev.atspace.co.uk/www/tutorial25/tutorial25.html

CSDN完整版专栏: https://blog.csdn.net/cordova/article/category/9266966


背景

天空盒子是一种让场景看上去更广阔无垠的一种视觉技术,用无缝对接的封闭纹理将摄像机的视口360度无死角的包裹起来。封闭纹理通常是天空纹理和地形纹理(山脉、高楼大厦等)组合而成,当玩家在周围环境中探索的时候,视角中除了真实模型的其他空余部分被封闭纹理所完全填充充当背景。下面是一张‘半条命’游戏中天空盒子的示例图:

v2-62dc287d561d7f84844c466a62a10bbc_b.jpeg

天空盒子的一种实现方法是渲染一个巨大的正六面体封闭盒子纹理,并将相机置于中心,当摄像机移动的时候封闭纹理也跟着移动,所以看上去永远走不到场景中的视平线边缘,就跟我们现实中慢慢行走却永远走不到地平线边缘类似的效果。另外天空和大地拼接在一起的纹理还和一个生活经验吻合:就是我们说天空在遥远的地平线处看上去接触到了大地,但是往前走地平线还在那个遥远的地方永远也过不去。正六面体天空盒子是一种典型的天空盒子纹理,它是用六张边缘无缝对接的正方形纹理拼接而成的,观察者在内部看上去是一个连续的背景,例如下面的纹理:

34dcd6f19772127fefb177e60d91b4d0.png

将上面纹理之间的白色边缘去掉并将六张纸片折叠拼成盒子就可以得到一个符合上面要求的天空盒子了。OpenGL中这种纹理叫做立方体贴图(Cubemap)。为了从立方体贴图中采样,我们要采用3d纹理坐标而不是我们之前用的2d纹理坐标了。纹理采样器将3d纹理坐标看做一个向量,找出该文素位于立方体的哪一个面上并从那个面上取出需要的文素。这个过程可以从下面的图片中看到(从上往下看盒子):

96482d4eb59f496865eca6af0dda15cd.png

最合理的面的选择是基于纹理坐标中的那个最大分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值