Seite 1 von 1

Ikosaeder Triangle Strip

Verfasst: 02.11.2011, 21:42
von Artificial Mind
Hi :)

Weiß jemand vielleicht zufällig, wie man einen Ikosaeder aus einem Triangle Strip zusammenbauen kann? (Damit ich einen Punkt im Geometry Shader zu einem Ikosaeder machen kann)

Grüße,
Mind

Re: Ikosaeder Triangle Strip

Verfasst: 02.11.2011, 22:04
von dot
Wenn ich mir das Netz von so nem Teil anschau, dann würd ich mal meinen, dass das eigentlich mit einem einzelnen Strip machbar sein sollte:
Bild
Einfach in Schlangenlinien abfahren, dürfte dem Vertex-Cache auch sehr gefallen...

EDIT: Ich würd mir aber überlegen, ob ich sowas wirklich im GeometryShader erzeugen will. Könnte mir vorstellen, dass Instancing da bessere Performance liefert.

Re: Ikosaeder Triangle Strip

Verfasst: 02.11.2011, 22:16
von Artificial Mind
Für mich sieht das so aus, dass die Ecken Probleme machen und man nicht mit 22 Vertices auskommt (für die 20 Seiten)

Wieso sollte Instancing schneller sein?

Re: Ikosaeder Triangle Strip

Verfasst: 02.11.2011, 22:24
von dot
Sollte das nicht einfach so gehen?
Untitled.png
Untitled.png (7.28 KiB) 5937 mal betrachtet
Natürlich kann man sich auch andere, evtl. bessere Abwicklungen überlegen.
Ich zähl nur 12 Vertices!?
Artificial Mind hat geschrieben:Wieso sollte Instancing schneller sein?
Weil GeometryShader, vor allem auf älteren Karten, nicht unbedingt gratis sind, vor allem wenn sie viel Output produzieren. Aber das müsste man natürlich in der konkreten Anwendung testen...

Re: Ikosaeder Triangle Strip

Verfasst: 02.11.2011, 22:41
von BeRsErKeR
dot hat geschrieben:Ich zähl nur 12 Vertices!?
Also ich zähl 22.

Und ich glaube auch, dass diese 22 nicht reichen. Wenn du es in 5 Triangle-Strips unterteilst benötigst du nur 8 zusätzliche (doppelte) Vertices, also 30. Was besseres fällt mir auch gerade nicht ein.

Re: Ikosaeder Triangle Strip

Verfasst: 02.11.2011, 22:54
von Krishty
Aber man braucht doch nur einen einzigen Streifen, weil die dunklen Dreiecke oben und unten im zusammengefalteten Körper ja aneinanderliegen, also sich die Kante teilen. (Mal wieder ohne Gewähr, da Eindruck vom Draufgucken.)

Re: Ikosaeder Triangle Strip

Verfasst: 02.11.2011, 22:57
von dot
Ja, genau das war auch mein Gedanke, aber funktioniert leider doch nicht ganz. Der Strip verfängt sich immer an den Kappen.
Mit Instancing gäbs das Problem nicht ;)

EDIT: Ne, warte mal...

Re: Ikosaeder Triangle Strip

Verfasst: 02.11.2011, 23:04
von Artificial Mind
Ihr macht genau die "Denkphasen" durch, die ich auch vorhin bei meiner Suche hatte :D

Re: Ikosaeder Triangle Strip

