OpenGLSkybox (CubeMap) 随相机移动而移动

OpenGLSkybox (CubeMap) movement along with camera movement

我一直在关注一个开放世界项目的一些 OpenGL 教程,我目前正在研究这个项目,目标是拥有一个包含多个对象(山脉等)的开放世界场景,以及一个包含所有对象的天空盒被放置在里面。

请问有没有办法让相机在天空盒内自由移动,"interacting"里面有潜在的物体,但实际上没有离开盒子的边界。教程中去掉了相机的平移,所以只能环顾四周,不能四处移动

将相机实际移动到天空盒内是一种常见的做法,还是我应该以某种方式将天空盒与相机一起移动,从而永远不会到达盒子的边界?

天空盒通常在不偏移相机的情况下渲染,因为它的内容代表非常遥远的东西(比实际相机移动大很多倍),例如许多公里外的星星或山脉。因此,即使您向任何方向移动 100 米,渲染结果也不会发生任何变化(或者变化很小,无法识别)。

如果你的天空盒包含你想要移动的东西而不是可行的,但你需要限制移动,这样你就不会靠得太近,因为这会导致天空盒像素化,甚至最终穿过它。这可以通过游戏地形来完成(你不能跳过边界山脉或游离岛屿太远等

另一种选择是将摄像机与天空盒中心的距离限制在某个安全距离内。如果比限制更远,则移动天空盒以再次匹配距离......这样你就可以 near/far 到天空盒到一个点(它在 close/far 一侧得到 bigger/smaller )永远不要越过它...没有任何实际的相机位置限制...

首先,渲染天空盒时,通常不会渲染实际的盒子。

天空盒包含通常永远不会或只会非常缓慢地变化的东西,并且距离玩家永远无法到达。天空盒存储在立方体贴图纹理中,并通过全屏矩形进行渲染。在着色器中,您使用 OpenGL 的立方体贴图采样,方法是将眼向量采样到贴图中。

如果天空盒是动态的,比如一天中的动态时间,它只会每隔几帧或仅在需要时重新渲染。

不久前我写了一篇关于如何做到这一点的文章:GLSL Skybox(您需要通过...将代码更新为现代 OpenGL 版本)