Aktuelle Zeit: 13.05.2025, 09:52

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Regen
BeitragVerfasst: 03.06.2009, 17:44 
Offline

Registriert: 03.06.2009, 17:39
Beiträge: 19
Ich hab versucht mit Partikel Regen zu erstellen, was auch ganz gut geklappt hat.
Der Regen sollte allerdings nicht durch Objekte (Dächer...) durchfallen.
Wie kann man das realiesieren?

Mein Code:
Code:
scene::IParticleSystemSceneNode* Regen = 0;
    Regen = smgr->addParticleSystemSceneNode(false);
    Regen->setPosition(core::vector3df(0,50,0));
    Regen->setScale(core::vector3df(1,1,1));   

    scene::IParticleEmitter* Regen_Ermitter = Regen->createBoxEmitter(core::aabbox3d<f32>(-7,0,-7,7,1,7),core::vector3df(0.0f,0.0f,0.0f),1000,1200,video::SColor(0,255,255,255), video::SColor(0,255,255,255),5000,5000);
   
    Regen->setEmitter(Regen_Ermitter);   

   scene::IParticleAffector* Regen_Affector = Regen->createGravityAffector(vector3df(0,-0.05,0));
   Regen->addAffector(Regen_Affector);
   

    Regen->setMaterialFlag(video::EMF_LIGHTING, false);
    Regen->setMaterialTexture(0, driver->getTexture("Regentropfen.jpg"));
    Regen->setMaterialType(video::EMT_TRANSPARENT_VERTEX_ALPHA);
   Regen->setParticleSize(dimension2d<f32>(0.15,0.15));


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Regen
BeitragVerfasst: 03.06.2009, 18:59 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
So von Haus aus wüsste ich da keine Lösung. Ich würde das lösen, in dem ich einen eigenen Particle affector schreiben würde, der einen Partikel entfern sobald dieser mit einem Objekt kollidiert.

Wenn das Ergebnis nicht reicht ( Regentropen würden zb nirgends abprallen, sonder einfach verschwinden ) kommst du wohl kaum um die verwendung einer Physikengine herum.
Aber so physikalisch genauer Regen sollte eigentlich überflüssig sein.

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Regen
BeitragVerfasst: 04.06.2009, 10:02 
Offline
Benutzeravatar

Registriert: 23.06.2008, 07:21
Beiträge: 74
Wohnort: Dresden
Im Tutorial für die Collision ist ein ziemlich gutes beispiel gegeben. Du könntest es so machen, das eine Linie von Regentropfen aus, auf Kollision mit der map überprüft wird. Steht halt alles im Tut drin ^^
Aber ich denke, das das ziemlich rechenaufwändig ist für jeden regentropfen oder?

Edit: Dazu müsstest du allerdings auf dein Partikelsystem verzichten. und statdessen billboards zb nehmen.

_________________
...then he said, "I can't feel my legs!" and I said "Joe! Stay with me Joe!" But it was ... to late. The garbage collector came and... he was gone. Best object I ever had.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Regen
BeitragVerfasst: 04.06.2009, 10:16 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Nene das Partikelsystem kann man immernoch verwenden. Man muss den Code halt nur in einen Partikel affector auslagern.

Rechenintensiv sollte das nicht unbedingt sein.
Man muss ja keine Punktgenauen kollisionen berechnen. MAn kann ja erstmal prüfen ob der Tropfen in der Bounding Box des Objekts ists (das dürfte kaum Rechenzeit kosten) und wenn der drin ist genauer Rechnen.

Oder die ganz billige Lösung: Einfach grob boundingboxen um das objekt herum erzeugen und sobald der tropfen in einer von diesen ist einfach löschen.

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Regen
BeitragVerfasst: 06.06.2009, 18:26 
Offline

Registriert: 03.06.2009, 17:39
Beiträge: 19
Und wie programmiere ich den Particel Affector?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Regen
BeitragVerfasst: 06.06.2009, 18:37 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Du erstellst eine neue Klasse, die von IParticleAffector erbt. In der methode affect() bekommst du dann ein array aus Partikeln, die vorhanden sind. Die gehst du dann alle durch und kannst dann einzelne Partikel löschen.
Diese Klasse musst du dann natürlich noch per addAffector() and das Partikelsystem anhängen.

Wie genau das löschen geht weiß ich jetzt nicht, aber im Source vom IParticleFadeOutAffector wirst du wahrscheinlich fündig werden.

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Regen
BeitragVerfasst: 08.06.2009, 21:35 
Offline
Benutzeravatar

Registriert: 07.08.2008, 11:31
Beiträge: 104
Oh, es regnet heute schon den ganzen Tag über, da sollten die Ideen eigentlich nur so fließen. :lol:

Du musst zu erst mal beschließen, wie genau du den Regen, also was alles und am Ende wie alles, darstellen möchtest.
Genügen dir ein paar Streifen auf der Leinwand oder möchtest du ebenso das Aufprallen der Regentropfen an bestimmten Oberflächen simulieren.

Die technische Geschichte hängt voll und ganz von deiner eigenen Programmarchitektur ab und wie du sonst alles berechnest. D. h. man könnte gewisse Berechnungen an das Pathfinding etc. anhängen, wenn (nur eine Möglichkeit) geprüft wird, ob der Charakter eine gewisse Fläche betritt oder nicht.

Wie du herausbekommst, ob du im Regen stehst oder nicht? Ganz einfach, schieße einen Strahl geradewegs nach oben. Keine Objekte über dir -> Regen wird global simuliert.
Objekt wird geschnitten -> Prüfen welches Objekt -> vom Objekt bis zum Charakter möglicherweise an der Boundingbox entlang Planes erstellen (wenn nicht schon vorher erstellt) und als Textur "Regen" einsetzen. Diese Möglichkeit wäre mehr für das Freie geeignet. Bei Häusern kannst du für die Glasscheiben einfach einen Pixel-Shader hinzufügen, wenn du im Haus bist oder eben das anwenden, was ich einen Satz weiter oben erzählt habe.
Ein Patentrezept findest du für solche Dinge nicht, das dürfte klar sein, aber gute Ansätze gibt es immer. Du musst bestimmen, welche Möglichkeiten dein Spiel überhaupt zulässt. Was nämlich nie vorkommen kann, brauchst du nicht zu berechnen oder abfragen. Jedenfalls würde ich zwischen Indoor und Outdoor unterscheiden, anders wirst du es wohl nicht hinbekommen. Es wäre nicht ratsam zu prüfen, ob dich ein einzelner Regentropfen trifft oder nicht, sondern prüfe lediglich, wie du den Regen aus dem aktuellen Standpunkt wahrnehmen würdest und stelle ihn mit deinen Mitteln dementsprechend dar.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 19 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de