1
5
对. 制造一个真正大的球体有两个主要问题。首先,可能会遇到剪辑问题。如果超出你的远距离,天空可能会消失。此外,从远处进入天空盒的对象将从视觉上穿过一堵非常坚固的墙。第二,为了一个非常简单的效果,你浪费了很多多边形(和很多痛苦)。 大多数人实际上使用一个小立方体(因此得名“天空盒子”)。在深度测试关闭的情况下,需要在预过程中渲染立方体。因此,所有对象都将在立方体顶部渲染,而不管它们与您的实际距离如何。只要确保边的长度大于近剪裁距离的两倍,就可以了。 |
2
10
跳伞是个不错的选择。您将要使用 cube map 为了这个。基本上,在相机周围渲染一个立方体,并将纹理映射到立方体的每个面内部。我相信OpenGL可能会在它的固定函数管道中包含这一点,但是如果您采用着色方法(固定函数无论如何都被弃用),您将希望使用多维数据集映射取样器(CG中的samplerCube,不确定GLSL)。绘制立方体地图时,您还希望从模型视图矩阵中删除平移,但保持旋转(这会导致SkyBox“跟随”相机,但允许您环顾天空的不同部分)。 最好的方法是绘制立方体图 之后 绘制所有不透明对象。这可能看起来很奇怪,因为在默认情况下,天空会阻止其他对象,但您使用以下技巧(如果使用着色器)来避免这种情况:在顶点着色器中写入最终输出位置时,而不是写出.xyzw,write.xyww。这将迫使天空飞到遥远的平面上,从而使它位于一切的后面。这样做的好处是有绝对0透支! |
3
0
球体是很好的处理,因为它们很容易避免变形,角落等,这可能是在某些情况下可见的。另一种可能性是圆柱。 对于真正高质量的天空,可以进行天空照明模拟,根据时间设置球体颜色(=gt;太阳位置!)以及方向,并在天空球体和视图位置之间添加一些云作为三维对象。 |
user1424739 · 如何获得子地块的绘图区域大小? 2 年前 |
Nor-s · 如何使用ASIMP正确加载模型? 2 年前 |
Makogan · 3D纹理大小影响程序输出,不会引发错误 6 年前 |
Karsten W. · 底部R中的旋转箭头 6 年前 |
168grani · Matplotlib图形的线条平滑 6 年前 |