【问题标题】:Java 2D Sphere ScrollingJava 2D 球体滚动
【发布时间】:2015-01-11 08:40:24
【问题描述】:

所以我有一组随机生成的图块,它们被包裹在一个圆圈中,我不确定如何围绕圆圈滚动它。基本上,它是一个 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)
            {

            }
        }
    }

【问题讨论】:

  • 您必须更具体地了解您期望的输出。只是在一个方向上滚动和包裹像素?这与将球体投影到二维中无关。要获得该方向的解决方案,您需要对三角学有所了解,并且可能需要更好的方式来存储地形数据。

标签: java math 2d procedural


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    相关资源
    最近更新 更多