Mantendo a proporção em OpenGL

Bem, na última quinta feira foi a data de entrega do SiVOP. Ele está disponível aqui. Para executar, “python Sivop.py arquivo.obj”.

Pouco antes de entregar ainda faltava um requisito essencial, que ao redimensionar a janela o objeto não fosse “deformado”, mantendo a forma e tamanho original. Para isso, tive que ajustar o campo de visão (ângulo de visão vertical) de acordo com a altura da janela, usando senos e cossenos.

Informações iniciais:

  • Altura inicial da janela (h)
  • Ângulo inicial (“Teta”)

Imaginando a câmera como centro de uma esfera, podemos achar a hipotenusa (r) de um triângulo retângulo que tem a altura inicial como cateto oposto do ângulo inicial. Essa hipotenusa seria considerada o raio dessa esfera. Dessa forma, podemos achar o ângulo equivalente para uma nova altura, que seria um novo cateto oposto. Em python (que usei no SiVOP):

  • self.hypo = 400/sin(pi/12) # Angulo de 15 graus e altura inicial de 400
  • gluPerspective(self.calcAngle(), float(w)/h, 0.1, 500.0) # ajusta a câmera

E self.calcAngle():

  • return degrees(asin(self.height/self.hypo))


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s