OpenGL rotativa uma câmara em torno de um ponto

votos
26

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, quer a câmara se mova ao longo da circunferência de um círculo com um raio R a partir do centro, com a câmara 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.

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!

Publicado 13/11/2008 em 18:43
fonte usuário
Em outras línguas...                            


4 respostas

votos
24

Você precisa se quer:

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

ou:

  • usar gluLookAtpara manter a apontar câmera para o centro do círculo

Funções de rotação (*) normalmente rodar em torno da origem. Para girar em torno de outro ponto Pque você tem que:

  • traduzir (-P)
  • rodar
  • traduzir (P)
Respondeu 13/11/2008 em 18:48
fonte usuário

votos
9

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

// 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)

observar a ordem não deve ser alterado.

Respondeu 03/04/2009 em 08:18
fonte usuário

votos
2

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ê obterá o mesmo resultado.

Respondeu 13/11/2008 em 19:49
fonte usuário

votos
1

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 (isto é a coisa que você está olhando).

O único truque possível é 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 vector-se cada vez!

Respondeu 13/11/2008 em 18:53
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more