hallo DGL Forum! (bin ein neuer und hoffe, dass ihr nachsicht mit mir habt, weil ich kein richtiger OGL Programmierer bin, sondern mit PureData und Gem arbeite, und deshalb in vieler hinsicht wie der ox vorm tor stehe...)
zu meinem problem: Ich brauche für Partikel eine Look-At funktion, (Billboarding genannt, wie ich beim durchstöbern herausgefunden hab) Ich habe die rotation der Camera definiert durch 3 Einheitsvectoren , FRONT, RIGHT UND UP sowie die Weltcoordinaten meines Partikels. Jetzt möchte ich die rotation meiner Partikel nach dieser 3x3 matrix ausrichten, so dass sie immer zur camera schauen. Ich weiss aber nicht wie ich die Welt Matrix der Objekte setzen kann, und auch nicht wo in dieser 4x4 matrix die 9 rotationscoordinaten reingehören.
Die muss man dann wahrscheinlich noch invertieren, weil beim Billboarding die Rotation rückgängig gemacht werden soll. Wenns keine Translation gibt, ist die einfach = 0. Hab Billboarding zwar selber noch nie benutzt, aber so sollte es aussehen:
Code:
var Matrix: array[0..3] of array[0..3] of single; begin glPushMatrix; Matrix:= [ [ Right.x, Right.y, Right.z, 0], [ Up.x, Up.y, Up.z, 0], [ Front.x, Front.y, Front.z, 0], [ 0, 0, 0, 1] ]; InvertMatrix(Matrix); glMultMatrixf(@Matrix);
//Billboards zeichnen;
glPopMatrix; end;
Also, das ist schon alles, was ich dazu weiß. Bitte erschieß mich nicht, wenns nicht geht
ok ich hab beim durchsuchen der fabelhaften wiki hier rausgefunden, dass ich die modelview matrix mit glLoadMarix setzen kann, und dass die reihenfolge der werte in der matrix folgende ist http://wiki.delphigl.com/index.php/Matr ... nGL-Matrix +- -+ | 0 4 8 12 | | 1 5 9 13 | | 2 6 10 14 | | 3 7 11 15 | +- -+
wobei (dass stand da nicht, aber ich sag mal...) 0 = front X 1 = front Y 2 = front Z 3 = 0 4 = right X 5 = right Y 6 = right Z 7 = 0 8 = up X 9 = up Y 10 = up Z 11 = 0 12 = pos X 13 = pos Y 14 = pos Z 15 = 1
Zuletzt geändert von sonsofsol am Do Mai 06, 2010 17:03, insgesamt 1-mal geändert.
hi sharkman, danke für die schnelle antwort, werd gleich lospatchen. Pd ist so eine grafische programierumgebung mit so kistchen und strippen...aber da kann amn auch openGL machen...anscheinend...ich schick dann nen screenshot.
Sollen/Dürfen deine Partikel immer waagerecht zur Kamera ausgerichtet sein? (Also keine 2D-Rotation auf der Bildebene) Wenn das der Fall ist (die meisten Partikel sind rund => Rotation egal) könntest du einfach statt Dreiecken bzw. Quads einfach GL_POINTS rendern. Statt vier Punkten pro Partikel wird da nur ein einziger Punkt sowie eine PointSize benötigt. Deine Grafikkarte generiert dann daraus zur Laufzeit ein Quad, auf Wunsch auch mit Texturkoordinaten.
@ Coolcat danke für den tip mit den Points. aber ich suche eigentlich nach einer möglichkeit, die für alle Arten von objekten funktioniert, weil ich die selbe funktion auch für .obj's und texte brauche, ich werds für die partikel probieren. nochmals vielen dank euch beiden.
habs geschaft. vielen dank für eure tipps... es hat gereicht mit glpuhsmatrixf die rotationen in der modelviewmatrix mit 1 0 0 0 1 0 0 0 1 zu überschreiben.
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.