2009-02-04 8 views
6

Tengo un juego que es más o menos 2D, pero renderizado en 3D. La cámara se desplaza sobre el campo de juego en 2D inclinado unos 20 grados desde una posición perfectamente perpendicular para darle una pequeña perspectiva 3D.Obteniendo los sprites para que miren la cámara correctamente en OpenGLES

Tengo algunos sprites que deben ser perfectamente cuadrados porque representan objetos esféricos. Mi primer enfoque hizo que los cuádriceps permanecieran planos en el campo 2D, lo que los posicionó correctamente, pero el sprite estaba sujeto a la distorsión de la perspectiva y no siempre parecía redondo.

Mi enfoque actual es que cuando renderizo los sprites muevo la cámara para que sea perpendicular al campo de juego (y los sprites) lo que garantiza que los cuartetos nunca se distorsionen por perspectiva. El inconveniente es que la posición de los sprites es ligeramente diferente de la que tendrían si la cámara estuviera inclinada.

Entonces, ¿cómo puedo hacer que los sprites que son:

  1. perfectamente cuadrado y frente a la cámara, pero no me exige para mover la cámara para lograr esto.
  2. tienen un tamaño que se ve afectada por la distancia de la cámara (a diferencia de los sprites de punto)

Respuesta

10

Puede lograr lo que quiera utilizando un polígono que esté frente a la cámara en todo momento. Esto se llama una "cartelera". Here is un buen tutorial que parece explicar las matemáticas involucradas y cómo implementarlo usando OpenGL

+1

Gracias, esto es muy útil. –

0

Dibuje los quads perpendicular a la cámara como usted sugiere, pero la posición de ellos un poco por encima del campo. La distancia de arriba probablemente debería ser el radio de la esfera.

+0

No estoy seguro de cómo moverlos ayudará. Y parte de mi problema es que no puedo entender qué matemática necesito para hacer que el quad mire a la cámara en movimiento cuando no es perpendicular al campo de juego. Lo siento si no estoy explicando esto bien. Es difícil de poner en palabras. –

0

aún puede usar sprites de punto ... usando glPointParameter() puede darle atenuación de profundidad. Actualmente estoy usando 0.00025 para mi atenuación de profundidad para mi sistema de partículas que tengo en desarrollo. El lado negativo es que en las máquinas de primer generación (supongo que estás haciendo esto para el iPhone o el iPod Touch) estarás atascado con un tamaño máximo de sprite de 64x64 píxeles

+0

Sé que este comentario es antiguo, pero para lectores potenciales solo tengo que enfatizar que hay otro inconveniente en este método. Su sprite desaparecerá si el centro está fuera de pantalla debido a la saturación. – Rene

Cuestiones relacionadas