2015-04-20 137 views
1

我试图给世界/相机/游戏添加天空盒,我不知道该如何去做。如果有人可以给我一些关于如何应用它的指导,那将非常感激。我该如何应用天空盒到世界上,openGL C++

我已经加载了天空盒,我只是不知道如何正确绘制,所以它会适合在相机移动。

我设法构造了一种立方体,它可能接近天空盒,但它只能从外面看到。一旦你进入立方体,你不能从里面看到它。也许如果我可以反转立方体的面部,它会显示出我在立方体内部的时间,并且可以使它变大。

从立方体外面看它 enter image description here 从内向外看 enter image description here

回答

3

我有一个类似的问题在几个星期前,如果你正在寻找一些伪代码,我想我或许可以帮。首先使用立方体不是最好的想法,因为你的盒子看起来不自然,将它映射到球体以获得平滑的效果。

  1. 建立在你的浏览器的边界球体相对移动相机

  2. 应用纹理在这个领域,这将给人的印象是天空移动相对于你

  3. 当你绘制时,禁用你的z缓冲区和平截头体(假设你使用了任何剔除算法),这将允许绘制天空盒,但是当深度排序算法被执行时将确保地形在天空盒的顶部被绘制通过OpenGL。

注意:不要忘了天空盒已经绘就后重新启用Z缓冲,否则你的地形元素将出现在范围之外,这意味着你只能看到天空盒。

我最近写了一个基本的地形引擎在DirectX但校长是相当类似的,如果你想查看的回购可以find it here

查核在this file线286看到空中包厢的呈现方式,随后还参观SkyBox implementation file,看看它是如何构建的,并且SkyShader implementation file看到纹理如何映射到球体,其主要方法是关注在着色器文件SetShaderParameters()

在相对天空盒移动方面只需将你的天空盒的WVP矩阵设置为相机的WVP矩阵,然后调整x,y,天空箱的z平面根据您的喜好。

额外如果你要实现多玩家方面,只是禁用球体的背面渲染,然后每个玩家可以看到他们的SkyBox,但对手不能。或者您打造世界

希望帮助周围的一个大球 - 如果你需要帮助了只是问,我知道这东西可以在第一:)

+1

感谢您的解释相当密集,我不认为我需要深入了解,这只是一个小项目。我原本打算像你说的那样,像一个像照相机那样移动的边界球/盒子,但为了做到这一点,我需要能够从内部而不是外部看到盒子。任何提示,所以我不必重写整个实施?编辑:它只是一个翻转立方体的顶点的情况? – user

+1

颠倒面孔绝对可以让你看到里面的纹理,然后你需要做的就是将你的天空盒相对于相机移动 - 这样做,用相机WVP乘以你的Skyboxes WVP,并确保你的相机在应用程序启动时,原点处于合理的位置(确保您的相机最初位于多维数据集中) – Alex