Mose Handling - Managed DirectX



  • danke für die Antwort erstmal,

    Es geht mir hauptsächlich darum:

    Das Richtingsobjekt ist ja eigentlich ein eigenes Object, und dieses soll sich ja immer bei der Kamera bewegen, oder um die Kamera rum.

    Wenn ich jetzt die Mausbewegung (Relativ vom letzten Frame) auf die Richtung übertrage, also zum beispiel nur auf der X Achse, dann bewegt sich das Richtungs objekt von mir weg. Also dreh ich mich nicht sondern ich schau nur nach rechts/links weiter in die ferne.

    Und diese Formel/berechnung brauch ich.



  • also irgendwie versteh ich das ganze glaube ich nicht richtig. meiner meinung nach funktioniert ein einfacher egoshooter folgendermaßen:
    du hast ein spielerobjekt, welches du nicht siehst (oder nur ein gewehr oder sowas). das objekt ist zb einfachheitshalber eine box. sie hat genau die gleiche position wie die kameraposition (siehe funktion aus meinem letzten post). drückst du zb w oder a, wird das objekt nach vorne oder links verschoben (siehe folgende funktion: D3DXMatrixTranslation). dementsprechend musst du auch die kameraposition und den punkt, wo die kamera hinschaut ändern.
    bewegst du die maus nach rechts, sollte sich der spieler, also das spielerobjekt (unsere box) und die kamera drehen - stichwort rotation. wenn man davon ausgeht, dass deine welt in y-richtung nach oben zeigt, wäre es zb folgende funktion: D3DXMatrixRotationY. hierbei ist zu beachten, dass bei der kamera nur der punkt, an den die kamera hinguckt, rotiert, also angepasst werden muss. die box sollte natürlich auch rotiert werden.

    also ganz allgemein, such dir tutorials zum thema translation, rotation und kamera an.



  • also tut´s und bücher hab ich, nur steht zwar alles über die ganzen methoden wie Projection Matrix, World und View Matrix, aber nichts darüber wie das gehandhabt wird mit sonem Shooter Mouse Handling.

    Ich hab das probiert mit den Methoden, aber irgentwie stell ich mich warscheinlich nur dumm an 🙄



  • Ich hab das probiert mit den Methoden, aber irgentwie stell ich mich warscheinlich nur dumm an 🙄

    Kein Problem, aller Anfang ist schwer 🙂

    ..dann zeig doch mal, was Du schon hast und wo Du nicht weiterkommst, dann finden sich hier bestimmt auch einige, die Dir auf die Sprünge helfen 😉



  • hab ich erwähnt das ich C++/CLI programmiere?



  • Lern lieber erst noch etwas Mathematik. Wenn du es noch nicht schaffst die Kamera auszurichten und dich vorwaerst zu bewegen, dann scheiterst du bei Kollisionsabrage o.ae. sowieso. f'`8k

    Autocogito

    Gruß, TGGC (Das kommt gut)



  • Also,

    die Methode der Kamera:

    public: void SetupCamera(){
            gDevice->Transform->Projection = Matrix::PerspectiveFovLH(Math::PI/4, this->Width/this->Height, 1.0, 500.0);
    
            gDevice->Transform->View = Matrix::LookAtLH(Vector3(Pos_X, Pos_Y, Pos_Z  ),   /*Position*/
                                                        Vector3(Look_X, Look_Y, Look_Z),  /*Richtung*/
                                                        Vector3(0.0, 1.0, 0.0)            /*Oben*/
                                                        );
    }
    

    und die Mausabfrage:

    public: void TestMouseMove(){
    	mDevice->Acquire();
    	mState = mDevice->CurrentMouseState;
    	Look_X += mState->X/16.0000;
    	Look_Y -= mState->Y/16.0000;
    	Look_Z += mState->Z/80.0000;
    }
    

    Wenn ich jetzt die Maus bewege, bewege ich nur das Richtungs objekt an irgenteine Position und nicht um die Kamera rum.
    Die Methode

    Matrix::RotateX(angle);
    

    dreht zwar die Kamera, aber so das man nix mehr erkennt.



  • wegen "TGGC":

    jaa... Mathe war noch nie so ganz mein ding, ich brauch ja nur die Formel das sich das Object um die Kamera dreht...



  • Ich für meinen Teil habe noch nicht ganz durchschaut, was Du genau machst..

    Wenn Du die Maus abfragst und die LookAt Werte änderst, musst Du danach natürlich die Kamera auch aktualisieren, sonst ändert sich ja nichts (wobei aus Deinem Posting meiner Meinung nach nicht herauskommt, ob Du das tust oder nicht). Also rufst Du deine

    gDevice->Transform->View = Matrix::LookAtLH(Vector3(Pos_X, Pos_Y, Pos_Z  ),   /*Position*/
                                                        Vector3(Look_X, Look_Y, Look_Z),  /*Richtung*/
                                                        Vector3(0.0, 1.0, 0.0)            /*Oben*/
                                                        );
    

    Funktion nochmal nach der TestMouseMove() auf.
    So, und was meinst du genau mit "Richtungs objekt"? Ist das der Vektor, der die Kamera-LookAt Werte enthält oder Deine "Spielerbox"?



  • Die Funktionen werden bei jedem Frame aufgerufen, also immer kamera setzen und immer Maus Testen...

    Den Ganzen Source kann ich net reinstellen, des sind mehrere hundert zeilen schon.

    und richtung ist halt die richtung, also der zweite vector..


Anmelden zum Antworten