如何创建一个大型空间背景,可以重复进行rts游戏。我也想拥有复杂的星云和尘埃场,但是由于这些单位将有很大的探索空间,所以我不能拥有120000px x 1200000px jpeg的像素,因此我想重复图像,但不要在片段之间使用变化线。
我将它与Microsoft的Babylon框架一起用于Web GL画布
如何创建一个大型空间背景,可以重复进行rts游戏。我也想拥有复杂的星云和尘埃场,但是由于这些单位将有很大的探索空间,所以我不能拥有120000px x 1200000px jpeg的像素,因此我想重复图像,但不要在片段之间使用变化线。
我将它与Microsoft的Babylon框架一起用于Web GL画布
Answers:
使用视差滚动。具有多个背景层,它们以主要视点速度的不同分数滚动。层越低,滚动速度越慢。这不仅是提供深度幻觉的好方法,而且还使背景看起来不太重复,因为不同图层上的对象由于图层不同步而将以不同的构图出现。
程序地创建背景。代替一个巨大的背景图形,而是具有多个不同的较小元素,并将它们全部随机地放置在整个游戏世界中。
顺便说一句:请尽量避免使用JPEG。这是一种有损格式,每次修改和保存时都会失去更多质量,它已针对摄影进行了优化,并且不支持透明度。对Alpha通道(如PNG)使用无损格式。唯一的好理由是您的源图像仅以JPEG格式提供(NASA发布了很多精美的天文学图片,这些图片都在公共领域中),并且您不希望对其进行任何修改。
为2D游戏建立无限背景的方法如下:
希望这可以帮助。
图层运作良好。
这是一些数学:
假设您的一条铁轨做得不好,以至于类似的东西__ __
注意到它们之间的间隙。当车轮滚过时,会形成一个小缺口(微小的缺口)。
如果轨道长度l
和轮具有半径r
则2pi r
是车轮的圆周,ration=l/(2pi r)
如果该比率为10.25说那么车轮将每季度得到一个缺口在它,因为它骑长。
这是我想到的最简单的方式来解释覆盖空间。
因此,假设您有两张图片,如果一张图片具有此四分之一的比例,您将获得一个4相图案,在4个图块之后将重复该图案。假设您有1个主要背景和2个叠加层,分别具有m和n个相位。然后,模式将在m * n个图块之后重复。
尽管数字无关紧要,但模式看起来最好,但最大公约数是1。例如,假设我们有一个阶段6和一个阶段4,其他每个阶段都会“排列”在某种意义上。
您可以使用这种技术(尤其是使用粒子和填充物),只需很少的工作即可创建很多“独特”的填充物。
回到火车车轮,如果传动比不合理,则凹槽会覆盖车轮!但这并不重要。
这似乎是另一个想法:
对于长距离背景(例如天空盒),视差图层的感觉并不佳。例如,想想星星,当在地球上行走时,或者甚至整夜更好时,所有的星星都会一起移动,尽管我们知道它们彼此之间相距数百光年或思想距离。问题是它们离我们太远了,我们无法注意到它们的距离。综上所述,我们仍然希望使用我们有限的计算能力(最多可以处理8k * 8k)绘制非常大的纹理(例如120k * 120k)。就像使用多个视差图层一样,您应该创建不同的纹理,每个纹理具有不同种类的细节。例如,一个代表星系,另一个代表一束恒星,等等。但是这一次与其以不同的速度移动,不如改变它们的大小。这是一个示例:考虑使用3个纹理,一个是2048 * 2048,另一个是729 * 729,第三个是625 * 625。由于这些数字互为素数,因此在将这3个纹理合并为3层时,应该将1cm(2048,729,625)= 764M像素从原点移开,以看到被绘制的同一事物,这有点像无穷大。实际上,您可以添加其他层或更改每个纹理的大小,并且最终总会得到与最小的纹理尺寸倍数。
这似乎是程序像素着色器的工作。
使用图像的优势在于:
通过简单的网络搜索,可以将该着色器调到http://casual-effects.blogspot.com.au/2013/08/starfield-shader.html,它看起来像您要找的东西。
我不是WebGL的专家,但是根据此页面,它看起来像使用常规的GLSL语言(这是图形卡用于对着色器进行编程的C类语言)。这意味着您可能几乎不需要做任何更改就可以使其工作。
但是,您可以尝试从更基本的着色器开始,以了解其工作原理。
该博客页面列出了在WebGL中实现着色器的所有步骤。这似乎是一个不错的起点。
查找精彩着色器示例的另一个好地方是https://www.shadertoy.com/
您可以将大的jpeg切成小段并将其放置(可见部分),甚至不需要一直将其存储在内存中。
就像旧游戏一样,某些“拼贴”也可以重复。那是NES控制台的常见解决方案,那甚至被硬件支持。