PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Partikelsysteme mit Tao-Framework


Gast
2008-06-30, 15:42:56
hey leute,
ich bin gerade mit nem kumpel an einem 4gewinnt in 3d mittels taoframework
in c# und als nettes finishing wollten wir ein partikelsystem einbauen
welches sich entweder vor dem erscheinen des spielsteins auftaucht oder
die 4 steine hervorhebt mit denen man gewonnen hat
aber irgendwie kann ich die partikelsysteme die ich gegooglet hab nicht auf das tao framework umlegen habt ihr ne idee wo ich nette tuts finde?
mfg

ESAD
2008-06-30, 21:11:02
lol ich hätt dacht was zu partikel systemen steht eh in deinem buch?

Gast
2008-06-30, 21:45:17
wie schon gesagt c++ code auf tao framework umlegen is eine sache
das es funktioniert is ne andere darum frag ich ob jemand schon erfahrung oder ein tut hat - aber bis do. find ich vl. was anderes.....
mfg

anakin87
2008-07-05, 10:39:57
hey leute,
jetzt hab ich endlich den weg zur registrierung gefunden ;D
ja nun zum problem ich hab jetzt ein partikelsystem von c auf c# mit tao framework umlegen können nur es bewegt sich nicht bzw. stellt "nur" das schwarze fenster dar.... per zufall hab ich heraufgefunden das sich ein neuer
frame nach einem event aufbaut (mausklick oder das fänster verändern größe/position) und dann sieht man erste partikel
das problem sollte ja eigentlich in der display oder anders halt in der draw- methode sein

static void Display()
{
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); //buffer löschen
Gl.glLoadIdentity();
Gl.glTranslatef(-1.5f, 0.0f, -6.0f);
// Gl.glRotatef(50.0f, 1.0f, 0.0f, 0.0f);
/*DEBUG zwegs Darstellung
Gl.glTranslatef(-1.5f, 0.0f, -6.0f);
Gl.glBegin(Gl.GL_POLYGON);
Gl.glColor3f(0.7f,0.7f, 1.0f);
Gl.glVertex3f(0.0f, 1.0f, 0.0f);
Gl.glVertex3f(1.0f, -1.0f, 0.0f);
Gl.glVertex3f(-1.0f, -1.0f, 0.0f);
Gl.glEnd();
*/
// Gl.glBindTexture(Gl.GL_TEXTURE_2D, ParticleTexture.texture[0]); //Texturen müssen noch geladen werden


for(int i=0;i<countParticle;i++)
{

if (particle[i].ypos < 0.0) particle[i].lifetime = 0.0f;
if ((particle[i].active == true) && (particle[i].lifetime > 0.0))
{

Gl.glBegin(Gl.GL_TRIANGLE_STRIP); //Laut tut gehört Gl.GL_TRIANGLE_STRIP das problem ist das sich die Partikel nicht darstellen lassen aber wenn ich das fenster "resize" dann bewegt es sich kurz
Gl.glColor3f(particle[i].r, particle[i].g, particle[i].b);
Gl.glTexCoord2f(0.0f, 1.0f); Gl.glVertex3f(particle[i].xpos + 0.002f, particle[i].ypos + 0.002f, particle[i].zpos + 0.0f); //top right
Gl.glTexCoord2f(0.0f, 0.0f); Gl.glVertex3f(particle[i].xpos - 0.002f, particle[i].ypos + 0.002f, particle[i].zpos + 0.0f); // top left
Gl.glTexCoord2f(1.0f, 1.0f); Gl.glVertex3f(particle[i].xpos + 0.002f, particle[i].ypos - 0.002f, particle[i].zpos + 0.0f); // bottom right
Gl.glTexCoord2f(1.0f, 0.0f); Gl.glVertex3f(particle[i].xpos - 0.002f, particle[i].ypos - 0.002f, particle[i].zpos + 0.0f); // bottom left
Gl.glEnd();

Gl.glFlush();
}
else
{
CreateParticle(i);
}
}
EvolveParticle();



Glut.glutSwapBuffers();
}

hab ich was vergessen dass es startet oder wie?
weil für ne rotation oder ähnliches benötige ich auch nicht mehr
mfg

del_4901
2008-07-05, 13:41:00
Tja bewegen wird sich's nicht, weil du du es einfach nicht weiterbewegst. Tja und schwarz ... vllt. keine Textur drauf? Wenn es nur schwarze Ränder sind, dann würde ich mal Alphablending anschalten.

anakin87
2008-07-05, 14:15:46
hm ja weiterbewegen is gut aber ich hab keine idee wie....
es bewegt sich ja nur dann wenn ich das fenster verändere von der
größe oder position und dann sieht man vereinzelt auch die partikel
aber das dauert halt nur ewig lang wenn ich pro frame das bild bewegen muss.... da gibts sicher ein command aber ich hab keine idee was für eins...:confused:
mfg

del_4901
2008-07-05, 14:56:30
hm ja weiterbewegen is gut aber ich hab keine idee wie....
es bewegt sich ja nur dann wenn ich das fenster verändere von der
größe oder position und dann sieht man vereinzelt auch die partikel
aber das dauert halt nur ewig lang wenn ich pro frame das bild bewegen muss.... da gibts sicher ein command aber ich hab keine idee was für eins...:confused:
mfg
k.A wie TAO genau funktioniert, aber es gibt mit Sicherheit eine Funktionalität welche dir periodische Updates ermöglicht. Da gibs dann auch gleich die verstrichene Zeit mit dazu.

anakin87
2008-07-05, 15:19:27
wieso einfach wenns kompliziert geht :biggrin:
das command glutPostRedisplay löste das problem ganz einfach
jetzt braucht es nur noch ne schöne kugelfrom.....
und thx für den "beistand" :wink:

