游戏中大型,缓慢旋转的行星图形
对于我正在开发的计算机游戏,我想绘制非常大(〜500像素)的行星图形缓慢旋转。 这些图形是为了留下深刻的印象。 这样做的最好方法是什么?
下面是我的意思是一个动画GIF的例子。 (在100x100像素和60帧的情况下,它已经非常大,对不起。)想象一下这么大,更大,旋转更慢,动画更流畅:
但是,如果这是500x500像素和10 x 25 = 250帧,我们会谈论数百MB的数据,所以这种直接的方法是行不通的。
Fracplanet可以保存“球体贴图”纹理贴图(和凹凸贴图); 看到画廊底部的图像。 这些应用程序随后会被读入应用程序并映射到相对较低分辨率的球体几何图形上,以达到我想要的效果。 此方法将使用比预渲染动画方法更少的内存或使用原始全分辨率多边形模型。
是的,这基本上是你的第二个要点,但我不会那么快地将这种方法排除在外,我想你会发现你可以用比预期更低的分辨率范围逃脱; 眼睛注意到纹理中的精细细节远远超过它注意到它所覆盖的几何体的低分辨率。 现代曲面细分硬件意味着你可以让GPU很容易地为你生成和渲染一个荒谬的多边形数量的球体。
另一种想法:渲染一个足够大的单一方形四边形多边形以覆盖地球。 对于其中的每个像素,执行一个像素着色器来计算屏幕光线球面交点(如果有的话)。 查看行星纹理的颜色(考虑时间和行星旋转)。 避免需要大量多边形并为您提供精确的球体。
如果你想要图形加速,那么多边形很便宜 - 相当多的多边形不是问题。
我建议使用立方体贴图纹理和相应的立方体状三角形网格:从围绕原点的立方体的(表面)形状开始,并将每个3D坐标标准化为单位半径。 这将使计算您的纹理坐标变得容易。
请记住,您需要为您的纹理选择正确的投影:在上述情况下,您需要为每个立方体面切线投影以匹配您的网格。
这样做的古老方式是预先创建一个球体的图像,而不是将每个像素中的表面纹理的颜色存储在存储纹理UV作为查找表。 现在,您可以通过绘制预渲染图像来渲染球体,但可以从图像中的UV中查找行星表面纹理中的相应纹理元素。 为了使地球旋转,您可以向查找表格图像中找到的uv坐标添加偏移量。 确保你使用了模数加法,所以纹理很好地包裹起来。 如果您想要在地球上添加阴影,您可以将其添加为纹理顶部的单独通道。
这种方法很可能比没有内置图形加速的硬件上的纹理多边形版本快得多,并且由于渲染是预处理,您还可以根据需要渲染尽可能多的多边形。
链接地址: http://www.djcxy.com/p/60409.html