문제

저는 두 물체가 얼마나 멀리 떨어져 있더라도 둘 다 화면에 남도록 만들려고 노력하고 있습니다.나는 JOGL을 사용하고 있지만 수학에 도움이 필요할 뿐이므로 그것은 중요하지 않습니다.이것이 내가 지금까지 가지고 있는 것입니다:

float distance = (float) ((Math.sqrt((p1.x - p2.x) + (p1.y - p2.y))));
float camx = (float)((p1.x + p2.x) * 0.5);
float camy = (float)((p1.y + p2.y) * 0.5);
float camz = (float) (distance * 5);

Z가 올바르게 확대 및 축소되기 위해 필요한 수학은 무엇입니까?

도움이 되었습니까?

해결책 4

float distance = (float) ((Math.sqrt(Math.pow((p1.x - p2.x),2.0) + Math.pow((p1.y - p2.y), 2.0))));
float camx = (float)((p1.x + p2.x) * 0.5);
float camy = (float)((p1.y + p2.y) * 0.5);
float camz = (float) Math.abs(distance);

다른 팁

두 객체 모두 z = 0이고 화면보기 각도가있는 경우 센터 화면에서 가장자리에서)는 수평 및 수직 각도에 대한 AX 및 AY입니다.

zx = abs((p1.x-p2.x)*0.5)/tan(ax)
zy = abs((p1.y-p2.y)*0.5)/tan(ay)

그리고

camz = max(zx, zy)

여기서 ZX와 ZY는 물체를 화면의 수평 및 수직 치수로 가져 오는 거리이며 Camz는 두 기준을 모두 충족시키는 거리입니다. 또한 AX와 AY는 라디안에 있습니다 (예 : 화면이 40도라고 가정하면 AX가 20도 또는 AX = 20*(PI/180) = 0.3419 라디안)입니다.

Camx와 Camy에 대한 귀하의 가치는 정확했습니다.

어쩌면 나는 당신의 상황을 오해하고 있지만, 당신은 그냥 할 수 없었습니다

float camx = (p1.x + p2.x) * 0.5;
float camy = (p1.y + p2.y) * 0.5;
float camz = (p1.z + p2.z) * 0.5;

그것은 카메라를 두 객체 사이에 직접 배치 할 것입니다.

다음과 같이 수정해야 한다면,

부동 거리 = (부동) ((Math.sqrt((p1.x - p2.x)^2 + (p1.y - p2.y)^2)));

구문에 대해 잘 모르겠습니다.벡터를 더하기 전에 2의 ​​거듭제곱을 구해야 한다는 뜻입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top