我一直在关注一些我正在进行的开放世界项目的在线OpenGL教程。目标是拥有一个带有多个对象(山等)的开放世界场景。我认为实现一个天空盒,然后在其中添加所有对象是一个好主意。
天空盒已准备就绪,可以正常使用,在天空盒构建之前,我还已经实现了摄像机在场景中的移动。
我想问一下摄像机是否有任何方式可以在天窗内部自由移动,与其中的潜在物体“互动”,但实际上并没有脱离天窗的边界。在在线教程中,摄像机的翻译已删除,因此只能环顾四周而不能四处移动。
实际上是将摄像机移动到天空盒中吗?还是我应该以某种方式将天空盒与摄像机一起移动,从而永远不会到达盒子的边界?任何答案,无论是理论上的还是实际的,都将不胜感激。
答案 0 :(得分:0)
Skybox通常在渲染时不会偏移相机,因为它的内容表示很远的东西(比实际的相机运动大很多倍),例如距离很远的星星或山脉。因此,即使您向任意方向移动100 m,渲染结果也不会改变(或几乎无法识别)。
如果您的天空盒包含您想要移动的东西,但您需要限制移动,以免距离太近,因为这会导致天空盒的像素化并最终越过它。这可以通过游戏地形来完成(您不能越过边界山或离岛游泳太远等。
另一个选择是将摄像头到天空盒中心的距离限制在某个安全距离。如果再远一点,则限制将移动天盒以再次匹配距离...这样,您可以接近/远到天盒到一个点(它在近端/远端变大/变小),再也不会越过它。 。没有任何实际的相机位置限制...
答案 1 :(得分:0)
首先,当渲染天空框时,通常不会渲染实际的框。
天空盒包含的东西通常不会改变,或者只会非常缓慢地改变,并且距离玩家太远了。天空盒存储在立方体贴图纹理中,并通过全屏矩形进行渲染。在着色器中,通过将眼睛矢量采样到地图中,可以使用OpenGL的立方体贴图采样。
如果天空盒是动态的(例如一天中的动态时间),则仅每两帧或仅在需要时才重新渲染它。
前一段时间,我写了一篇有关如何做的文章:GLSL Skybox(您需要通过以下方式将代码更新为现代OpenGL版本)