2015-01-11 53 views
0

所以我有這個隨機生成的一組包裹在一個圓圈中的瓷磚,我不確定如何在圓周上滾動它。基本上它是一個2D視角的行星,需要以可控的速度進行包裹和移動,以給出行星旋轉的幻覺。我將在下面發佈我的當前渲染代碼,以便您可以瞭解我正在處理的內容,但我不確定如何對x和y執行滾動操作。這裏有一個星球是什麼樣子:https://imgur.com/Ytdz2mGJava 2D球體滾動

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) 
      { 

      } 
     } 
    } 
+0

您必須更具體地說明您期望的輸出是什麼。簡單地向一個方向滾動幷包裹像素?這與將球體投影到兩個維度無關。對於這個方向的解決方案,您需要對三角函數有所瞭解,並且可能是存儲地形數據的更好方法。 –

回答

0

從它的外觀你是不是畫一個球體,而是一個重複的矩形裁剪圓。

如果你想讓它看起來真的旋轉,你需要做一個球體的正投影。
在這種情況下,您需要在θ,φ上存儲瓦片數據,然後使用φ= acos(length(x,y)/ radius)創建一個屏幕xy的常量映射到角度θ= atan(y/x)
然後使用[θ+滾動,φ+節距](不完全滾動和俯仰,但足夠接近)從地形數據中採樣