【发布时间】:2015-09-16 06:01:13
【问题描述】:
在实现着色器立方体贴图之前,我尝试手动制作一个周围有六个纹理的天空盒,但在旋转时会出现失真。
在使用立方体贴图制服的 GL 3.3 中,与创建六个平面并在每一侧手动应用纹理相比,是否在幕后增加了一些数学魔法(抵消失真)?
【问题讨论】:
在实现着色器立方体贴图之前,我尝试手动制作一个周围有六个纹理的天空盒,但在旋转时会出现失真。
在使用立方体贴图制服的 GL 3.3 中,与创建六个平面并在每一侧手动应用纹理相比,是否在幕后增加了一些数学魔法(抵消失真)?
【问题讨论】:
当然,立方体贴图只能以 90° 视角创建(至少在相机位于立方体中心的情况下)。否则,您将无法获得立方体。如果你减少 fov,你会在边缘得到空白。如果增加它,您将获得重叠区域。您也可以从非 90° fovs 创建一个长方体,但这不值得。
OpenGL 中立方体贴图的寻址方式与普通 2D 纹理的寻址方式不同。您可以使用 2D 纹理坐标访问 2D 纹理。立方体贴图通过 3D 方向矢量访问。 OpenGL然后使用这个方向向量来计算要使用的子纹理和这个子纹理的纹理坐标。
天空盒也可以用六种普通纹理轻松实现。事实上,在这种情况下,高级寻址模式甚至可能成为劣势。如果您使用不同的天空载体对象(例如,我曾经使用过sky tetrahedron),情况会有所不同。如果有失真,那么您的代码中一定有一些错误。基本原理有效。
【讨论】:
【讨论】: