저는 간단한 동작과 Arcball 인터페이스와 같은 아이디어를 구현하는 OpenGL 씬을 생성해야했습니다. 내가 가지고있는 문제는 NeHe의 Arcball 클래스 (http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=48)가 계산하는 회전 행렬을 다루는 것입니다.OpenGL 회전 행렬과 ArcBall
내가 지금까지 가지고있는 것은 매우 멋진 태양계 (지구, 달, 태양)입니다. 내가 원하는 것은 카메라가 사용자가 원하는 행성을 클릭 (원하는 곳을 클릭)하고 마우스 드래그 (arcball)를 사용하여 고정 된 거리에서 행성을 중심으로 회전 할 수 있도록하는 것입니다. 앞서 말한 것처럼 NeHe의 클래스는 마우스 클릭 및 드래그를 기반으로 회전 행렬을 생성합니다. 행렬을 적용 할 카메라 위치입니다. 그러나, 내가 할 때 내 카메라는 행성 주위를 돌지 않고 단지 흔들 리기 만합니다. 그래서 저는 제가 한 걸음도 놓치고 있거나 내가하려고하는 것을 끔찍하게 이해하고 있다고 생각합니다. 여기
내 카메라 클래스의 일부 코드에 위기입니다 : 그 외// transform is the matrix from NeHe's arcball interface
void camera::update(Matrix4fT transform) {
glm::mat4 transform_m = glm::mat4(0.0f);
// convert nehe's matrices to GLM matrix
for(int i=0; i < 4; i++)
for(int j=0; j < 4; j++)
transform_m[i][j] = transform.M[i*4+j];
// apply matrix to the position
glm::vec4 pos4 = glm::vec4(this->pos, 1.0f);
pos4 = transform_m * pos4;
this->pos = glm::vec3(pos4);
}
void camera::apply(planet *target) {
// called at the beginning of GLPaint
gluLookAt(this->pos.x,this->pos.y,this->pos.z, // cam->position
target->pos.x,target->pos.y,target->pos.z, // moving
this->up.x,this->up.y,this->up.z); // (0,1,0)
}
은 NeHe의 기능은 (클릭 및 드래그 동안) 적절한 장소에서라고
... 그래서 정말, 나는 어떤이 없습니다 아이디어는 여기에서 어디로 가야하는지. 나는 누군가가 이것으로 나를 도울 수 있기를 바랄 뿐이다. 전체 코드베이스 (C++로 프로그래밍되고 QTPanel에 푸시 된)를보고 싶다면 나에게 이메일을 보낸다.감사합니다,
칼 Sverre (carlsverre 닷컴에서 칼)
camera :: update의 "변환"행렬은 정확히 무엇을 나타내는가? –
제가 이해하는 한, 변환 행렬은 arcball 클래스에 따라 구의 필요한 회전을 나타내야합니다. 따라서 사용자가 구의 x, y, z에서 한 점을 클릭하고 마우스를 x2, y2, z2로 이동하면 행렬은 x, y, z를 x2, y2, z2로 이동시키는 데 필요한 구의 회전을 나타냅니다. 희망이 있습니다. –