我试图将天空盒添加到世界/相机/游戏中,但我不知道如何去做。如果有人能就如何应用它给我一些指导,我们将不胜感激。
我已经加载了天空盒,我只是不知道如何正确地绘制它,以便它在移动时适合相机。
我已经设法纹理一种立方体,它可能靠近天空盒但是它只能从外面看到它。进入立方体后,您无法从内部看到它。也许如果我可以反转立方体的面部,它会显示我在立方体内的时间并且我可以将其变大?
从立方体外面看它 从里面望出去
答案 0 :(得分:3)
几个星期前我遇到了类似的问题,如果你正在寻找一些伪代码,我想我可以提供帮助。首先使用立方体并不是最好的想法,因为你的盒子看起来很自然,将它映射到一个球体以获得平滑的效果。
在查看器周围创建一个相对于相机移动的边界球
在该球体上应用纹理,这会给人一种天空相对于你移动的印象
在绘图时,禁用z缓冲区和平截头体(假设您正在使用任何剔除算法),这将允许绘制天空框,但将确保绘制顶部的地形。当OpenGL执行深度排序算法时的天空框。
注意:在绘制天空框之后不要忘记重新启用z缓冲区,否则您的地形元素将出现在球体外部,这意味着您只会看到天空盒子。
我最近在DirectX中编写了一个基本的地形引擎,但是如果你想查看回购,你可以find it here
查看this file中的第286行以查看Skybox的呈现方式,然后访问SkyBox implementation file以查看其构造方式,并SkyShader implementation file查看纹理是如何构建的映射到球体,着色器文件中要关注的主要方法是SetShaderParameters()
在相对于相机移动天空盒方面,只需将天空盒的WVP矩阵设置为相机的WVP矩阵,然后根据自己的喜好调整天空盒的x,y,z平面。
额外如果要实现多玩家方面,只需禁用球体的背面渲染,然后每个玩家都可以看到他们的SkyBox,但是对手不能。或者,您可以在世界各地创建一个大球体
希望有所帮助 - 如果你需要帮助就可以问,我知道这些东西起初可能相当密集:)