2010-07-17 10 views
5

Je cherche une matrice de projection que je peux utiliser en 3D et qui me donnera l'effet d'un fisheye. Je ne cherche pas un pixelhader ou quelque chose comme ça, qui va manipuler les pixels - mais la matrice de projection utilisée pour projeter de l'espace 3D sur 2D.Matrice de projection Fisheye en Xna/OpenGL - 3D

Merci.

+0

cela pourrait être pratique: http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/domefisheye/fisheye/ –

+0

Merci. Cela sera utile dans d'autres scénarios que je regarde. –

Répondre

2

Carlos ne se trompe pas mais vous pouvez essayer de jouer avec le paramètre "field of view (FOV)" dans votre générateur de matrice de projection.

+0

Merci à tous les deux. Je suppose que je devrais regarder par-dessus mes calculs matriciels - ma première estimation était aussi d'expérimenter avec FOV, mais n'a pas eu l'effet désiré. Je regarde plus d'une approximation, plutôt que pixelparfait. –

+0

@Einar, Comme Goz a dit Carlos est sur l'argent - FOV travaille pour les points finaux, les transforme où ils sont censés être, mais il dessine toujours la ligne droite entre eux. Essayez de créer quelques mailles qui représentent un triangle - en utilisant un seul polygone ou en utilisant 10 polygones et en utilisant 1000 polygones. Ensuite, essayez de jouer avec FOV, peut-être que les choses vont être plus claires. – Unreason

11

Ce n'est pas vraiment possible. En coordonnées homogènes, les matrices transforment les lignes en lignes. Donc, toute solution basée uniquement sur des matrices échouera nécessairement à plier les lignes comme vous le souhaitez.

0

Carlos a raison. Il y a une manière que vous pourriez feindre, mais vous devrez re-rendre votre scène plusieurs fois.

Fondamentalement, vous commencez par comprendre comment faire deux points de vue. Ce que je ferais en rendant la scène deux fois avec une matrice de projection qui a un point de fuite sur les côtés alternés. Ensuite, vous combinez les deux parties, je suppose en utilisant une carte de pochoir.

Vous pourriez faire quelque chose comme la perspective en quatre points combinant des images avec quatre points de fuite. Vous répétez ce processus autant de fois. Ce que vous faites ensuite projette sur un polygone qui se rapproche d'une sphère.

Je pourrais expliquer plus, mais je suppose que cela semble trop compliqué.

La manière la plus simple de truquer est de rendre une texture et de la déformer, et de la rendre comme un quad fullscreen.

+0

Merci pour la contribution - bonne idée. Mon problème était lié à quelque chose qui m'a fait rougir quand je l'ai vu. J'ai eu une erreur lors de la projection à l'écran, ce qui a causé tous mes efforts dans le changement de FOV pour obtenir l'effet que je voulais inutile. –