Registriert: Do Mai 23, 2013 11:05 Beiträge: 13
Programmiersprache: Delphi
Hallo Liebe DGL-Community erstmal... ich habe ein kleines Problem welches auch in den tutorials nicht erklärt wird (oder ich habs übersehen).
Also folgendes... Das problem klingt eigentlich ganz simpel(vielleicht ist es das ja auch): ich möche jedesmal wenn ich space drücke eine Kugel erzeugen die dann im 30° winkel verschossen wird und in den raum fliegt und irgendwo weiter weg wieder verschwindet (grenze des raums).
soweit so gut
ich habe also die taste space im onkeydown Ereignis behandelt und will nun meine neue Kugel erzeugen...
jetzt hatte ich zuerst die Idee das ich mir ein Array für alle meine Kugeln baue und jedesmal eine hinzufüge... jedoch fehlt mir hierzu der Datentyp Matrix oder änliches weil ich ja immer die Koordinaten berechnen müsste anstatt die modellmatrix immer eine Einheit in "Blickrichtung" zu verschieben.
also ne neue Idee. Ich dachte hier kann ich das erste mal den Stack sinnvoll benutzen in demm ich jede neue Kugel auf den Stack Pushe und in der RenderProzedur nacheinander abarbeite und wieder in den Stack tue (wäre dann rekursiv) aber dann ist mir aufgefallen das mein Matrixstack dann für alle Zeiten voll mit Kugeln ist und ich ihn für nicht anderees benutzen kann...
es wäre ja relativ simpel wenn ich ne art Datentyp Matrix hätte und die in nem array speichern könnte... oder nen 2. oder 3. Stack eröffnen könnte... hab davon aber leider noch nicht soviel plan
wenn mir irgendjemand ne Idee geben könnte wäre das super
Was hindert dich daran eine eigene Klasse "Kugel" anzulegen die alle nötigen Daten enthält? Vermutlich willst du ja nicht nur die Position speichern sondern auch Dinge wie Velocity (Geschwindigkeit & Richtung), Health, LifeTime, etc. Wenn dir später was weiteres einfällt was du benötigst, kannst du es ganz leicht hinzufügen.
Registriert: Do Mai 23, 2013 11:05 Beiträge: 13
Programmiersprache: Delphi
Also ich hab noch nicht viel Ahnung von OOP... ich hab ja nen type kugel mit allem aber ich möchte halt net immer die neue Position über sinu und phytagoras berechnen.. (wäre eig. kein Problem) aber wäre natürlich eleganter wenn ich irdenwie den Datentyp MATRIX hätte so das ich mit deren drehrichtung nur noch nach vorne gehen muss... wenns nicht geht schreib ich halt fix ne prozedur zur berechnung aber interessieren würde es mich schonmal ob ich nicht nur den vorgegebenen matrixstack hab poder matrizen auch andersweitig speichern/benutzen kann
Also eine Matrix sind ja einfach nur 16 Zahlen Soweit ich weiß haben die DGL-header sogar was dafür, aber das ist einfach nur ein Array wenn ich das richtig im Kopf habe.
Eine Berechnung über Sinus etc. ist nicht notwendig wenn du mit Position + Velocity arbeitest. Beides sind 3D-Vektoren. Einfach in jedem Frame:
Code:
position.x = position.x + deltaTime * velocity.x;
position.y = position.y + deltaTime * velocity.y;
position.z = position.z + deltaTime * velocity.z;
Wenn du dann noch die Velocity genauso jedes Frame modifizierst kriegst du auch leicht Dinge wie eine Wurfparabel hin:
Registriert: Do Mai 23, 2013 11:05 Beiträge: 13
Programmiersprache: Delphi
hmm yo dann mach ich das mal^^ ist ja echt kein ding.. frage mich bloß warum keiner auf die idee gekommen ist nicht nur einen Stack sondern mehrere für modellmatrizen zu machen wär doch ziemlich praktisch und doch eig. auch einfach oder irre ich mich?
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2067
Programmiersprache: C++
Je nach dem was du für ein Delphi hast, hast du doch schon Generics und TList. Ansonsten musst du eben noch mit Pointern hantieren und du hast deinen Stack/Liste.
Registriert: Sa Aug 18, 2007 18:47 Beiträge: 694 Wohnort: Köln
Programmiersprache: Java
Ich nehme mal an, dass das Funktionsprinzip eines Stacksbekannt ist?
Was spricht denn dagegen für jede Kugel eine Matrix zu nutzen? Musst doch nur beim Rendern mittels glMultMatrix die Matrix der jeweiligen Kugel mit der aktuellen ModelView multiplizieren.
Code:
setModelView();
for (anzahl kugel) {
glPushMatrix();
glMultMatrix(kugelmatrix);
kugel.render();
glPopMatrix();
}
_________________ Es werde Licht. glEnable(GL_LIGHTING); Und es ward Licht.
Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"
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.