Wie kann ich methodisch wählen Sie den clip in der Nähe von dem Flugzeug Entfernung für eine perspektivische Projektion?
Habe ich eine 3D-Szene und eine Kamera definiert mit gluPerspective. Ich habe einen festen FOV, und ich weiß, dass der Mindestabstand von jeglicher geometrie, die für die Kamera (es ist ein first-person-Ansicht, so dass der minimale Abstand aus der Sicht des Charakters Kollision Volumen).
Wie kann ich wählen, die am weitesten near clip plane (für das beste depth-buffer-Auflösung), die führt zu keinem clipping, egal wie der Spieler sich bewegt und aussieht?
Diese Entfernungen sind nicht einfach gleich, weil die Ecken von der vorderen Ebene sind weiter von dem Ursprung als Zentrum.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Formel:
JavaScript-code:
Ableitung:
Geometrisch, sollten die Pyramide deren Basis ist die near clip plane und die Spitze ist der Ursprung. Lassen Sie nearPlane werden, die Höhe der Pyramide, und w und h die Breite und Höhe der pyramidenbasis.
Das FOV bestimmt die Steigung der Höhe-Achse Seiten der Pyramide:
Jedem Eckpunkt des near-clip-plane ist versetzt von der Mitte der clip-Ebene durch (w/2, h/2), so dass der Abstand sqrt((w/2)2 + (h/2)2). Die Abstand vom Ursprung dieser Eckpunkt ist die hypotenuse im rechtwinkligen Dreieck gebildet durch nearPlane und die ehemalige Strecke, also ist sqrt((w/2)2 + (h/2)2 + nearPlane2).
Wir wollen, dass die Entfernung um die Ecke gleich den nächsten Ansatz beliebiger geometrie.
Anwenden einfache algebra ergibt die Formel oben angegeben.
Habe ich nicht überprüft, meine algebra, aber ich habe empirisch getestet Formel: wenn ich multiplizieren nearPlane von 1.1, dann erzeugt es eine clip-Ebene, die ist nur ein bisschen zu weit, für verschiedene Seitenverhältnisse. Ich habe nicht versucht, verschiedene FOVs als 60°.
Die besten Praktiken für die Wahl der near-und far-clip-Distanzen ist Sie zu haben, behaglich Umschlag der Szene, d.h. die in der Nähe von clip-Ebene so weit wie möglich und die far-clip plane so nahe wie möglich.
Standard Sichtbereich Projektion beschäftigt, die von den meisten 3D-Anwendungen eine perspektivische transformation ist eine parallele Ebene Projektion. Das bedeutet, dass die Bestimmung der planare Abstand vom Standpunkt. Dies ist eigentlich Recht einfach:
Einer der Parameter, die Sie tragen werden, die um eine 3D-rendering-Programm ist der Ansicht, Vektor, D. H. die Richtung der Kamera zeigt. Sagen Sie, Sie haben dieser Vektor normiert (d.h. die Länge der Einheit), dann mit dem Skalar (=dot) - Produkt mit den Objekten Positionen gibt Ihnen die planare Abstand zum Ursprung. Dies ist ein direkter Ansatz, denn es gibt Sie den gewünschten Wert direkt, ohne die Notwendigkeit für eine squares, square root, und teilt. Es ist nur multiplizieren-Summe, d.h. MAD Anweisungen, die direkt unterstützt SIMD-Befehlssätzen.
Einfach: schalten Sie in der Nähe von clipping. ich kann nicht glauben, dass die Menschen noch nicht davon gehört noch. Sie aktivieren die Tiefe, spannen, wodurch in der Nähe (und Ferne) - Werte, die kleiner sind als die in der Nähe (oder größer als der Ferne) zu eingespannt werden, anstatt abgeschnitten.
Dies wird nicht verhindern, dass Objekte, die tatsächlich hinter der Kamera abgeschnitten werden obwohl. Und da die tiefen geklemmt sind, verlieren Sie das Dienstprogramm von einem depth-buffer für diejenigen Regionen, in denen die Klemmung Auftritt. Es ist immer noch eine gute Idee zu nutzen, wo sinnvoll, wenn Sie können nicht wählen Sie einen clip in der Nähe von, das ist zu weit Weg, sonst.
Ist es im Allgemeinen besser zu ermöglichen spannen und schieben Sie den clip aus der Nähe, als es zu Holen das absolute minimum in der Nähe von clip.