Pergunta

Em OpenGL estou tentando girar uma câmera em torno de um ponto, com a câmera sendo distância r do ponto e de frente para o ponto quando ele gira. Em outras palavras, eu quero que a câmera se mova ao longo da circunferência de um círculo com um raio r do centro, com a câmera de frente para o centro em qualquer ponto ao longo da circunferência.

Vamos dizer que no espaço 3D no centro do círculo é (3, 0, 3);

Eu tentei:

// move to center of circle    
glTranslatef(-3, 0, -3)
// move a distance away from the circle
glTranslatef(0, 0, r);
// rotate along the y "up" axis
glRotatef(CameraAngle, 0, 1, 0);

onde é CameraAngle os graus sendo movido em torno do círculo.

O meu resultado final é a câmera ainda está girando ao longo da origem, não o centro do círculo. Alguém pode me ajudar a resolver este problema? Obrigado!

Foi útil?

Solução

Você precisa se quer:

  • girar a câmera em torno da origem e, em seguida, traduzi-lo (*)

ou

  • uso gluLookAt para manter a apontar câmera para o centro do círculo
funções de rotação

(*) normalmente giram em torno da origem. Para girar em torno de outra P ponto você tem que:

  • traduzir (-P)
  • rotate
  • traduzir (P)

Outras dicas

é um pouco confuso, mas eu acho que você deveria:

// move camera a distance r away from the center
glTranslatef(0, 0, -r);

// rotate 
glRotatef(angley, 0, 1, 0);
glRotatef(anglex, 1, 0, 0);

// move to center of circle    
glTranslatef(-cx, -cy, -cz)

Observe a ordem NÃO deve ser alterado.

Por que se preocupar com todos os problemas de girar a câmera e não girar a cena em si?
É muito mais para a frente. basta girar a matriz de modelagem em torno da origem. Você vai ter exatamente o mesmo resultado.

I encontrar problemas como este muito mais fácil de resolver com gluLookAt (). Você definir um caminho para a câmera (um círculo é fácil!) E manter o ponto de "centro" fixo (ou seja, a coisa que você está olhando).

A única possível truque é definir um bom vetor - mas geralmente não muito trabalho. Se o caminho eo ponto de destino estão no mesmo plano, você pode usar o mesmo vetor de cada vez!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top