Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Mai 14, 2024 02:27

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Mai 23, 2013 17:17 
Offline
DGL Member

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 :)



mfg Julian


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 23, 2013 18:30 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
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.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 23, 2013 18:49 
Offline
DGL Member

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

thx im Vorraus


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 23, 2013 19:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
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:
  1. position.x = position.x + deltaTime * velocity.x;
  2. position.y = position.y + deltaTime * velocity.y;
  3. 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:
Code:
  1. velocity.x = velocity.x + deltaTime * gravity.x;
  2. velocity.y = velocity.y + deltaTime * gravity.y;
  3. velocity.z = velocity.z + deltaTime * gravity.z;

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 23, 2013 19:13 
Offline
DGL Member

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?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 23, 2013 21:41 
Offline
Ernährungsberater
Benutzeravatar

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.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mai 24, 2013 14:12 
Offline
DGL Member

Registriert: Do Mai 23, 2013 11:05
Beiträge: 13
Programmiersprache: Delphi
ja aber nicht mit dem praktischen datentyp Matrix wo ich nur einmal drehen muss und dann immer nach vorne schieben


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mai 24, 2013 14:37 
Offline
DGL Member
Benutzeravatar

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:
  1.  
  2. setModelView();
  3. for (anzahl kugel) {
  4. glPushMatrix();
  5. glMultMatrix(kugelmatrix);
  6. kugel.render();
  7. glPopMatrix();
  8. }
  9.  

_________________
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"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.029s | 19 Queries | GZIP : On ]