我对OpenGL很陌生。我正在使用JOGL。
我想为我的世界创建一个天空,可以用云或星星纹理。我不确定最好的方法是什么。我的第一反应是制作一个非常大的球体,使用四面体方向GLU_INSIDE
,并给它贴上纹理。有更好的方法吗?
可以。
创建一个非常大的球体存在两个主要问题。首先,您可能会遇到剪切问题。如果天空在您的远裁剪距离之外,则可能会消失。此外,从远处进入您的天空盒的对象将在一个非常坚固的墙壁上视觉上穿过。其次,您正在为一个非常简单的效果浪费大量的多边形(以及大量的痛苦)。
事实上,大多数人使用一个小立方体(因此称为“天空盒”)。您需要在预处理中渲染该立方体,并关闭深度测试。因此,所有对象都将在该立方体的顶部呈现,而不管它们与您的实际距离如何。只需确保一侧的长度大于两倍的近裁剪距离即可。
球体很容易处理,因为它们可以轻松避免在某些情况下可能出现的扭曲、角落等问题。另一个选择是圆柱体。
要获得高质量的天空效果,您可以进行天空照明模拟,根据时间(=>太阳位置!)和方向设置球体颜色,并在天空球和视图位置之间添加一些云朵作为3D对象。