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