各位开发者你们好!标题可能让人疑惑,所以先交代一下初始数据:地图大小可变,但举例来说,我们取30×30个六边形——而且每个六边形不是2D的,而是3D六棱柱。我之前问过如何制作视觉上循环的世界,感谢各位的解答,但那些方法没能帮到我,只好自己发明了一种方案。现在世界是循环的,玩家永远看不到地图边界,只能看到对面。诀窍在于,我不复制8份主地图,而是将底行移到顶行,反之亦然,同时左右也如此操作。
接下来谈谈太阳。我不满足于单一的全局光照,于是决定使用一个指向下方的定向光(锥形),并让它沿轨道运动,从而照亮半个世界。这个想法不错,但成了头疼的根源。下面是我自我折磨的清单——或许有人读完后能避免我的错误,或者理解了本质后能想出更好的方案:
- 我在矩形中心内切一个圆,半径等于对角线的一半,然后让一个直径等于矩形高的太阳沿该圆运动。结果:产生了迪斯科效果,因为每当穿越边界(从左到右、从上到下)时,太阳会瞬间传回中心一段时间(就好像有8份重复地图一样)。
- 我判定圆形轨道不好,改成了椭圆形。为避免闪烁,我创建了8个禁用的重复太阳,它们同步运动(就像循环世界用8份重复地图那样)。闪烁消失了,但新问题出现:在长轴端点(3点和9点方向——离地图中心最远)时,照明区域大致为50%且呈圆形;但在短轴端点(12点和6点方向——离地图中心最近)时,由于环面拼接效果,照明区域变成了两个半圆,在轨道中心相接——这极其难看且不真实。
- 我想到可以将太阳的直径设为矩形高,然后让它水平穿过高度中心运动,但没有实现,因为显然这只有在地图仅水平拼接(形成圆柱)时才有效。
- 我谷歌并深入研究天文学,开始为光照轨道应用日行迹(简化到原始状态:即环面上的两阶段运动;阶段1:右上角→左下角,阶段2:右下角→左上角),并将照明区域缩小到高度的2/3。现在我有了9个太阳光源,它们沿日行迹轨道同步运动。
还有其他模型和理论,但很难解释,而且我已经把你们搞糊涂了。
如你所见,我把事情弄得太复杂了。但我希望已经清楚解释了我尝试实现太阳光照运动的过程。我想听听各位对我这番折腾的看法,如果可能的话,也希望能得到一些如何用更简单的方式实现这一点的建议。
评论 (0)