実際に3D空間で作業しているわけではないので、スプライトは決して回転しないと想定できます(回転はスキューなどでシミュレートできます)。カメラから。
まず、3Dオブジェクトのレンダリング方法を理解する必要があります。カメラは単一の点に収束しますが、オブジェクトを描画する画面として機能する不可視の平面があります。画面について知っておく必要があるのは、カメラからどれだけ離れているかだけです。
これは、オブジェクトが2つの異なる距離でカメラにレンダリングされる様子を示す図です。
ご想像のとおり、オブジェクトの高さはカメラからの距離に依存します。しかし、レンディングはニアカリングプレーンで発生するため、そのポイントでスプライトの高さを計算する必要があります。
いくつかの基本的なトリガー計算により、次の式が得られます。
f(d, v) = v/(v+d)
* Where f is the size ratio to the original sprite aka size factor
and v is the distance to the near clipping plane (trial and error value)
and d is the distance from the near clipping plane to the object
例:
Assuming you have a sprite that is 2.5x1.8 units in size and 10 units away
from the camera, and that the near clipping plane is 5 units from the camera.
sizeFactor = 5/(5+10) = 0.3
renderHeight = actualHeight * sizeFactor = 1.8 * 0.3 = 0.54
renderWidth = actualWidth * sizeFactor = 2.5 * 0.3 = 0.75
最初にv=5
、それから外見に基づいて調整することをお勧めします。リアルタイムで変更を確認できるフィドルを一緒に投げることができます。
TL; DR
The change in height or width should be multiplied by the following factor:
sizeFactor = v/(v+d)
Where v = Some number greater than 0 that never changes (try 1 thru 5)
and d = the distance from the camera
So an object that is 2.5 units tall would be rendered at 2.5*sizeFactor units tall.
編集:
z軸に沿って移動すると言うと、(ほとんどの3Dゲーム、シューティングゲームなどのように)パースビューが必要になると仮定しています周辺視野に似ています。代わりに、正射投影ビューである数学で試してみます(マリオ、アングリーバード、スーパースマッシュブラザーズなど)。あなたが達成しようとしている見た目と感触はわかりませんが、それが現実的である限り、プレイヤーは決して知りません!
デモ!