2015-01-09 2 views
2

OpenGL에서 프로젝트를 작성 중이고 모델 - 뷰 매트릭스를 변환하고 회전 한 후 오브젝트의 위치를 ​​결정하는 데 문제가 발생했습니다. 이것을 시각화하기 위해 지구가 태양 주위를 어떻게 회전하는지 상상해보십시오. 기본적으로 런타임시 지구의 위치를 ​​결정해야합니다.회전 된 오브젝트의 위치 결정

나는의 우리가 (0, 0, 0)의 시작 위치에 있다고 가정하자, 몇 단계로 내 코드 분할거야, 그리고 우리의 회전은 0

while(true) 
{ 
modelViewMatrix.PushMatrix();    // 
    modelViewMatrix.Translate(1, 1, 0); // 1 
    modelViewMatrix.Rotate(k++, 0, 1, 0); // 2 
    object.Draw();       // 3 
modelViewMatrix.PopMatrix();    // 
} 

1과 동일 -이 시점에서 결정 위치는 (1, 1, 0)
2의, 쉬운 - 이제 우리는 약간의 지속적 증가 값보다 객체를 회전하는 것은 위치의 주위에 이동을 유지하기 위해 (0, 0, 0)
3 - 객체

그리기

이제 modelViewMatrix는 회전 및 위치 정보를 저장하지만 잘 모르겠습니다. 이 기능을 사용하여 객체를 번역하고 회전 한 후에 객체의 실제 위치를 찾는 방법.

여기 내가 말하고자하는 것을 그리기 위해 시도한 것이 있는데, 빨간색 물음표 (?)는 내가 찾고자하는 대상의 위치를 ​​나타냅니다.

enter image description here

답변

2

당신은 (0, 0, 0)에서 VEC3를 만들고 행렬을 변환 할 수 있어야한다. 그것은 당신에게 당신의 '지구'의 위치를 ​​줄 것입니다 - 당신의 객체는 이미 위치를 가지고있을 것입니다, 그래서 당신은 실제로 객체를 그리기 위해 당신의 전체 모형 -보기 행렬을 바꾸는 대신에 당신의 행렬을 사용하여 당신의 객체의 실제 위치를 변환해야합니다.

이 매트릭스가 어떻게 작동하는지 궁금하다면 Google의 "동질적인 변환 매트릭스"를 읽으십시오.

+0

아 솔루션이 너무 가까웠습니다! 한번은 "Cant 곱하기 m * v와 위치가 될 것"과 같은 생각이 들었습니다.하지만이 아이디어를 떨어 뜨렸으니 이제는 해결책이 될 것입니다! 고마워! :) –

+0

다행이었습니다. 확실히 그 행렬을 읽으십시오 - 그것이 무엇인지 이해하는 것이 정말 좋습니다. – mbgda