Verfasst: 02.11.2011, 23:23
von dot
There you go :)
Bild
(http://mathoverflow.net/questions/75567 ... 5692#75692)

Der duale Graph eines möglichen Netzes muss einen Hamilton-Pfad haben, damit es in einem Strip geht.

Re: Ikosaeder Triangle Strip

Verfasst: 02.11.2011, 23:50
von Artificial Mind
Danke, das klingt schonmal vielversprechend. Aber wenn ich mir den rechten angucke, dann kann ich da nicht einfach "langgehen" und habe einen gültigen Strip. Da sich mehr als 2 Dreiecke ein Vertex teilen gibt es dort Probleme und entweder ungültige Dreiecke oder ich muss Vertice doppelt eintragen.
Falls ich mich irre: nummerierung or didn't happen ;)

Re: Ikosaeder Triangle Strip

Verfasst: 03.11.2011, 00:08
von dot
lol stimmt. Und es scheitert immer am Gleichen. Auch wenn ichs nicht beweisen kann, ich postuliere mal, dass es sich da um eine inhärente Eigenschaft der Topologie des Ikosaeders handelt, dass man mindestens 3 Strips braucht. Hat vermutlich was damit zu tun, dass alle Vertices Grad 5 haben, zumindest sagt das mein Instinkt...5 - 3 + 1 = 3...

Re: Ikosaeder Triangle Strip

Verfasst: 03.11.2011, 00:16
von Artificial Mind
Meine Idee war halt, dass ich für ein Partikelsystem von volumetrischen Partikeln einfach Punkte an den Geometry Shader übergeb und der mir Ikosaeder erzeugt weil die ja einigermaßen low-poly-approximation einer Kugel sind. Allerdings wüsste ich auch noch nicht genau wie ich die dann vernünftig texturiere. Ich hatte da an solid space texturing gedacht (also z. B. 3D fractal perlin für Wolken/Rauch)

Re: Ikosaeder Triangle Strip

Verfasst: 03.11.2011, 00:17
von dot
Ich würd mir überlegen, ob es da nicht geschickter wär, normale Billboards zu rendern und über die im Pixelshader dann einfach eine Kugel zu raycasten...

Re: Ikosaeder Triangle Strip

Verfasst: 03.11.2011, 03:28
von BeRsErKeR
Artificial Mind hat geschrieben:Meine Idee war halt, dass ich für ein Partikelsystem von volumetrischen Partikeln einfach Punkte an den Geometry Shader übergeb und der mir Ikosaeder erzeugt weil die ja einigermaßen low-poly-approximation einer Kugel sind. Allerdings wüsste ich auch noch nicht genau wie ich die dann vernünftig texturiere. Ich hatte da an solid space texturing gedacht (also z. B. 3D fractal perlin für Wolken/Rauch)
DX und OGL bieten doch eigentlich Hilfsfunktionen für Kugeln an. Ich kenn jetzt nur die OGL-Variante gluSphere aber da kann man soweit ich weiß auch die Approximation angeben und das geht glaub ich sogar noch schlechter als Ikosaeder. Ob das nun viel langsamer ist weiß ich nicht. Ich nehme aber mal an, dass der intern wenn möglich auch nur nen Triangle Strip nimmt. Für DX gibts da wohl D3DXCreateSphere, was soweit ich sehe auch die Möglichkeit anbietet, das ganze anzupassen.

Ob das ganze sinnvoll ist, davon nehm ich mal Abstand, weil ich's nicht weiß. Das ist nur eine Idee den manuellen Weg über Triangle Strips zu umgehen.

Re: Ikosaeder Triangle Strip

Verfasst: 03.11.2011, 10:09
von Artificial Mind
BeRsErKeR hat geschrieben:
Artificial Mind hat geschrieben:Meine Idee war halt, dass ich für ein Partikelsystem von volumetrischen Partikeln einfach Punkte an den Geometry Shader übergeb und der mir Ikosaeder erzeugt weil die ja einigermaßen low-poly-approximation einer Kugel sind. Allerdings wüsste ich auch noch nicht genau wie ich die dann vernünftig texturiere. Ich hatte da an solid space texturing gedacht (also z. B. 3D fractal perlin für Wolken/Rauch)
DX und OGL bieten doch eigentlich Hilfsfunktionen für Kugeln an. Ich kenn jetzt nur die OGL-Variante gluSphere aber da kann man soweit ich weiß auch die Approximation angeben und das geht glaub ich sogar noch schlechter als Ikosaeder. Ob das nun viel langsamer ist weiß ich nicht. Ich nehme aber mal an, dass der intern wenn möglich auch nur nen Triangle Strip nimmt. Für DX gibts da wohl D3DXCreateSphere, was soweit ich sehe auch die Möglichkeit anbietet, das ganze anzupassen.

Ob das ganze sinnvoll ist, davon nehm ich mal Abstand, weil ich's nicht weiß. Das ist nur eine Idee den manuellen Weg über Triangle Strips zu umgehen.
Das könnte man zwar versuchen, aber ich bezweifle einfach mal stark, dass ich im Geometry Shader gluSphere hab ;) Und wie ich quasi an gluSphere (welches bei OGL 3.3 sicher nicht mehr verfügbar ist, weil alles über Vertex Buffer gehen muss) mir abgucken kann, wie die das aufgebaut haben, weiß ich nicht.

Re: Ikosaeder Triangle Strip

Verfasst: 03.11.2011, 10:17
von Schrompf
Aber was Du machen kannst, ist den Icosaeder vorher zu erstellen, notfalls in einem 3D-Modellierungsprogramm, und dann per Instancing zu zeichnen.

Re: Ikosaeder Triangle Strip

Verfasst: 03.11.2011, 10:42
von Artificial Mind
Jo das kann ich natürlich machen. Hat jmd Erfahrung, ob eine Partikelengine mit "volumetrischen Partikeln" besser aussieht/Vorteile bietet gegenüber dem Standard-Billboard Ansatz (mit 3D-Textur)?