2010-07-17 6 views
5

Ich bin auf der Suche nach einer Projektionsmatrix, die ich in 3D verwenden kann, die mir den Effekt eines Fisheye geben wird. Ich bin nicht auf der Suche nach einem Pixelshader oder ähnlichem, der Pixel manipulieren würde - sondern nach der tatsächlichen Projektionsmatrix, die beim Projizieren aus dem 3D-Raum auf 2D verwendet wird.Fisheye Projektionsmatrix in Xna/OpenGL - 3D

Danke.

+0

könnte dies praktisch sein: http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/domefisheye/fisheye/ –

+0

Danke. Das wird in anderen Szenarien nützlich sein, die ich mir ansehe. –

Antwort

2

Carlos ist nicht falsch, aber Sie könnten versuchen, mit dem Parameter "Sichtfeld (FOV)" in Ihrem Projektionsmatrix-Generator zu spielen.

+0

Danke, beides. Ich denke, ich muss über meine Matrix-Berechnungen schauen - meine erste Schätzung war auch mit FOV zu experimentieren, aber nicht den gewünschten Effekt zu bekommen. Ich sehe eher eine Annäherung, als pixelperfect. –

+0

@Einar, Wie Goz sagte Carlos ist auf das Geld - FOV arbeitet für die Endpunkte, transformiert sie, wo sie sein sollen, aber es zieht immer noch die gerade Linie zwischen ihnen. Versuchen Sie, ein paar Netze zu erstellen, die ein Dreieck darstellen, indem Sie ein einzelnes Polygon verwenden oder 10 Polygone verwenden und 1000 Polygone verwenden. Dann versuche mit FOV zu spielen, vielleicht werden die Dinge klarer. – Unreason

11

Das ist nicht wirklich möglich. In homogenen Koordinaten transformieren Matrizen Linien in Linien. Jede Lösung, die nur auf Matrizen basiert, wird die Zeilen nicht wie gewünscht verbiegen.

0

Carlos hat Recht. Es gibt einen Weg, wie du es fälschen könntest, aber du musst deine Szene mehrmals rendern.

Im Grunde fangen Sie an, herauszufinden, wie Sie eine Zweipunktperspektive machen. Was ich tun würde, wenn ich die Szene zweimal mit einer Projektionsmatrix rendere, die auf alternierenden Seiten einen Fluchtpunkt hat. Dann kombinierst du die beiden Teile, nehme ich mal mit einer Schablone.

Sie könnten so etwas wie Vier-Punkte-Perspektive kombinieren Bilder mit vier Fluchtpunkten kombinieren. Sie wiederholen diesen Vorgang so oft.

Sie projizieren dann auf ein Polygon, das einer Kugel angenähert ist.

Ich könnte mehr erklären, aber meine Vermutung ist es klingt zu kompliziert.

Die einfachste Art, es zu fälschen, besteht darin, eine Textur zu rendern und das Bild zu verzerren und es als Fullscreen-Quad zu rendern.

+0

Danke für die Eingabe - gute Idee. Mein Problem war etwas, das mich erröten ließ, als ich es sah. Ich hatte einen Fehler bei der Projektion auf den Bildschirm, was dazu führte, dass alle meine Bemühungen, das FOV zu ändern, den Effekt erreichten, den ich nutzlos haben wollte. –