0

所以我有这个随机生成的一组瓷砖,它们被包裹在一个圆圈中,我不确定如何在圆圈周围滚动它。基本上它是一个 2D 的侧视图行星,需要被包裹并以可控的速度移动,以产生行星旋转的错觉。我将在下面发布我当前的渲染代码,以便您了解我正在使用的内容,但我不确定如何处理 x 和 y 以使其滚动。这是行星的样子:https ://imgur.com/Ytdz2mG

for (int x = 0; x < planet1.length; x++)
    {
        for (int y = 0; y < planet1[0].length; y++)
        {
            if (planet1[x][y] == 1 || planet1[x][y] == 2)
            {
                g.drawImage(water, x * 32, y * 32);
            } 
            else if (planet1[x][y] == 3)
            {
                g.drawImage(desert, x * 32, y * 32);
            }
            else if (planet1[x][y] == 4)
            {
                g.drawImage(plains, x * 32, y * 32);
            }
            else if (planet1[x][y] == 5)
            {
                g.drawImage(grassland, x * 32, y * 32);
            }
            else if (planet1[x][y] == 6)
            {
                g.drawImage(forest, x * 32, y * 32);
            }
            else if (planet1[x][y] == 7)
            {
                g.drawImage(hills, x * 32, y * 32);
            }
            else if (planet1[x][y] == 8)
            {
                g.drawImage(mountain, x * 32, y * 32);
            }
            else if (planet1[x][y] == 9)
            {
                g.drawImage(mountain, x * 32, y * 32);
            }
            else if (planet1[x][y] == -1)
            {

            }
        }
    }
4

1 回答 1

0

从外观上看,您不是在绘制一个球体,而是一个剪裁为圆形的重复矩形。

如果您希望它实际上看起来是旋转的,则需要对球体进行正交投影。
在这种情况下,您需要将切片数据存储在 θ,φ 上,然后使用 φ= acos(length(x,y)/radius) θ= atan(y/ x)
然后使用 [θ+roll,φ+pitch] 从地形数据中采样(不完全是roll和pitch,但足够接近)

于 2015-01-11T10:17:50.247 回答