Registriert: Mo Nov 24, 2003 21:28 Beiträge: 28 Wohnort: Kiel
Moin!
Ich hab mir das Tutorial von Lithander über Partikel-System durchgelesen und wollte das auch gleich selbst ausprobieren. Hab's auch gleich in C++ geschrieben (bzw versucht es so einigermaßen zu übersetzen). Ich hab noch nicht so viel Erfahrung in OpenGL und finde jetzt meinen Fehler nicht. Es könnte damit zusammenhängen das ich die Zufallszahlen-Funktion nicht korrekt benutze. Aber das is nur eine Vermutung.
Die Quads werden zwar alle gezeichnet, aber gehäuft auf ungefähr 9 Stellen entlang der x-Achse. Die "Flammen" bewegen sich immer nur nach links oben, und alle mit der gleichen Geschwindigkeit.
Zwei Screenshots davon findet ihr hier und hier.
Der Sourcecode ist hier CPP-Datei bzw. hier hh-Datei.
Diese Frage richtet sich natürlich besonders an Leute die sich mit Partikelsystemen auskennen und denen auch C++ vertraut ist (ich progge nämlich erst seit 3 Monaten in C++). Ich danke euch jetzt schon mal für eure Hife!
Registriert: Mo Nov 24, 2003 21:28 Beiträge: 28 Wohnort: Kiel
hey, klasse. Ich hab's gelöst Lag wirklich an meiner Verwendung des rand()-Befehls. Jetzt sieht's viel besser aus. Die Partikel sind nich mehr alle auf einem Haufen und bewegen sich wenigstens einigermassen zufällig (obwohl immer noch wie Feuer aussieht)
Allerdings fällt der ganze Haufen Partikel nach ca. einer halben Sekunde in sich zusammen und baut sich ganz neu auf. Komisch
dasliegt daran, dass deine rate in der pixel erzeugt werden zu hoch ist für deine maximale partikelzahl, als entweder weniger/seltener erzeugen oder mehr partikel insgesammt zulassenoder früher destroyen
Registriert: Mo Nov 24, 2003 21:28 Beiträge: 28 Wohnort: Kiel
hast recht, danke. Jetzt sieht's wieder besser aus. Das einzige "echte" Problem was jetzt noch bleibt ist das die Partikel wie ihre Texture schwarz-weiss sind. Irgendwie wird die Farbe, die in dem Partikel-Struct gespeichert ist nicht auf die Textur angewendet.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Sehe grade das er bereits ein glColo4f im Code drin hat. Benutzt du evtl. die OpenGL-Beleuchtung? Wenn ja, dann musst du erst via glEnable(GL_COLOR_MATERIAL) das Color-Tracking von OpenGL aktivieren, damit die Materialfarbe aus den glColor-Aufrufen übernommen wird.
Registriert: Mo Nov 24, 2003 21:28 Beiträge: 28 Wohnort: Kiel
Danke für den Tip. Ich benutze zwar kein Beleuchtung, aber jetzt geht´s trotzdem.
Aber damit die Partikel korrekt ausgeblendet werden, muss ich ja Blending benutzen. Ich hab zwar schon mit einigen Werten rumgespielt, aber das Ergebnis sieht nie so wirklich toll aus. Entweder die Farbgebung ist viel zu dunkel oder es wird nicht korrekt geblendet.
Im Moment benutze ich "glBlendFunc(GL_SRC_ALPHA,GL_ONE);", aber da sind die Farben viel zu dunkel.
Hat einer einen Tip welche Blend-Func ich nehmen sollte?
Also wenn du den Alpha-Wert deiner Partikel nutzen willst empfehle ich
gl_src_alpha, gl_one_minus_src_alpha
sollte, wenn ich mich nicht ganz irre einer echten Transparenz am nächsten kommen.... (sollte Echter Transparenz entsprechen *ggg*)
_________________ Es sind immer die guten, welche zu früh von uns gehen müssen... Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Für Rauch usw.. sieht auch
glBlendFunc(gl_one_minus_dst_color,gl_one) gut aus. Da hat man zwar keinen Alpha Wert mit drin, aber die schwarzen Stellen sind dann eben transparent. Bei diesem Blendmodi kommt es wegen 1-dst_color nicht zu einer Übersättigung im Gegensatz zu reinem additiven Blenden.
Registriert: Mo Nov 24, 2003 21:28 Beiträge: 28 Wohnort: Kiel
Nochmal ne Frage zu den Partikeln und deren Blending. Ich beutze jetzt
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
Bringt bisher die besten Ergebnisse, die Partikel werden auch ausgeblendet, aber wie kann ich OpenGL sagen daß der Hintergrund durchscheinen soll?
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
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.