Java 2D球体滚动

时间:2015-01-11 08:40:25

标签: java math 2d procedural

所以我有一组随机生成的瓷砖包裹在一个圆圈中,我不确定如何围绕圆圈滚动它。基本上它是一个二维的侧视行星,需要以可控的速度包裹和移动,以给出行星旋转的幻觉。我将在下面发布我当前的渲染代码,以便您可以了解我正在使用的内容,但我不确定该如何处理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)
            {

            }
        }
    }

1 个答案:

答案 0 :(得分:0)

从它的外观来看,你不是画一个球体,而是一个剪裁成圆形的重复矩形。

如果你想让它实际上显示为旋转,你需要进行球体的正投影。
在这种情况下,你需要将你的瓷砖数据存储在θ,φ上,然后创建使用φ= acos(长度(x,y)/半径)θ= atan(y / x)的屏幕上xy到角度的恒定映射
然后使用[θ+ roll,φ+ pitch]从地形数据中采样(不完全是滚动和俯仰,但足够接近)