Ikosaeder Triangle Strip

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Ikosaeder Triangle Strip

Beitrag 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
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Ikosaeder Triangle Strip

Beitrag 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.
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: Ikosaeder Triangle Strip

Beitrag 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?
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Ikosaeder Triangle Strip

Beitrag von dot »

Sollte das nicht einfach so gehen?
Untitled.png
Untitled.png (7.28 KiB) 5561 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...
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

Re: Ikosaeder Triangle Strip

Beitrag 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.
Ohne Input kein Output.
Benutzeravatar
Krishty
Establishment
Beiträge: 8241
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Ikosaeder Triangle Strip

Beitrag 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.)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Ikosaeder Triangle Strip

Beitrag 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...
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: Ikosaeder Triangle Strip

Beitrag von Artificial Mind »

Ihr macht genau die "Denkphasen" durch, die ich auch vorhin bei meiner Suche hatte :D
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Ikosaeder Triangle Strip

Beitrag 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.
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: Ikosaeder Triangle Strip

Beitrag 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 ;)
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Ikosaeder Triangle Strip

Beitrag 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...
Zuletzt geändert von dot am 03.11.2011, 00:19, insgesamt 3-mal geändert.
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: Ikosaeder Triangle Strip

Beitrag 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)
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Ikosaeder Triangle Strip

Beitrag 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...
Benutzeravatar
BeRsErKeR
Establishment
Beiträge: 689
Registriert: 27.04.2002, 22:01

Re: Ikosaeder Triangle Strip

Beitrag 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.
Ohne Input kein Output.
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: Ikosaeder Triangle Strip

Beitrag 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.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4855
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Ikosaeder Triangle Strip

Beitrag von Schrompf »

Aber was Du machen kannst, ist den Icosaeder vorher zu erstellen, notfalls in einem 3D-Modellierungsprogramm, und dann per Instancing zu zeichnen.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: Ikosaeder Triangle Strip

Beitrag 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)?
Antworten