실제로 3D 공간에서 작업하고 있지 않기 때문에 스프라이트가 회전하지 않는다고 가정 할 수 있습니다 (회전은 기울이기 등으로 시뮬레이션 할 수 있습니다). 카메라에서.
먼저, 3D 객체가 어떻게 렌더링되는지 이해해야합니다. 카메라가 단일 지점으로 수렴하더라도 객체를 그릴 수있는 화면 역할을하는 보이지 않는 평면이 있습니다. 화면에 대해 알아야 할 것은 카메라와 화면이 얼마나 떨어져 있는지입니다.
다음은 서로 다른 두 거리에서 객체를 카메라에 렌더링하는 방법을 보여주는 다이어그램입니다.
예상대로 물체의 높이는 카메라와의 거리에 따라 다릅니다. 그러나 컬링은 가까운 컬링 평면에서 발생하므로 해당 지점에서 스프라이트의 높이를 계산해야합니다.
일부 기본 삼각 계산은 다음 공식으로 이어집니다.
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 게임, 슈팅 게임 등) 투시도를 원한다고 가정합니다. 거리를 기준으로 객체 크기를 계산하는 수학은 프레임의 위치에 따라 달라집니다. 주변 시력과 유사합니다. 대신, 나는 직교 적 인 관점 인 마리오, 앵그리 버드, 슈퍼 스매쉬 브라더스 등의 수학으로 시도해 볼 것입니다. 나는 당신이 달성하려고하는 외모와 느낌을 모르지만 그것이 실제처럼 보인다면 플레이어는 결코 알지 못할 것입니다!
데모!