del_4901
2008-07-05, 15:21:52
wieso einfach wenns kompliziert geht :biggrin:
das command glutPostRedisplay löste das problem ganz einfach
jetzt braucht es nur noch ne schöne kugelfrom.....
und thx für den "beistand" :wink:
Patikel macht man nicht aus Kugeln, auch wenn es naheliegend ist. Wenn es sich einrichten lässt nimmst du am besten PointSprites, und machst da ne schöne Textur drauf.

anakin87
2008-07-05, 15:44:15
ne so war das nicht gemeint ich will das system wie ein feuerwerk explodieren lassen ==> partikel in kugelformation so meinte ich das
ob ich in dem zeitrahmen noch ne textur draufbringe weiß ich nicht
aber die idee an und für sich is gut zur zeit verwende ich triangle_stripes
aber die PointSpirtes test ich gleich mal...
mfg

anakin87
2008-07-06, 13:49:57
man die problemen nehmen kein ende
jetzt hab ich die partikelzahl von 400 auf 4000 erhöht und das ganze hat sich in ne dia-show
verwandelt - kennt sich einer aus mit dem tao-framework? weil an meinem notebook liegts
sicher nicht weil crycis läuft flüssig und ich denk mal da sind ein paar partikel mehr dabei....
auch lass ich das GlutPostRedisply(DrawScreen); nur über einen timer laufen um performance zu sparen aber die das programm braucht einen ganzen cpu-kern von den 2x2.4Ghz die ich hab
da muss doch mehr gehen von den frames oder?
mfg

Coda
2008-07-06, 14:07:32
Immediate Mode ist nunmal sehr langsam. Wenn du gescheite Performance willst musst du wohl oder übel einen dynamisches VBO verwenden.

del_4901
2008-07-06, 15:17:51
Wenn er das wie da oben macht hat er auch zu kleine Batches, das ist auch ned schön, deswegen hab ich ja schon auf PointSprites gedrängt, damit er das vllt. sellbst auflöst.

anakin87
2008-07-06, 16:12:17
wie schaut das aus wenn ich ein primitiv mit pointsprites machen will?
weil für vorher hab ich 4vertex benötigt um ein partikel-primitiv zu zeichnen

glBegin(GL_TRIANGLE_STRIP);
Gl.glColor3f(particle[i].r, particle[i].g, particle[i].b);
Gl.glVertex3f(particle[i].xpos + 0.002f, particle[i].ypos + 0.002f, particle[i].zpos + 0.0f);
Gl.glVertex3f(particle[i].xpos - 0.002f, particle[i].ypos + 0.002f, particle[i].zpos + 0.0f);
Gl.glVertex3f(particle[i].xpos - 0.002f, particle[i].ypos - 0.002f, particle[i].zpos + 0.0f);
Gl.glVertex3f(particle[i].xpos + 0.002f, particle[i].ypos - 0.002f, particle[i].zpos + 0.0f);
GlEnd();

del_4901
2008-07-06, 16:39:34
Wie das mit TAO (GL) ausschaut weiß ich ned. Auf alle Fälle musst du nur noch den Mittelpunkt übergeben. Und irgendwo gibt man noch an wie groß das Sprite sein soll. Wenn man das so hat, muss man die Punkte auch nicht einzeln transformieren, sondern kann eine komplette Liste mit Pointsprites direkt zur GPU hochblasen. Entweder in einem dynamic VBO oder mit drawArrayLists.

Die PointSprites sind dann immer gleich groß und auch immer in Richtung der Kamera orientiert.

http://www.typhoonlabs.com/tutorials/gles/Tutorial6.pdf

anakin87
2008-07-06, 17:56:42
thx muss ich mal bei gelegenheit austesten
ich bin heil froh das der prototype fertig ist vom projekt, mal sehen was der lektor dazu sagt.
hab wegen der leistung vom tao-framework herumgegoogelt und da beschweren sich viele
über die mangelnde leistung bei hohen polygonzahlen - das war mein letztes projekt damit
ab jetzt verwend ich opengl und c++ da sollt es dann weniger probleme geben.
aber das 3d-fieber hat mich schon erwischt - jetzt will ich im opengl bereich weitermachen
by the way @ alphaTier machst du 3d-entwicklung beruflich oder privat
mfg

del_4901
2008-07-06, 18:01:49
Beides

Privat nutze ich übrigens C# mit XNA. Also an an der Sprache liegt es mit Sicherheit nicht, das es "langsam" ist. Das würde auch mit TAO schneller gehen, wenn du diese ganzen intermediate Sachen über Bord wirfst.

Hier schau dir dazu mal das hier an: http://developer.nvidia.com/docs/IO/8230/BatchBatchBatch.pdf

anakin87
2008-07-06, 18:22:57
hm da kann ich ja die ganze Glut-lib wegschmeißen..... die ich aber leider verwenden muss, darum tao weil mein partner und ich c# beibehalten wollten aber opengl bedinnung vom lektor is.....
xna ist dx-abhängig? schätz ich mal...

del_4901
2008-07-06, 18:27:10
XNA ist an DirectX angelehnt, ja. Lauft demzufloge auch nur auf Windows, Xbox360 und neuerdings auch auf dem Zune. Aber es würde auch niemanden daran hindern XNA und TAO einzusetzen, die axiom Engine macht das so. (Jeh nachdem was der Benutzer gern haben möchte)

anakin87
2008-07-06, 19:24:43
naja mal sehn welche technologien die lektoren als nächstes wollen^^
nochmals thx for help