簡體   English   中英

如何將相機的位置合並到此算法中以計算精靈在屏幕上的位置?

[英]How can I incorporate the camera's position into this algorithm to calculate a sprite's position on the screen?

我正在研究3D空間中的2D渲染系統。 精靈是2D的,但它們是在3D空間中渲染的。 “相機”可以在3D空間中移動並水平旋轉360度。 我在根據相機的位置/旋轉度以及資產在屏幕上應存在的位置,找出正確的公式進行計算時遇到了麻煩。

我所擁有的是這樣的:

chunk.assets.forEach(asset => {
    let x = Math.round(
      asset.coords.x * Math.cos(angle) - asset.coords.y * Math.sin(angle)
    );
    let y = Math.round(
      asset.coords.y * Math.cos(angle) + asset.coords.x * Math.sin(angle)
    );
    if (!depthMap[y]) {
      depthMap[y] = [];
    }
    depthMap[y].push(asset);
});

但這不考慮攝像機(玩家)的位置(存儲在player.coords.x, player.coords.y ),僅考慮攝像機/玩家面對的angleangle )。 因此,現在相機無法移動。 注意:深度圖只是按順序存儲資產,因此渲染器知道渲染精靈的順序,以便根據哪個更接近播放器/相機,事物以正確的順序出現。

如何將相機的位置納入此算法?

一些假設:

如果相機和子畫面位於同一位置,則子畫面將渲染為0 | 0。

相機向左移動還是精靈向右移動都無關緊要。

由此可以得出結論,只有相對位置很重要,並且可以很容易地計算出(通過減去兩個位置)。

 let x = Math.round(
  (asset.coords.x - player.coords.x) * Math.cos(angle) - (asset.coords.y - player coords.y) * Math.sin(angle)
);
let y = Math.round(
  (asset.coords.y - player.coords.y) * Math.cos(angle) + (asset.coords.x - player.coords.x) * Math.sin(angle)
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM