3D Wellen darstellen, Performance...
-
Hi,
Ich versuch mich im Moment an 3D-Wellendarstellungen, hab das jetzt alles mit OpenGL hinbekommen nur jetzt hab ich ganz einfach mal wieder riesige Performance Probleme... Im Moment stelle ich die Wellen als "2D"-Kreise dar, die in der (x,z)-Ebene liegen und bei denen ich somit nur die y-Werte ändere, um Berge und Täler darzustellen.
Hier mein Code:for(xsin=0;xsin<0.8f;xsin+=0.001) //Welle bis 0.4m zeichnen { ysin=0.01*sin(150*(t-(xsin-0.01))); //Hier wird die Höhe der Welle und somit des "Wellen"-Kreises berechnet, der dann einen Teilring der Welle formt //t wird alle 20ms verändert... An Animation ist im Moment aber nicht zu denken, da es ruckelt wie Sau r=xsin; //Radius if(ysin>=0.005) //Nur Wellenberge zeichnen, spart gut die Hälfte der Kreise { for(alpha=0;alpha<=(0.5*Pi);alpha+=0.001) //Kreis zeichnen, in der Höhe ysin, was dem y-Wert der Welle an der Stelle xsin entspricht { cz=r*sin(alpha); cx=r*cos(alpha); glVertex3f(cx,ysin,cz); //Koordinaten an denen der Punkt gesetzt werden soll } } }
Habs jetzt mal durchgerechnet, das sind 2370 Schleifendurchläufe mit folgenden Abstrichen:
- Es werden nur Wellenberge gezeichnet
- Und nur Halbkreise (eigt. nur 1/4 Kreise, der andere 1/4 Kreis lässt sich ja dann ohne Winkelfkt. ausrechnen, also ohne erneuten Schleifendurchlauf)Das hier scheint allerdings ein ziemlich schlechter Weg zu sein, obwohl das bisher der einzige war, der mir auf Anhieb eingefallen ist... Also, wie macht man das "richtig"?
-
-
Das ist ganz klar eine Aufgabe für einen VertexShader. Wesentlich performanter!
-
ich hab irgendwo gelesen, dass ati/amd eine gpgpu als dsp zu missbrauchen und
haben dabei 3D-Wellen miteinander interferieren lassen und beachtliche Resultate
erzielt.http://hardware.slashdot.org/article.pl?sid=04/09/03/158210
http://episteme.arstechnica.com/eve/forums/a/tpc/f/174096756/m/981002439731/inc/1
http://www.gpgpu.org
-
Verstehe irgendwie grade nicht, wie mir das bei meinem Problem weiterhelfen kann... Und mit VertexShader hab ich noch gar nix gemacht!
-
http://www.joachimrohde.com/cms/xoops/modules/articles/article.php?id=57
Dort wird zufälligerweise anhand eines Welleneffekts die Shaderprogrammierung mit Cg und OpenGL erläutert.