Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

24.09.2008, 10:55

Wie macht man Alphablending

Sicherlich kennt jeder das Problem:
Hat man mehrere 3D Objekte die transparent sind und hintereinander stehen, dann müssen die hinteren Objekte zuerst und die vorderen zuletzt gerendert werden.

Wie aber soll das funktionieren wenn einige Dreiecke des Objektes selbst, hintereinander stehen?

Die Dreiecke kann man ja schlecht sortieren und dazu auch noch in jedem Durchlauf des Programms, denn das würde die Performance des Programms erheblich hinunter ziehen.

Wie also behebt man das?

Anonymous

unregistriert

2

24.09.2008, 10:59

Welche GrafikAPI oder möchtest du Alphablending per Hand berechnen?

3

24.09.2008, 11:03

Könnte man mit Culling lösen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
// Vorderseite

3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CW );
RenderObject();
// Rückseite

3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW );
RenderObject();
// oder umgekehrt, je nach Objekt


// Alternativ

3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
RenderObject();


Geht zwar auch etwas auf die Performance, aber ein einfacher Weg...

// Edit
Keine Ahnung, wie das bei OpenGL analog funktioniert
fka tm

Chase

Alter Hase

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

4

24.09.2008, 11:03

Zitat von »"unsigned long"«

Welche GrafikAPI oder möchtest du Alphablending per Hand berechnen?

Ein Klick auf seine Signatur und du weisst er benutzt OpenGL :)

Uebrigens sehr nette Tutorials auf der Seite. Leider scheinen einige down zu sein..
"Have you tried turning it off and on again?"

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

24.09.2008, 11:13

Zitat von »"TrikkieMikkie"«

Könnte man mit Culling lösen

Das geht aber nur bei konvexen Objekten!

6

24.09.2008, 11:25

Zitat von »"David Scherfgen"«

Zitat von »"TrikkieMikkie"«

Könnte man mit Culling lösen

Das geht aber nur bei konvexen Objekten!

Kannst du das mal erläutern? Warum sollte das bei konkaven Objekten nicht gehen? Ich meine, solange sie "hohl" sind und Polygone sich nicht überschneiden?
Ansonsten habe ich grade keine Idee, wie so ein Objekt aussehen müsste...
fka tm

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

7

24.09.2008, 11:43

Ja ich nutze OpenGL ^^ aber da kann man ja auch Culling ein/aus schlaten. "CW" und "CCW" hab ich da auch schon mal genutzt aber weiß ehrlichgesagt noch nicht genau was das macht. CullFace "front" und "back" ist mir klar aber was dieses CW und CCW zu bedeuten hat weiß ich nicht.

Zitat von »"Chase"«

Uebrigens sehr nette Tutorials auf der Seite. Leider scheinen einige down zu sein..

Danke :) und ja, einige Tutorials hab ich entweder noch nicht erstellt oder sind noch nicht auf meiner Seite weil ich das noch nicht in Html geschrieben hab.

Aber wenn sich die Dreiecke im Objekt selbst überlappen ist das ein echten Problem :oops:

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

8

24.09.2008, 11:54

Zitat von »"LukasBanana"«

aber was dieses CW und CCW zu bedeuten hat weiß ich nicht.


CW -> Clock Wise, im uhrzeigersinn definierte dreiecke werden gecullt
CCW -> Counter Clock Wise , gegen den Uhrzeigeersinn definierte dreiecke werden gecullt

aber ein blick in die msdn unter D3DCULL_CW/CCW hätte dir das auch beantwortet ;)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

24.09.2008, 11:54

Zitat von »"TrikkieMikkie"«

Kannst du das mal erläutern? Warum sollte das bei konkaven Objekten nicht gehen? Ich meine, solange sie "hohl" sind und Polygone sich nicht überschneiden?
Ansonsten habe ich grade keine Idee, wie so ein Objekt aussehen müsste...

Das geht nur bei konvexen Objekten, weil dort garantiert ist, dass die Rückseiten weiter weg liegen als die Vorderseiten.
Bei konkaven Objekten funktioniert das nicht, da diese Garantie nicht gegeben ist. Stell dir als nicht-konvexes Objekt einfach eins vor, das aus zwei hintereinander liegenden Dreiecken besteht, die beide in dieselbe Richtung schauen. Nun kannst du durch Culling nicht mehr erreichen, dass das hintere Dreieck zeitlich vor dem vorderen gezeichnet wird.

10

24.09.2008, 12:03

Tja in dem Falle müsste man wohl tatsächlich auf Polygon-/Dreiecks- oder Subset-Basis arbeiten.
Wobei die Problemstellung konkaver Objekte plus Alpha bei mir bis dato glücklicherweise noch nicht aufgetreten ist. :)
fka tm

Werbeanzeige