2010-12-01 2 views
3

좋아, 그래서 두 개의 각도를 얻었다. 하나는 조이스틱의 각도이고, 다른 하나는 카메라 대 플레이어 각도입니다. 카메라 각도. 이제는 조이스틱을 위로 올리면 플레이어가 카메라에서 멀리 떨어지게됩니다. 어떻게하면 좋을까요? Java 또는 Ardor3d에서 쉽게 할 수 있습니까?'두 개의 각도를 더하기'

편집 : 여기 내 앵글을 얻는 방법에 대한 코드가 있습니다.

float camDegree = (float) Math.toDegrees(Math.atan2(
        _canvas.getCanvasRenderer().getCamera().getLocation().getXf() - colladaNode.getTranslation().getXf(), 
        _canvas.getCanvasRenderer().getCamera().getLocation().getYf()) - colladaNode.getTranslation().getYf()); 

      player.angle = (float) Math.toDegrees(Math.atan2(padX, padY)); 
      Quaternion camQ = new Quaternion().fromAngleAxis(camDegree, Vector3.UNIT_Y); 
+0

"각도"는 어떻게 표현됩니까? 3D API를 사용하거나 3D로 작업하고 있습니까? –

+0

실제로 나는 단지 2 차원이므로 X 축과 Z 축을 사용하고 있습니다. 주요 질문에 약간의 코드를 추가하겠습니다. – William

답변

8

나는 정말 당신의 질문을 이해하지 않습니다 '라고해야하지만, 조이스틱을 사용하여 카메라 상대 제어를 구현하는 방법에 대한 것으로 보인다.

내가 제공 할 수있는 가장 중요한 조언은 각도를 계산하는 것이 아니라 벡터로 직접 작업하는 것이 더 좋습니다.

카메라가 (항상이 벡터 플레이어를 직접 가리키는 것 게임의 어떤 종류의,하지만 게임의 모든 유형을, 그리고) 방향 V에서 찾고 있다고 가정하자 :

the look vector from a camera to a player can be resolved into vertical and horizontal components

일반적으로이 벡터의 수직 성분에 대해 신경, 그래서 나는 이유 Y 전화 할게 수평 성분을 얻을 수 제거 그 이후 명백해질 것이다하지 않습니다

Y = V - (V · 까지) 까지 수직 위쪽을 가리키는 유닛 벡터가

입니다.

우리는 (오른손 규칙과 기억) 십자가 제품을 사용 Y에 수직의 수평 벡터 찾을 수 있습니다

X = V ×

위로

the vectors x and y form a horizontal coordinate basis

이제 y은 앞으로 (카메라에서 멀리)를 가리키는 평면의 벡터이고 x은 오른쪽을 향하고있는 비행기의 벡터 (카메라에 대한 옆쪽)에 있음을 알 수 있습니다.당신이이 벡터를 정상화하는 경우 :

X = X/| x |

ŷ = y/| y |

당신은 플레이어의 카메라 상대 운동의 좌표 기준으로 X의하여 ■를 사용할 수 있습니다. 조이스틱 수치는 JX 및 JY인 경우에,

에 의해 (X JX + JY의하여 ■)

를 플레이어를 이동 s은 플레이어의 속도에 비례하는 적절한 스칼라 값입니다.

(이 답변의 어느 지점에서 각도를 계산하지 않았습니다.)

관련 문제