용서해주세요.하지만 도움이 필요합니다. 몇 주 동안이 문제에 봉착했습니다. 나는 진전이없고 어디를 가든 다른 답을 볼 수 있습니다. 시도하는 모든 것이 효과가 없습니다. 나는 충분한 팁과 조언을 얻었으므로 이제는 이것을 이해할 수 없기 때문에 내가 거꾸로 일할 수있는 누군가를 내게 필요로합니다.
이 주제를 가장 혼란스럽게 만든 것은 모든 사람이 다른 규칙 또는 규칙 집합을 사용하는 방식이며, 답변은 자신의 규칙을 정의하지 않고 자체 규칙을 기반으로합니다.
그래서 여기에 가장 일반적이고 논리적으로 보이는 것을 기반으로 한 규칙이 있습니다.
- 축의 오른쪽 규칙.
- 양의 Y가 올랐고 양의 Z가 시청자를 향하고 양의 X가 오른쪽에 있습니다.
- 셰이더로 보낼 때 바뀐 행 주요 행렬.
- 피치 : X 축을 중심으로 회전
- 요 : y 축을 중심으로 회전
- 롤 : z 축을 중심으로 회전
- 회전 순서 : Roll, Pitch, Yaw (이것이 맞습니까? 누군가 나를 확인할 수 있습니까?)
- 축의 양의 끝에서 내려다 보면 양의 회전 값이 시계 방향으로 회전합니다.
- 모든 축에서 0 회전의 기본 방향은 음의 Y를 가리키는 벡터입니다.
.. 그러한 관습이 주어지면 (잘못되면 반드시 바로 잡으십시오!), 어떻게 하는가 :
- LookAt 함수를 작성 하시겠습니까? (lookAt (벡터 위치, 벡터 눈 초점, 벡터))
- 회전 행렬을 계산합니다. (회전 (x, y, z))
적어도 지난 3 주 동안이 두 가지 질문에 스스로 답해 보았습니다. 최소 30 번 이상 LookAt & Rotation Matrix 기능을 다시 작성했습니다. 수십 가지 방법을 테스트 한 결과 제가 본 자료를 읽었습니다. 수백 개의 웹 사이트와 많은 답변이있는 질문을 읽고, 다른 사람들의 코드를 복사했으며, 지금까지 내가 한 것도 효과가 없었습니다. 모든 것이 잘못된 결과를 가져 왔습니다. 일부는 유쾌하게 기괴한 출력을 만들어내어 올바른 회전에 가깝지 않습니다.
나는 지난 밤을 제외하고 매일 밤이 일을 해왔다. 나는 반복적 인 실패로 너무 좌절해서 멈추고 쉬어야했다.
올바른 방법이 무엇인지 보여 주시면 거꾸로 작업하고 어떻게 작동하는지 알아낼 수 있습니다. 정답을 얻지 못하고있어 조금 미치게됩니다!
Java로 작성하고 있지만 모든 언어로 작성된 코드를 사용합니다. 대부분의 3D 렌더링 코드는 실제로 매우 훌륭하게 작동합니다. 이해할 수없는 수학 일뿐입니다.
업데이트 : 해결
도와 주셔서 감사합니다! 나는 이제 실제로 이해하고 작동하는 LookAt 기능을 가지고 있으며 더 행복해질 수 없습니다 (누군가가 그것을보고 싶다면 물어보십시오).
피치 / 요 / 롤 변수를 기반으로 회전 행렬을 다시 작성하려고 시도했지만 다시 실패하는 것처럼 보였지만 Freelook 카메라에 적합하지 않은 것처럼 오일러 각도를 사용하려고 시도했습니다. 대신 쿼터니언 클래스를 만들고 그 길을 따라 가면 운이 좋을 것입니다. 그렇지 않으면 피치 / 요를 구면 좌표로 사용하고 새로운 작업 LookAt 함수를 회전에 사용합니다.
다른 사람이 비슷한 문제에 직면하고 있고 나에게 질문을하고 싶은 경우, 부담없이 문의하십시오.
적어도 나는 더 이상 붙어 있지 않습니다, 도움을 주셔서 감사합니다!