OpenGL에서 내 객체 (행성)를 현재 카메라 회전과 관련하여 회전시키는 데 문제가 있습니다. 처음에는 작동하는 것처럼 보이지만 약간 회전 한 후에는 회전이 더 이상 카메라에 맞지 않습니다.OpenGL에서 카메라를 기준으로 회전하는 객체
화면에서 mouseX 및 mouseY 동작의 델타 (차이)를 계산 중입니다. 회전은 'planetRotation'이라는 Vector3D에 저장됩니다. , 어떤이가하는 'rotateAmount'변수에 회전을 설정 - 이론적으로
Vector3D rotateAmount;
rotateAmount.x = deltaY;
rotateAmount.y = deltaX;
rotateAmount.z = 0.0;
glPushMatrix();
glLoadIdentity();
glRotatef(-planetRotation.z, 0.0, 0.0, 1.0);
glRotatef(-planetRotation.y, 0.0, 1.0, 0.0);
glRotatef(-planetRotation.x, 1.0, 0.0, 0.0);
GLfloat rotMatrix[16];
glGetFloatv(GL_MODELVIEW_MATRIX, rotMatrix);
glPopMatrix();
Vector3D transformedRot = vectorMultiplyWithMatrix(rotateAmount, rotMatrix);
planetRotation = vectorAdd(planetRotation, transformedRot);
:
다음은 planetRotation에 회전 상대를 계산하는 내 코드입니다. 그런 다음이 벡터에 역 모델 변환 행렬 (rotMatrix)을 곱하여이를 모델 공간으로 가져옵니다.이 변환 된 회전이 현재 회전에 추가됩니다.
glPushMatrix();
glRotatef(planetRotation.x, 1.0, 0.0, 0.0);
glRotatef(planetRotation.y, 0.0, 1.0, 0.0);
glRotatef(planetRotation.z, 0.0, 0.0, 1.0);
//render stuff here
glPopMatrix();
주변 워 카메라 정렬, 나는 수행하기 위해 노력하고있어 회전, 현재를 기준으로 변환하지 않는 것 :
이있는 변환되는 설정을 렌더링합니다.내가 뭘 잘못하고 있니?