2010-07-17 29 views
5

Estoy buscando una matriz de proyección que pueda usar en 3D que me dé el efecto de un ojo de pez. No estoy buscando un pixelder o algo así, que manipule píxeles, sino la matriz de proyección real utilizada para proyectar desde el espacio 3D a 2D.Matriz de proyección Fisheye en Xna/OpenGL - 3D

Gracias.

+0

esto podría ser útil: http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/domefisheye/fisheye/ –

+0

Gracias. Eso será útil en otros escenarios que estoy viendo. –

Respuesta

2

Carlos no está equivocado, pero es posible que desee intentar jugar con el parámetro "campo de visión (FOV)" en su generador de matriz de proyección.

+0

Gracias a ambos. Supongo que tendré que revisar mis cálculos de Matrix; mi primera suposición también fue experimentar con FOV, pero no obtuve el efecto deseado. Estoy buscando más de una aproximación, en lugar de pixelperfect. –

+0

@Einar, As Goz dijo que Carlos está en el dinero - FOV trabaja para los puntos finales, los transforma donde deberían estar, pero aún se dibuja la línea recta entre ellos. Intenta crear algunas mallas que representen un triángulo, utilizando un solo polígono o usando 10 polígonos y usando 1000 polígonos. Luego intente jugar con FOV, tal vez las cosas van a ser más claras. – Unreason

11

Eso no es realmente posible. En coordenadas homogéneas, las matrices transforman líneas en líneas. Por lo tanto, cualquier solución basada únicamente en matrices necesariamente no podrá doblar las líneas como desee.

0

Carlos tiene razón. Hay una manera en que podría fingir, pero tendrá que volver a renderizar su escena varias veces.

Básicamente, empiezas por descubrir cómo hacer una perspectiva de dos puntos. Lo cual haría haciendo la escena dos veces con una matriz de proyección que tiene un punto de fuga en lados alternos. Entonces combinas las dos partes, supongo que usando un mapa de estarcido.

Puede hacer algo así como la perspectiva de cuatro puntos combinando imágenes con cuatro puntos de fuga. Repites ese proceso tantas veces.

Lo que hace entonces es proyectarse en un polígono que se aproxima a una esfera.

Podría explicar más, pero creo que parece demasiado complicado.

La forma más simple de simularlo es renderizar una textura y distorsionarla, y representarla como un cuadrángulo de pantalla completa.

+0

Gracias por la entrada, gran idea. Mi problema estaba relacionado con algo que me hizo sonrojar cuando lo vi. Tuve un error al proyectar a la pantalla, lo que causó todos mis esfuerzos en cambiar el campo de visión para obtener el efecto que quería inútil. –

Cuestiones relacionadas