¿Existen otras proyecciones en 3D además de la ortográfica y la perspectiva? [cerrado]

22

La pregunta está más o menos en el título. ¿Existen otras proyecciones 3D notables además de la ortográfica y la perspectiva que podrían usarse en un sistema 3D como OpenGL?

En particular, ¿hay alguno que tenga un uso particular en el diseño de juegos?

jmite
fuente

Respuestas:

23

Sí, por nombrar algunos:

La proyección de Pannini, por ejemplo, puede capturar amplios campos de visión de maneras agradables . (totalmente solo mi opinión)

Creo que los detalles de implementación estarían más allá del alcance de esta pregunta específica.


EDITAR: Gracias por el comentario, escribí mal Pannini. Y para que esta edición valga la pena, aquí hay algunos más:

  • Paraboloide / Dual-Paraboloid (útil para reflejos, sombras, vidrieras)
  • Equirectangular (puede producir una vista del mapa mundial de una esfera)
  • Esférico
  • Sinusoidal
MickLH
fuente
44
+1 para proyección Panini; Nunca antes había oído hablar de eso. Por cierto, siempre que estemos hablando de proyecciones no lineales, el paraboloide doble es uno que a veces se usa para mapas de entorno y mapas de sombra.
Nathan Reed
Siendo muy exigente, pero parece ser la proyección "Pannini", no "Panini".
aardvarkk
¡Muy genial! Supongo que estos no son lineales, como dice Nathan Reed.
jmite
Creo que sí, lo más probable es que tengas que usar teselación de hardware o procesamiento de imágenes para lograrlos en la práctica. Tengo problemas para pensar en otra proyección que asigne líneas rectas en líneas rectas, pero la agregaré a esta respuesta si se me ocurre algo.
MickLH
Probablemente no existe, ¡este es exactamente el tipo de pensamiento en el que estaba pensando!
jmite
15

Depende de lo que quieras decir con "que podría usarse en un sistema 3D como OpenGL". :)

En pocas palabras, el hardware de gráficos 3D y las API como OpenGL solo tratan correctamente con proyecciones lineales , proyecciones que asignan líneas rectas en el espacio mundial a líneas rectas en la imagen. Nunca distorsionan algo en una forma curva (a menos que sea curva para empezar). Esto se debe a que las GPU dependen de triángulos que tienen bordes rectos para rasterizarlos correctamente en la pantalla.

Si nos limitamos a las proyecciones lineales, no hay demasiadas opciones. Además del estándar orto y perspectiva, también hay variaciones "descentradas" que se obtienen al cortar el tronco de la vista.

  • Una orto-proyección descentrada se llama proyección oblicua y se usa a menudo para diagramas de ingeniería, pero no aparece mucho en los juegos.
  • Las proyecciones de perspectiva descentrada se utilizan en la representación 3D estéreo , ya que resulta que las vistas de ojo izquierdo y derecho se fusionan mejor en el cerebro si corta los frustums en lugar de girarlos para enfocar un objeto.

Estas proyecciones pueden representarse con la matriz de proyección 4 × 4 habitual y utilizarse en una API 3D sin problemas.

Luego están las proyecciones no lineales, que no tienen la restricción de mapear líneas rectas a líneas rectas; se les permite distorsionar las cosas en curvas. Hay muchos de estos, incluidos cilíndricos, esféricos, varios tipos de ojo de pez y otros.

Con proyecciones no lineales, no puede simplemente usar una matriz de proyección; tienes que implementar de alguna manera la proyección usando sombreadores. Una forma es escribir un sombreador de vértices personalizado para hacer la proyección por vértice. La GPU seguirá dibujando el triángulo con líneas rectas entre los vértices, por lo que, si bien los triángulos pequeños estarán bastante cerca de ser correctos, los triángulos más grandes estarán notablemente equivocados. Esto puede causar problemas , y la geometría puede necesitar subdividirse muy finamente para renderizarse correctamente.

Un segundo enfoque para obtener una proyección no lineal es renderizar la escena usando una proyección en perspectiva regular primero (tal vez en un mapa de cubos, que tiene una proyección en perspectiva para cada cara del cubo), luego aplique un sombreador de píxeles posterior al proceso para volver a muestrearlo al deseado Proyección no lineal. Esto tiene la ventaja de no requerir modificaciones de geometría, pero puede ser más costoso debido al trabajo de renderizado adicional requerido, y el resultado puede ser borroso en algunas áreas si el renderizado de primer paso no tiene suficiente resolución. Los juegos Oculus Rift utilizan el enfoque posterior al proceso, por ejemplo, para implementar la proyección no lineal que Rift requiere para trabajar con sus lentes.

Nathan Reed
fuente
1

No puedo creerlo, pero nadie ha mencionado la Proyección isométrica, que solía ser bastante común.

Roy T.
fuente
11
Hasta donde yo sé, las proyecciones isométricas son casos de uso específicos de los otros dos tipos de proyección, ortográfica y de perspectiva. Por ejemplo, una proyección ortopédica con una vista en cierto ángulo le proporciona una cámara isométrica.
Grimshaw