Berechne den Begrenzungsquadrat einer Kugel mit einem Vertex-Shader

8

Ich versuche, einen Algorithmus aus einem Grafikpapier zu implementieren, und ein Teil des Algorithmus rendert Kugeln mit bekanntem Radius in einen Puffer. Sie sagen, dass sie die Kugeln rendern, indem sie den Ort und die Größe in einem Vertex-Shader berechnen und dann die entsprechende Schattierung in einem Fragment-Shader vornehmen.

Irgendwelche Vermutungen, wie sie das tatsächlich gemacht haben? Die Position und der Radius sind in Weltkoordinaten bekannt und die Projektion ist perspektivisch. Bedeutet das, dass die Kugel als ein Kreis projiziert wird?

    
Ben Jones 28.04.2010, 06:08
quelle

3 Antworten

3

Ich habe ein Papier gefunden, das beschreibt, was Sie brauchen - die Berechnung des Quadrats. Siehe:

Ссылка

Abschnitt 3.2, Berechnung der Begrenzungsbox. Das Papier erwähnt auch, dass Sie es im Vertex-Shader tun, also könnte es das sein, wonach Sie suchen.

Ein persönlicher Gedanke:

Sie können die Begrenzungsbox approximieren, indem Sie die Größe der Kugel durch ihren Radius annähern. Verwandle das in den Bildschirm und du bekommst eine etwas größere als die richtige Bounding Box, aber es wird nicht so weit weg sein. Dies schlägt fehl, wenn die Kamera zu nahe am Punkt ist oder wenn die Kugel natürlich zu groß ist. Aber ansonsten sollte man relativ optimal rechnen, da es einfach ein -Verhältnis zwischen zwei gleichartigen, rechten Dreiecken wäre.

Wenn Sie die Sehnenlänge herausfinden können, dann wird das Verhältnis die genaue Antwort liefern, aber das ist ein wenig jenseits von mir im Moment.

Alternativtext http://xavierho.com/temp/Sphere-Screen-Space.png

Natürlich ist das nur eine ungefähre Annäherung und hat manchmal einen großen Fehler, aber es würde die Dinge schnell, einfach und schnell gehen lassen.

Sonst , siehe das oben verlinkte Papier und verwenden Sie den richtigen Weg. =]

    
Xavier Ho 28.04.2010, 07:47
quelle
1

Die Kugel wird als Ellipse projiziert, es sei denn, sie befindet sich im Zentrum der Kamera, wie Brainjam sagt.

Der Artikel, auf den Xavier Ho verweist, beschreibt die Verallgemeinerung der Kugelprojektion (dh die quadratische Projektion). Es ist eine sehr gute Lektüre und ich empfehle es auch. Wenn Sie sich jedoch nur für die Kugelprojektion und genauer für das Viereck interessieren, das die Projektion begrenzt, dann Die Mechanik robuster Schablonenschatten, Seite 6: Scherenoptimierung erläutert, wie das geht.

Eine Anmerkung zur Approximation von Xavier Ho

Ich möchte hinzufügen, dass die Näherung, die Xavier Ho vorschlägt,, wie er anmerkt, sehr approximativ ist. Ich habe es tatsächlich für einen Kachel-basierten Forward-Renderer verwendet, um Lichtgrenzen im Bildschirmbereich anzunähern. Das folgende Bild zeigt, wie es eine gute Leistung mit 400 omni (sphärisch gebundenen) Lichtern in einer Szene ermöglicht: Kachelbasiertes Rendering - Far Zeigen Sie an. Genau wie Xavier Ho vorhergesagt hat, verursacht die Ungenauigkeit der Lichtgrenzen jedoch Artefakte, wie man sie hier beim Vergrößern sieht: Kachelbasiertes Rendern - Schließen Sie die Ansicht . Die überlappenden Vierecke versagen, um die Lichter vollständig zu begrenzen und stattdessen schneiden die Ränder, die das Fliesengitter aufdecken.

    
Frederik Aalund 24.08.2012 16:29
quelle
0

Im Allgemeinen wird eine Kugel als eine Ellipse in der Perspektive gesehen. alt text http://psychology.jrank.org/article_images/psychology.jrank.org/ perspective.7.jpg

Das obige Bild befindet sich am Ende von diesem Artikel .

In Abschnitt 6 von in diesem Artikel wird beschrieben, wie das Begrenzungstrapez der Kugel ist Projektion wird erhalten. Vor Computern müssen Künstler und Zeichner das von Hand herausfinden.

    
brainjam 28.04.2010 14:47
quelle