관심 지점을 중심으로 내 "카메라"를 회전하고 싶습니다. 현재 카메라는 원점을 중심으로 만 회전합니다.OpenGL에서 관심 장소를 중심으로 카메라 회전
자습서의 많은 계획 다음 사용하는 것이 좋습니다 :
translate(-P)
rotate
translate(P)
불행하게도,이 작동하지 않습니다. 내 응용 프로그램은 번역 벡터 (QVector3D) 및 쿼터니언 (QQuaternion)을 사용하여 카메라의 번역 및 회전을 저장합니다.
현재, 그것은 항상 원점을 중심으로 회전하는이 같이 수행된다 :이 mulMatrix glMultMatrixf로 전달되는 4 × 4 행렬()을 구축 쿼터니언을 사용
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(translation.x(),translation.y(), translation.z());
multMatrix(accumulatedQuaternionRotation);
; 이 같은
사용 무언가 : 나는 더 설명 드릴 수 없습니다 매우 이상한 컨트롤에
glTranslatef(-translation.x(),-translation.y(), -translation.z());
multMatrix(accumulatedQuaternionRotation);
glTranslatef(translation.x(),translation.y(), translation.z());
결과. 내 응용 프로그램 translation.z() 의미 : 카메라를 앞으로 이동하십시오. x() 및 y()를 변경하면 팬과 같은 작업이 실행됩니다.
내가 번역 벡터를 잘못 사용하고있는 것으로 의심되어 위의 일련의 작업이 실패하게됩니다.
내가 확인할 수있는 것이 있습니까?
편집 : 이것은 사원 수 회전 작동 방법은 다음과 같습니다
// calculate rotation axis
QVector3D rotationAxis = QVector3D(diff.y(), diff.x(), 0.0).normalized();
// update rotation see http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation
accumulatedQuaternionRotation = QQuaternion::fromAxisAndAngle(rotationAxis, diff.length()/4.0f) * accumulatedQuaternionRotation;
DIFF는 단순히 두 개의 마우스 이동 이벤트 포인트의 차이입니다.
쿼터니언은 잘못된 매트릭스를 생성해야합니다. –
쿼터니온 순환을위한 코드를 추가했습니다. 회전은 문제없이 첫 번째 경우에서 작동하므로 이상합니다. – anopheles