JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=dc6d4618da73bac14de20985b86d0568Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

3D Objekt drehen und bewegen
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 13.08.2004, 00:04    Titel: 3D Objekt drehen und bewegen Antworten mit Zitat

Wie man Objekte um die 3 einzelnen Achsen dreht, ist einfach. Aber wie dreht man eigentlich ein Objekt um eine beliebige Achse?

Und wenn jetzt ein Objekt eine beliebige Ausrichtung hat: Wie bewegt man das Objekt korrekt "nach vorne"?
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 13.08.2004, 07:35    Titel: Antworten mit Zitat

Mit D3DXMatrixRotationAxis() drehst du um eine selbst definierte Achse. Wenn du D3DXMatrixTranslation() nutzt kannst du das Objekte an eine bestimmte Stelle verschieben, dabei ist egal, wie es orientiert ist.

C.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 13.08.2004, 08:11    Titel: Antworten mit Zitat

Hhmm. Mit D3DXMatrixRotationAxis() hatte ich auch schon rumhantiert. Hab damit aber nichts vernünftiges zustande gekriegt. Ich habs dafür anders hingekriegt.

Wie ist das jetzt mit der Kameraführung. Da gibt es etwas, wa ich da nicht ganz versteh:

D3DXMatrixLookAtLH(&ViewMatrix,
&D3DXVECTOR3(0,0,-10), //Position
&D3DXVECTOR3(0,0,0), // Drehung
&D3DXVECTOR3(0,1,0)); //Neigung

Es gibt bei dieser Funktion 2 Vektoren für eine vollständige Bewegung im Raum. Für ein 3D-Objekt, gibt es aber 3 Achsen: X-,Y- und Z-Achse. Wie kann das sein, dass eine Kamera nur 2 benutzt und wie hab ich das zu verstehen? Ich will zunächst eine Innenansicht von einem freifliegendem Objekt haben und später noch eine Außenansicht einbauen. Aber wie geht das? Bisher hab ich nur schwachsinn fabriziert.
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 13.08.2004, 09:07    Titel: Antworten mit Zitat

Die Parameter sind nicht Drehung und Neigung, sondern LookAt, bzw. WorldUp - schau mal in der Hilfe nach.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 13.08.2004, 09:36    Titel: Antworten mit Zitat

Ok, stimmt. Aber ich hab da trotzdem noch ein kleines Problem. In dem FREECAM beispiel wird nur gezeigt, wie man die Kamera links, rechts um die gesamte Achse dreht. Hoch und runter drehen ist nur begrenzt (man kann nur rauf oder runter schaun). Wie erschafft man denn eine volle Drehung nach oben bzw. nach unten?


// Berechnung der Blickrichtung in der x-z-Ebene
m_vLookAt.x = sinf(m_fRotAngleY) + m_vPosition.x;
m_vLookAt.z = cosf(m_fRotAngleY) + m_vPosition.z;

// Berechnung der Blickhöhe
m_vLookAt.y = sinf(m_fRotAngleX) + m_vPosition.y;


Ich nehme an, dass hier noch etwas rein müsste, aber was?
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
criss
JLI'ler



Anmeldedatum: 15.02.2004
Beiträge: 169
Wohnort: Graz Umgebung
Medaillen: Keine

BeitragVerfasst am: 13.08.2004, 10:26    Titel: Antworten mit Zitat

Im Buch auf Seite 433. (den Teil weglassen)

Ich glaube du willst die Kammera ewig weiterdrehen oder?

Wenn der Rotationswinkel größer als 360° ist wird er wieder auf 0° gesetzt.
_________________
Lebe dein Leben, du kommst nicht lebend wieder rauß. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 13.08.2004, 11:55    Titel: Antworten mit Zitat

Das Problem ist eher die Frage: Wie dreht man denn korrekt?
Denn dass aus 360° dann 0° werden, ist klar.

Ich will jetzt mit den Pfeiltasten die Kamera drehen können. Wenn ich jetzt irgendwie den Drehvektor änder, klappt das einfach nicht. Wie in dem oben genannten Beispiel muss es etwas gehen. Aber das mit sinf und cosf ist mir anscheinend noch zu hoch. Vielleicht kennt jemand die passende Formel um auch die Drehung um die X-Achse klarzumachen
(die oben genannte Formel sorgt nur für eine korrekt Drehung um die Y-Achse).
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
criss
JLI'ler



Anmeldedatum: 15.02.2004
Beiträge: 169
Wohnort: Graz Umgebung
Medaillen: Keine

BeitragVerfasst am: 13.08.2004, 12:02    Titel: Antworten mit Zitat

Drehvektor eher Drehwinkel.

Ein Vektor gibt eine Kraft(oder Bewegung in eine Richtung an)
Ich bin mir jetzt nicht sicher ob Ein Vektor an einer Tangente auftreten kann.

