홈>
메시에 할당하려면 카메라에서 변환 매트릭스를 추출해야합니다.
학교의 컴퓨터 그래픽 프로젝트에서 일하고 있는데, 목표는 일인칭 시점에서 캐릭터의 팔을 시뮬레이션하는 것입니다.
카메라 구현에 카메라 위치에 대한 vector3이 포함되어 있으므로이를 메시에 할당 할 수 있습니다. 문제는 뷰 매트릭스에서 카메라의 회전을 아직 추출 할 수 없다는 것입니다.
이러한 방식으로 회전 기능에서 최종 피치와 요를 계산합니다. x와 y는 화면에서 현재 마우스 위치입니다
m_yaw += (x - m_mouseLastPosition.x) * m_rotateSpeed;
m_pitch -= (y - m_mouseLastPosition.y) * m_rotateSpeed;
이것이 뷰 매트릭스가 변경 될 때 업데이트하는 방법입니다
glm::vec3 newFront;
newFront.x = -cos(glm::radians(m_yaw)) * cos(glm::radians(m_pitch));
newFront.y = sin(glm::radians(m_yaw)) * cos(glm::radians(m_pitch));
newFront.z = sin(glm::radians(m_pitch));
m_front = glm::normalize(newFront);
m_right = glm::normalize(glm::cross(m_front, m_worldUp));
m_up = glm::normalize(glm::cross(m_right, m_front));
m_viewMatrix = glm::lookAt(m_position, (m_position + m_front), m_up);
이제 카메라의 위치를 다음과 같이 메시에 할당 할 수 있습니다
m_mesh.m_transform = glm::translate(glm::mat4(1.0f), m_camera.m_position);
카메라 위치를 성공적으로 지정할 수 있지만 회전 할 수는 없습니다.
내가 기대하는 것은 전체 카메라변환을 내 메쉬에 할당하거나회전을 독립적으로 추출하여 나중에 메쉬에 할당하는 것입니다.
- 답변 # 1
- 답변 # 2
답장 해 주셔서 감사합니다. 많은 도움이되었습니다.
매우 간단한 방법으로 문제를 해결했습니다. 카메라의 별도 속성을 사용하여 최종 변형을 메시에 직접 할당해야했습니다.
glm은 나에게 새로운 것이기 때문에 행렬 곱셈을 처리하는 방법에 익숙하지 않았습니다.
마지막 코드는 카메라 위치로 변환 행렬을 취한 다음 결과 행렬을 Y 축으로 내 피치로 회전시킨 다음 결과적으로 X 축에서 요로로 회전합니다.
m_mesh.m_transform = glm::rotate(glm::rotate(glm::translate(glm::mat4(1.0f), camera.m_position), glm::radians(-camera.m_yaw), glm::vec3(0.0f, 1.0f, 0.0f)), glm::radians(-camera.m_pitch), glm::vec3(1.0f, 0.0f, 0.0f));
관련 자료
- python - 왼쪽에 단위 행렬을 형성하기 위해 행렬의 행을 바꾸는 간단한 방법이 있습니까?
- python - Pandas는 거리 행렬에서 ID로 열과 행을 추출합니다
- cell array - Matlab 행렬에서 하나의 열을 추출하는 방법은 무엇입니까?
- vector - `Vec`에서 정확히 하나의 요소를 추출하는 짧은 방법이 있습니까?
- numpy - 호모 그래피 행렬 역변환으로 같은 점을 얻을 수 없습니다
- python - 행렬에서 일치하는 행을 추출하여 평균화하고 새 행렬을 생성합니다
- r - 내 데이터 프레임을 변환하는 더 좋은 방법이 있습니까?
- python - 랜덤 포레스트 모델에서 트리 깊이를 추출하는 방법이 있습니까?
- python - 3D 매트릭스의 2D 슬라이스를 얻는 방법이 있습니까 (중첩 목록)
- python - Tensorflow에서 행렬의 삼각형을 채우는 요소로 배열을 행렬로 변환하십시오
언제나 따라 왔던 모델 뷰 투영 행렬을 설정하는 단계는 (100 % 옳다는 것을 의미하지는 않습니다), 문제가있는 것으로 보입니다 :
도움이 되길 바랍니다.