[C/C++] [DirectX] Raumschiffsteuerung mit künstlicher Intelligenz

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Pac_-_man, 3. Mai 2007 .

  1. 3. Mai 2007
    [DirectX] Raumschiffsteuerung mit künstlicher Intelligenz

    Hi!

    Also ich sitz hier mal wieder an meinem 3D-Game und bin am Verzweifeln bei dem Versuch die Gegner von alleine Fliegen zu lassen. Ich habe erstmal einen Gegner in der 3D-Welt und habe ihm Wegpunkte gegeben. Er fliegt auch wunderbar zu den Dingern hin und so, aber mein Hauptproblem ist die Rotation um die 3 Achsen vernünftig zu berechnen. Ich mache das über die normalen Winkelfunktionen, aber das Prolem ist, das wenn ich den Flieger um die eine Achse rotieren lasse, rotieren die anderen Achsen mit. Also wenn ich ihn z.B. 90° um die Y-Achse rotieren lasse und ihn danach um z.B. um die X-Achse rotieren lassen will, muss ich ihn stattdessen um die Z-Achse rotieren lassen, weil sich das gesamte Koordinatensystem mit gedreht hat. Bei Winkel wie 90° ist das ja noch einigermaßen leicht zu berücksichtigen, aber was ist mit Winkeln wie 79°? oder 123°? Ich hoffe ich konnte mein Problem vernünftig ausdrücken. E geht also darum ein Mesh richtig auszurichten (so das es auf den Wegpunkt zeigt.

    Vlt ist das auch garnicht der richtige Weg, deshalb möchte ich auch gleich nachfragen ob jemand ne andere Lösung dafür hat... Kp was, vlt irgendwie das das Mesh einen Vektor hat, nach dem es sich ausrichtet und man bewegt dann halt immer den Vektor vor dem Mesh oder sowas..

    Bei diesem Problem können mir wahrscheinlich nur Leute helfen, die selber schonmal Meshes in 3D-Welten bewegt haben lassen... Bin für jede Hilfe dankbar!!

    MFG
    Pacman
     
  2. 3. Mai 2007
    AW: [DirectX] Raumschiffsteuerung mit künstlicher Intelligenz

    ps:
    ai ist lustig (auch wenn deins noch kein ai ist), mach mich atm auch dran einen schusswechsel in 2d zwischen 2 personen ablaufen zu lassen
     
  3. 3. Mai 2007
    AW: [DirectX] Raumschiffsteuerung mit künstlicher Intelligenz

    Naja, in 2D stell ich mir das noch garnicht sooo schwer vor... Da hat man ja nur zwei Koordinaten... Daran hatte ich auch schon gedacht.. Also die Flieger alle in einer Höhe fliegen zu lassen, so das ich im Prinzip nur mit der X und Z Koordinate arbeiten muss... Aber wenn das Problem so viele haben, gibts da nicht irgendne einigermaßen ausreichende, möglichst leicht realisierbare Lösung? Das Problem ist auch das wir Matrizenoperationen im Matheunterricht erst nächstes Jahr machen... von daher kapier ich eh noch nicht ganz alles was da mit den Matrixen passiert^^

    MFG
    Pacman
     
  4. 4. Mai 2007
    AW: [DirectX] Raumschiffsteuerung mit künstlicher Intelligenz

    dann zeig mir doch mal deine urmatrix (en) und deine daraus resultierenden formeln.

    ps:
    ai ist nirgends einfach, weder 2d noch 3d, beides hartest brot.
    Java Game HEXI
    an dem ding hat nen prof 2 jahre glaub ich gebastelt (nen prof...)
     
  5. 4. Mai 2007
    AW: [DirectX] Raumschiffsteuerung mit künstlicher Intelligenz

    puuhh... du entmutigst mich^^ Also so werden mein(e) Raumschiff(e) gerendert:

    Code:
     D3DXMATRIX TransMatrix;
     D3DXMATRIX RotMatrix;
     D3DXMATRIX RotMatrixX, RotMatrixY, RotMatrixZ;
     D3DXMATRIX WorldMatrix;
    
     // Rotationsmatrizen anlegen
     D3DXMatrixRotationX(&RotMatrixX, m_RotX);
     D3DXMatrixRotationY(&RotMatrixY, m_RotY);
     D3DXMatrixRotationZ(&RotMatrixZ, m_RotZ);
    
     D3DXMatrixIdentity(&RotMatrix);
    
     // und miteinander multiplizieren
     D3DXMatrixMultiply(&RotMatrix, &RotMatrix, &RotMatrixX);
     D3DXMatrixMultiply(&RotMatrix, &RotMatrix, &RotMatrixY);
     D3DXMatrixMultiply(&RotMatrix, &RotMatrix, &RotMatrixZ);
    
    
     // Transformations und Rotationsmatrix zur Weltmatrix zusammenfassen
     D3DXMatrixMultiply(&WorldMatrix, &RotMatrix, &TransMatrix);
    
     D3DXMatrixTranslation(&TransMatrix, m_vPosition.x, m_vPosition.y, m_vPosition.z);
    
     D3DXMatrixMultiply(&WorldMatrix, &RotMatrix, &TransMatrix);
    
     m_lpD3DDevice->SetTransform(D3DTS_WORLD, &WorldMatrix);
    
    Was ich nicht weiß ist, was beim multiplizieren der Matrix passiert... Ich weiß nur das es gemacht werden muss^^
    Naja, so hab ich dann schonmal den Winkel berechnet, um den sich der Flieger um die Y-Achse dreht, dass er auf den Weg-Punkt zeigt:

    Code:
    m_RotY = atan((m_vWP[m_WPi].z - m_vPosition.z) / (m_vWP[m_WPi].x - m_vPosition.x));
    
    Nur wenn ich jetzt halt den Flieger um einen bestimmten Winkel drehe, drehen sich halt die X und die Z-Achse mit und das ist ein verdammtes Problem^^ Weil wenn ich ihn jetzt noch z.B. etwas mit der Nase nach unten oder nach oben neigen will, dreht er sich total merkwürdig, weil halt die Achsen verschoben sind... und ich suche halt noch ne Lösung, die Neigung optimal berechnen zu können...
     
  6. 5. Mai 2007
    AW: [DirectX] Raumschiffsteuerung mit künstlicher Intelligenz

    das sagt mir jetzt aber sehr viel

    mit was für infos fütterst du das ding, mach mal nen bsp

    schonmal überlegt die matritzen per hand aufzuziehen
     
  7. 5. Mai 2007
    AW: [DirectX] Raumschiffsteuerung mit künstlicher Intelligenz

    Naja, also m_RotY beinhaltet den Winkel um die Y-Achse. Sry das ich vergessen hab das näher zu erläutern^^ Hab da irgendwie nicht dran gedacht... Hab Dir mal ein Bild gemalt, das sollte die Rechnung erklären...

    Download offline!

    Diese Funktion wird halt in jdem Schleifen Durchlauf aufgerufen, sodass das Raumschiff immer enau auf den Wegpunkt gerichtet ist...
     
  8. 5. Mai 2007
    AW: [DirectX] Raumschiffsteuerung mit künstlicher Intelligenz

    also die berechnung stimmt.

    am besten sagste mir mal welche infos du gegeben hast und was du mit denen machen willst, dann erstell ich dir ne formel.
     
  9. 7. Mai 2007
    AW: [DirectX] Raumschiffsteuerung mit künstlicher Intelligenz

    Naja, also viel mehr infos hab ich ja nicht gegeben^^ Ich brauch ja auch eigentlich nicht mehr... m_vPosition ist ein Vektor der die X, Y und Z-Koordinate des Schiffes enthält und m_vWP ist ein Vekor der die Koordinaten des Wegpunktes enthält. Mehr braucht man ja nicht... Nun muss man halt irgendwie ne Formel aufstellen, das bei der Rotation um die X- und Z-Achse die Drehung um die Y-Koordinate berücksichtigt wird... Das ist schon n bisschen schwerer... Wüsste jetzt noch nicht genau wie ich daran gehen sollte... Wenn Du das hinkriegst wäre echt klasse! ich werds auch weiterhin versuchen... will daran ja jetzt nicht scheitern...
     
  10. 7. Mai 2007
    AW: [DirectX] Raumschiffsteuerung mit künstlicher Intelligenz

    mit ziel xy und end xy kann ich nicht viel anfangen, da ich keine schrittweite habe und auch sonst keine 2 punkte die das schiff an sich aufspannen (richtung)

    schau dir mal polarkoordinaten an, damit hab ich r90 schon geholfen, bei nem gta1/2 like dingens.
     
  11. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.