Polygon(e) einer Schnittebene berechnen

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
maxx2097
Beiträge: 22
Registriert: 15.03.2011, 18:37

Polygon(e) einer Schnittebene berechnen

Beitrag von maxx2097 »

Hallo zusammen,

ich grüble gerade darüber, wie man möglichst Effizient (=schnell) das/die Polygon(e) eines beliebigen 3D-Objekts mit einer beliebigen Ebene bestimmen könnte.
Evtl. wäre dies auch mit einem Shader möglich, wobei es da wahrscheinlich Probleme mit der Genauigkeit geben könnte (das Ergebnis müsste ja wahrscheinlich in eine Textur kodiert werden).

Hat jemand Ansätze?

Danke!
Benutzeravatar
Krishty
Establishment
Beiträge: 8295
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Polygon(e) einer Schnittebene berechnen

Beitrag von Krishty »

  • Modell zur GPU schicken
  • Durchreich-Vertex-Shader setzen
  • Parameter der Ebene als Shader-Konstanten setzen
  • Stream Output Buffer für Geometry Shader setzen (nix da Texturen)
  • Im Geoshader die Schnittkante des aktuellen Dreiecks mit der Ebene berechnen
    • falls vorhanden, an den Output-Stream anhängen
    • sonst einfach garnichts tun
  • Ausgabepuffer von der GPU holen
  • ???
  • PROFIT
Ich habe aber selber nie mit Stream Output gearbeitet, darum ohne Gewähr.

Mit einem Compute Shader, dem Modell als StructuredBuffer und den Schnittpunkten als AppendStructuredBuffer könnte es nochmal schneller sein (und du sparst das Setup der VS-/GS-Pipeline), aber ob du den nutzen kannst hängt von der Hardware deiner Nutzer ab (müsste D3D 11 sein, CS mit D3D 10.1-Hardware ist doof).

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
maxx2097
Beiträge: 22
Registriert: 15.03.2011, 18:37

Re: Polygon(e) einer Schnittebene berechnen

Beitrag von maxx2097 »

Hi Krishty,

wow... vielen Dank für die schnelle Antwort! Das hört sich doch recht vielversprechend an.
Auf die Schnelle gegoogled scheint aber die Kombination GeometryShader/ATI in OpenGL da nicht 100% sauber zu laufen, oder? Und bei der Implementierung des Stream Output Buffers in OpenGL bin ich mir da auf den ersten Blick auch nicht so sicher.

Aber ich werde da mal forschen.
Benutzeravatar
Krishty
Establishment
Beiträge: 8295
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Polygon(e) einer Schnittebene berechnen

Beitrag von Krishty »

Dass du mit OpenGL arbeitest, wusste ich nicht. Keine Ahnung, wie das dort aussieht und wie die Qualität der Implementierung ist.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
maxx2097
Beiträge: 22
Registriert: 15.03.2011, 18:37

Re: Polygon(e) einer Schnittebene berechnen

Beitrag von maxx2097 »

Ja, sorry, das hatte ich nicht explizit erwähnt... dachte das Icon im Thread reicht ;)
Benutzeravatar
Krishty
Establishment
Beiträge: 8295
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Polygon(e) einer Schnittebene berechnen

Beitrag von Krishty »

Übersehen – mein Fehler.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1736
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Polygon(e) einer Schnittebene berechnen

Beitrag von dot »

maxx2097 hat geschrieben:Auf die Schnelle gegoogled scheint aber die Kombination GeometryShader/ATI in OpenGL da nicht 100% sauber zu laufen, oder?
Sagt wer? Ich bin zwar eher ein Fan von D3D aber das hör ich zum Ersten mal...
maxx2097 hat geschrieben:Und bei der Implementierung des Stream Output Buffers in OpenGL bin ich mir da auf den ersten Blick auch nicht so sicher.
http://www.opengl.org/registry/specs/EX ... edback.txt
Antworten