Du musst mir genauer erklären was du mit: Wie dreht man richtig? meinst



edit: Ist nur Pseudocode den musst du noch anpassen

Code:


case PFEILTASTE_UP:       rotationAngle += rotationSpeed;
                                      break;





_________________
Lebe dein Leben, du kommst nicht lebend wieder rauß. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 13.08.2004, 15:52    Titel: Antworten mit Zitat

hier mal ein paar threads zum nachlesen, auch zu deiner frage mit animation:
http://www.jliforum.de/board/viewtopic.php?t=2239
http://www.jliforum.de/board/viewtopic.php?t=2143
http://www.jliforum.de/board/viewtopic.php?t=2570
http://www.jliforum.de/board/viewtopic.php?t=2547

benutz halt selber mal die suche, gerade zur kamera ist echt schon viel besprochen worden...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 13.08.2004, 16:04    Titel: Antworten mit Zitat

Criss, mit Drehvektor mein ich LookAt.

D3DXMatrixLookAtLH(&ViewMatrix,
&D3DXVECTOR3(0,0,-10), //Position
&D3DXVECTOR3(0,0,0), // LookAt
&D3DXVECTOR3(0,1,0)); //WorldUp


Angenommen wir benutzen deinen Pseudocode:
case PFEILTASTE_UP: rotationAngle += rotationSpeed;
break;

Setz das mal um und du wirst sehen, dass sich die Kamera maximal nur nach unten bzw. nach oben neigt. Eine volle Drehung wird da nicht eintreten. Probiers doch mal aus. Es hat was mit Sinus und Cosinusformeln zu tun.
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 13.08.2004, 18:08    Titel: Antworten mit Zitat

das stimmt schon. ist das nicht eh das berühmte 'gimbal lock'? da mußt du irgendwie dran vorbeiarbeiten. wenn du willst das sich der lookat um die position immer weiter dreht (dann steht die kamera ab 90° up/down auf dem kopf), dann würd ich den lookat um die kameraachse drehen, die nach rechts zeigt (kreuzpr. aus UpVector und (lookat-pos)). und zwar relativ, sodass du nicht über die 90° hinauskommst.

in einem von den links wird eh auch besprochen, wie man einen vector um einen punkt drehen kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sören
JLI Master Trainee



Anmeldedatum: 26.07.2002
Beiträge: 647
Wohnort: Bonn
Medaillen: Keine

BeitragVerfasst am: 13.08.2004, 23:39    Titel: Antworten mit Zitat

siehe auch: http://www.jliforum.de/board/viewtopic.php?t=2265&highlight=lock
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 14.08.2004, 08:56    Titel: Antworten mit Zitat

Oh mann. Irgendwie hat mir alles nichts geholfen. Was muss man überhaupt übergeben, wenn man z.B. ne Innenansicht von nem Raumschiff haben will?

Code:

D3DXMatrixLookAtLH(&ViewMatrix,
&D3DXVECTOR3(0,0,-10), //Position
&D3DXVECTOR3(0,0,0), // LookAt
&D3DXVECTOR3(0,1,0)); //WorldUp


1.Position: die Koordinaten vom Raumschiff
2.LookAt: XRotationsachse+YRotationsachse
3.WorldUp: ZRotationsachse

??????

Oder wie berechnet man jetzt so ne Innenansicht?
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chewie
Super JLI'ler



Anmeldedatum: 17.07.2003
Beiträge: 382

Medaillen: Keine

BeitragVerfasst am: 14.08.2004, 15:42    Titel: Antworten mit Zitat

wenn dir das alles nicht geholfen hat, dann würd ich mir mal ein gscheites mathebuch kaufen. oder im inet nachlesen.

is doch klar, wie die kamera vekoren ca. aussehen müssen, aus der sicht des piloten.
pos ist ca. da wo der kopf ist (pos des schiffes + offset)
up ist up vector des schiffes
lookat is lookat des schiffes

allerdings würde man sich wenn man herumschalten kann wahrscheinlich extra ein modell fürs cockpit bauen und das dann vorn an die kamera 'dranpicken'.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 14.08.2004, 16:31    Titel: Antworten mit Zitat

Ich habs hingekriegt. Ich hab zu Hause mehrere Bücher und hab da was zusammengeschmissen. War ja im endeffekt gar nicht so kompliziert. Laughing Ich hab auch gesehen, was diverse Autoren sich zusammengebastelt haben. Meiner Meinung nach teilweise recht umständlich. Kein Wunder,dass ich erstmal wieder lange gebraucht hab um das Prinzip zu verstehen. Ich weiß nicht, warum mir jeder immer mit dem megalangen Quellcode als Tutorial ankam, um mir die Kamera zu erklären.
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum