libGDX (사실 아주 새로 추가되었습니다)와 Android를 사용하고 있습니다. 그리고 나는 그것이 향하는 방향으로 (약간의 속도를 사용하여) 3d 객체를 움직이기를 원합니다. 나는 그것이 기본적인 질문이라고 생각하지만 그것에 대한 직접적인 nswer를 발견 할 수 없다. 개체 회전 (방향)을 나타내는 Quaternion이 있고 개체 위치를 나타내는 Vector3이 있습니다. Quaternion이 나타내는 방향으로 객체를 이동하기 위해 Quaternion의 정보를 사용하여 Vector3 위치를 업데이트하는 방법이 문제입니다. (이에 대한 대안으로 Quaternion에서 roll pitch와 yaw를 추출하고 삼각 함수 계산을 적용하여 새로운 좌표계를 얻는 것입니다. 그러나 Vector3와 Quat를 사용하여이를 달성 할 수있는 방법이 있어야합니다.)Android. (Vector3와 Quaternion을 사용하여) 객체를 향하는 방향으로 이동하는 방법
3
A
답변
8
쿼터니언은 회전. 먼저 회전이 적용되지 않을 때 방향을 지정해야합니다. 더 회전이 적용되지 않을 때 예를 들어, 당신은 X 축을 따라 이동하려는 경우 :
Vector3 baseDirection = new Vector3(1,0,0);
은 기본 방향이 정상화되어 있는지 확인합니다 (길이 = 1), 당신은 안전 할 nor()
방법을 사용할 수 있습니다 :
Vector3 baseDirection = new Vector3(1,0,0).nor();
다음으로는 사원 수를 사용하여 방향을 회전해야합니다 :
이Vector3 direction = new Vector3();
Quaternion rotation = your_quaternion;
direction.set(baseDirection);
direction.mul(rotation);
이제 방향을 가지고, 당신은 당신이 그것을 이동하려는 금액을 확장 할 수 있습니다. 아마 모든 프레임과 마지막 프레임 이후 경과 된 시간에 따라이 작업을 수행하려고 할 것입니다.
translation.set(baseDirection).mul(rotation).scl(speed * Gdx.graphics.getDeltaTime());
position.add(translation);
업데이트 :
final float speed = 5f; // 5 units per second
Vector3 translation = new Vector3();
translation.set(direction);
translation.scl(speed * Gdx.graphics.getDeltaTime());
마지막으로 당신은 예를 들어, 당신이 배치 여러 작업을 할 수있는 실제 구현에 따라 위치 물론
position.add(translation);
에 번역을 추가해야합니다 : Xoppa의 메모에서 작업 코드 추가 :
translation.set(baseDirection).rot(modelInstance.transform).nor().scl(speed * delta)
관련 문제
- 1. PYGAME가 향하는 방향으로 스프라이트를 움직인다
- 2. 앞으로 향하는 방향으로 앞으로 이동
- 3. 어떻게하면 wpf 이미지가 앞으로 향하는 방향으로 움직입니까?
- 4. 방향으로 카메라를 올바르게 이동하는 방법
- 5. quaternion을 사용하여 매트릭스를
- 6. 화면에서 객체를 이동하는 방법
- 7. 특정 방향으로 여러 UIButtons를 계속적으로 이동하는 방법?
- 8. jQuery를 사용하여 객체를 연속적으로 이동하는 방법
- 9. OpenGL에서 타이어의 방향으로 자동차를 이동하는 방법
- 10. Vector3와 벡터를 비교하는 유니티 ==
- 11. 화면이 향하는 방향을 계산하는 방법
- 12. Android : Bitmap을 이동하는 방법?
- 13. 자바 스크립트를 사용하여 화살표 키를 사용하여 객체를 이동하는 방법
- 14. Quaternion을 통해 노테이션 회전
- 15. Javafx tilePane을 통해 객체를 이동하는 방법
- 16. Android Cocos2d에서 배경 이미지를 이동하는 방법
- 17. [UITableView 방향으로 x 방향으로 이동하지만이 방향으로 모든 방향으로 이동하는 테이블 행]
- 18. Matrix4 또는 Quaternion을 각도로 변환하는 방법
- 19. 스크롤 할 때 UIScrollView에서 한 방향으로 이동하는 방법
- 20. Android IDE에서 파일을 이동하는 방법
- 21. _id를 변경하지 않고 컬렉션간에 객체를 이동하는 방법
- 22. 내 대상이 잘못된 방향으로 이동하는 이유
- 23. transition.to를 사용하여 임의로 객체를 이동하는 방법은 무엇입니까?
- 24. three.js 도끼 방향으로 객체를 회전
- 25. js를 사용하여 화면상의 특정 좌표로 객체를 이동하는 방법
- 26. HTML5에서 socket.io를 사용하여 객체를 이동하는 방법 5 멀티 플레이 게임
- 27. Java에서 Timer 클래스를 사용하여 패널 위로 객체를 이동하는 방법
- 28. 안드로이드에서 사용자 손가락 터치/드래그를 사용하여 객체를 이동하는 방법
- 29. 자바 스크립트에서 객체를 가로 방향으로 이동하기위한 알고리즘
- 30. cocos2d에서 화면 제목을 지정하여 객체를 이동하는 방법
안녕하세요! 대답 해줘서 고마워. 내가 찾고 있었던 것 같아. 그러나 불행히도 예상대로 작동하지 않습니다. 나는 당신의 코드를 그대로 사용했고 이상한 결과를 얻는다. 객체가 오른쪽을 향하기 시작합니다 (X 축). Z 축을 중심으로 35도 회전시킵니다. 개체가 약간 위로 보입니다. 나는 당신의 코드를 적용하고 객체가 오른쪽 위로 움직일 것으로 기대한다. 그러나 그것은 매우 작은 변위로 오른쪽으로 움직입니다. 35 도는 dY/dX = 0.7 (tan (35))을 제공해야합니다. 좀 도와 줄 수있어? – Taras
안녕하세요. Xoppa. 조사가 끝난 후 Quaternion에 문제가 있다는 느낌이 들었습니다. 나는 Rajawali (3d 엔진)에서 같은 장면을 만들었습니다. 같은 35도 회전시킵니다. 자신의 쿼터니언을 코드에 사용했습니다. 그것은 매력처럼 작동합니다. dY/dX = 0.7. 완벽한. 그래서 대답은 정확합니다. 하지만 제가 libgdx에서 얻은 쿼터니언은 잘못되었습니다 (Rajawali에서 나온 것보다 잘못된 값). 그것을 사용하여 얻을 : modelInstance.transform.getRotation (quaternion). 이것이 올바른 방법입니까? – Taras
모델 인스턴스의 크기가 조절 되었습니까? iirc 당신은 Matrix4를 사용하여 Vector3를 직접 회전시킬 수 있으므로 quaternion 'direction.set (baseDirection) .rotate (modelInstance.transform) .nor()'를 건너 뜁니다. 아니면 후자의 방법을 사용한다면 :'translation.set (baseDirection) .rotate (modelInstance.transform) .nor(). scl (speed * delta)'. 'rotate()'메소드에 대해서는 잘 모르겠다.'rot()'(그러나'mul()'이 아니다)라고 할 수있다. – Xoppa