JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Partikelsystem
Gehe zu Seite Zurück  1, 2, 3
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 01.08.2003, 13:40    Titel: Antworten mit Zitat

Naja, ganz so schlimm ist es auch nicht. Am besten machst du eine Liste von Partikeln - sowas in der Art wirst du ja sowieso schon haben. Immer, wenn du einen neuen Partikel erzeugst, läufst du durch die Liste und schaust, wann ein z-Wert größer ist, als der des aktuellen Partikels. Wenn dies so ist, sortierst du ihn ein.

Hattest du es mal über den Colorkey probiert? Das könnte ev. gehen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 01.08.2003, 13:46    Titel: Antworten mit Zitat

Das Problem ist ja, dass man sich um die Partikel herum bewegen kann, ich müsste also ständig umsortieren Sad

Die Transparenz läuft momentan über den Colorkey, der ja eigentlich nichts anderes macht, als den Alphakanal der Colorkey-Farbe auf 0 zu setzen ...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 01.08.2003, 13:58    Titel: Antworten mit Zitat

Ich hätte jetzt erwartet, dass der Colorkey ev. ein Flag und die Farbe setzt, so dass das Schreiben in den Z-Buffer ausgeschaltet wird.

Eigentlich muss du die Liste (wenn ich es richtig verstehe) von vorne nach hinten oder von hinten nach vorne rendern.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 01.08.2003, 14:04    Titel: Antworten mit Zitat

Das ist ja mein Problem, dass das mit der Liste nicht so einfach ist:

=]Mid[=]Night[= hat Folgendes geschrieben:
Das Problem ist ja, dass man sich um die Partikel herum bewegen kann, ich müsste also ständig umsortieren Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 01.08.2003, 14:11    Titel: Antworten mit Zitat

Wieso? Angenommen du hast eine STL-Liste, dann kannst du mit

Code:

std::list<CParticel*> it;

// vorwärts ausgeben:
for(it=ParticelList.begin();it!=ParticelList.end();it++)
{
   (*it)->Render();
}

// rückwärts ausgeben:
for(it=ParticelList.end();it!=ParticelList.begin();it--)
{
   (*it)->Render();
}

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 01.08.2003, 14:26    Titel: Antworten mit Zitat

Also:

Die Partikel werden an Zufallspositionen innerhalb eines Blocks gesetzt.
Sie bewegen sich mit einem Vektor in eine Richtung, bis sie aus dem Block herausfallen. Dann werden Sie wieder an einen zufälligen Startpunkt gesetzt.
Wenn ich jetzt von einer Seite auf den Block gucke, muss ich die Partikel ja nicht nach der Reihenfolge, wie sie erstellt wurden (so befinden sie sich in einem Array) zeichnen, sondern nach ihrer Entfernung zur Kamera.
Wenn ich mich um den Block herumbewege, muss ich doch dauernd die Liste umsortieren. Beispiel:



Das wird bei 1000 Partikeln natürlich schwieriger :S
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 01.08.2003, 14:43    Titel: Antworten mit Zitat

Um die Partikel in der Reihenfolge der Entfernung zur Kamera zu sortieren, musst du einfach die Partikelposition von der Kameraposition abziehen und bspwse. mit D3DXVec3LengthSq(CamPos - ParticlePos) das Quadrat der Entfernung berechnen (du könntest auch D3DXVec3Length() benutzen, da diese Funktion jedoch mehr Zeit braucht als D3DXVec3LengthSq() und du eh nur das Entfernungsverhältnis und nicht die absolute Entfernung brauchst, würde ich D3DXVec3LengthSq() benutzen).
Das machst du für jedes Partikel sortierst nach der Entfernung zur Kamera.

Was du stattdessen noch probieren könntest, ist Alphatesting. Dabei schaltet D3D den ZBuffer automatisch ab, wenn ein Pixel transparent ist. Das könnte zu guten Ergebnissen führen, ohne dass du die Partikel sortieren musst.
_________________
www.messiahzone.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 01.08.2003, 14:51    Titel: Antworten mit Zitat

ENDLICH EINE IDEE !!!! Very Happy Very Happy Very Happy Very Happy Very Happy

WIE MACHE ICH ALPHATESTING ???????????

WARUM BIST DU NICHT SCHON FRÜHER IN DEN THREAD GEKOMMEN ??? Laughing Laughing
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jörg
JLI MVP
JLI MVP



Anmeldedatum: 19.07.2002
Beiträge: 182
Wohnort: Siegen/NRW
Medaillen: Keine

BeitragVerfasst am: 01.08.2003, 14:55    Titel: Antworten mit Zitat

Wie man Alpha Testing genau verwendet, steht z.B. in der DXSDK-Dokumentation unter "Alpha Testing State" bzw. gibt es sicher auch einige Tutorials im Internet. Ich selbst kann dir nicht so viel darüber erzählen, weil ich es selbst noch nie verwendet habe Wink
_________________
www.messiahzone.de.vu
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 01.08.2003, 15:02    Titel: Antworten mit Zitat

Ich muss jetzt weg, ich probiers auf jeden Fall mal aus und schreib ob es klappt
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 02.08.2003, 09:40    Titel: Antworten mit Zitat

Also, es gibt eine Möglichkeit, mit der man Pixel mit bestimmten Alpha-Werten vom Kopieren ausschließen kann:

Code:

m_lpDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, 1);
m_lpDevice->SetRenderState(D3DRS_ALPHATESTENABLE, 1);

// Der Referenzwert für den Alphakanal
m_lpDevice->SetRenderState(D3DRS_ALPHAREF, 0);

// D3DCMP_... gibt an, wie die Pixel mit dem Referenzwert verglichen werden sollen. Ist der Vergleich positiv, wird der Pixel gezeichnet.
m_lpDevice->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATER);


m_lpDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
m_lpDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);


Mit diesem Code werden jetzt nur die Pixel mit Alphawert 0 vom Kopieren ausgeschlossen.
Der Effekt ist jetzt nicht mehr ganz so gravierend:

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 11.08.2003, 21:03    Titel: Antworten mit Zitat

Du musst einfach nur die Partikelreihenfolge so ändern das die Partikel von forne nach hinten gemalt werden das ist auch schon alles.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 11.08.2003, 21:19    Titel: Antworten mit Zitat

Das war ja sein Problem, dass er aufgrund der unterschiedlichen Ansichtsperspektiven bei jedem Rendervorgang die Liste der Partikel umsortieren müsste, damit sie wieder in der Reihenfolge ist.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 11.08.2003, 21:32    Titel: Antworten mit Zitat

Sorry hab total übersehen das das ganze über 3 Seiten ging. Hab nur die erste Seite bemerkt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2, 3
Seite 3 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum