Bestimmten Punkt einer Textur zum Bildschirmmittelpunkt verschieben



  • Hey!

    Der Titel sagt eigentlich schon alles.
    Ich habe zwei Dreiecke als TRIANGLELIST und eine große Textur darüber. Wenn ich irgendwo auf die Textur klicke, soll sich der Punkt variabel schnell zum
    Bildschirmmittelpunkt bewegen. Ich arbeite mit DirectX und muss ja eigentlich nur die WORLD Matrix translieren, aber wieviel? Wie rechne ich mir das aus? (Man sieht alles von oben, die Tiefe spielt keine Rolle. Wie bei Diablo2)

    MfG



  • Man sieht alles von oben, die Tiefe spielt keine Rolle

    die tiefe spielt schon eine rolle:
    je weiter der punkt entfernt ist, desto weiter musst du verschieben - abhaengig vom fov der projektionsmatrix.
    die richtung kannst du den basisvektoren der transformationsmatrix entnehmen.



  • Habe NULL; Plan davon.



  • es existiert jeweils eine matrix die ein untransformiertes objekt ("objectspace") in den 3d-raum ("worldspace") transformiert, und eine die vom worldspace in den (unprojezierten) cameraspace transformiert.
    die ersten beiden basisvektoren letzterer matrix spannen (zusammen mit der kameraposition) die projektionsebene auf, zeigen also im worldspace dorthin wo im cameraspace rechts/links und oben/unten ist.
    du verschiebst also die kameraposition (im worldspace) entlang dieser beiden vektoren und zwar genau so weit wie die position (im cameraspace) des punktes ist, der im zentrum liegen soll.



  • Mir gehts ja um die Berechnungen...

    MfG



  • was hast du denn nicht verstanden?


  • Mod

    ceplusplus schrieb:

    Hey!

    Der Titel sagt eigentlich schon alles.
    Ich habe zwei Dreiecke als TRIANGLELIST und eine große Textur darüber. Wenn ich irgendwo auf die Textur klicke, soll sich der Punkt variabel schnell zum
    Bildschirmmittelpunkt bewegen. Ich arbeite mit DirectX und muss ja eigentlich nur die WORLD Matrix translieren, aber wieviel? Wie rechne ich mir das aus? (Man sieht alles von oben, die Tiefe spielt keine Rolle. Wie bei Diablo2)

    MfG

    ich schaetze mal du arbeitest in 2D?



  • Soll ein 2D Spiel werden, ja.
    Ich muss die World Matrix um x und y verschieben, aber wieviel x und y? Der Punkt soll sich in einer
    Luftlinie von der Textur zum Bildschirmmittelpunk bewegen. Das soll einfach das gehen simulieren. Der Charakter ist dann in der Mitte, dreht sich immer
    zum Mausklick und hat dann eben die entsprechenden Animationen.

    MfG


  • Mod

    du weisst sicherlich welche weltposition an den ecken des bildschrims dargestellt werden.
    du weisst welcher punkt in screencoordinaten geklickt wurde.
    du weisst wie die aufloesung deines screens/fensters ist.

    -> dreisatz gibt dir den geklickten punkt in weltcoordinaten.



  • Ja aber wie verschiebe ich dann das Polygon mit Textur genau so, dass sich der angeklickte Punkt zum Bildschirmmittelpunkt bewegt?
    Wie sieht das codemäßig aus?

    MfG


  • Mod

    den neu errechneten punkt als translation setzt

    im code etwas

    glTranslate(-x,-y,0.f);
    


  • Hey!

    Und wie komme ich drauf, wieviel x und y ich brauche?

    MfG


  • Mod

    ceplusplus schrieb:

    Und wie komme ich drauf, wieviel x und y ich brauche?

    das ist ganz einfach

    du weisst sicherlich welche weltposition an den ecken des bildschrims dargestellt werden.
    du weisst welcher punkt in screencoordinaten geklickt wurde.
    du weisst wie die aufloesung deines screens/fensters ist.

    -> dreisatz gibt dir den geklickten punkt(x,y) in weltcoordinaten.



  • Hey!

    Man muss aber die Bewegung angeben, keine Koordinaten. Habe ich eben die zwei Punkte. Und wie errechne ich mir, wieviel ich nun nach x und y verschieben muss?

    MfG


  • Mod

    du hast seltsame ansichten, aber um deine frage yu beantworten: subtrachiere die beiden vectoren voneinander. dann hast du den verschiebevektor.



  • Hey!

    Wie sieht die Verschiebung Codemäßig aus? Habe NULL; Plan.

    MfG


  • Mod

    ceplusplus schrieb:

    Wie sieht die Verschiebung Codemäßig aus? Habe NULL; Plan.

    in etwa so:

    glTranslate(-x,-y,0.f);
    

    wobei x und y die von dir ausgerechneten vector-koordinaten sind.



  • Hey!

    Es soll aber nicht ruckartig geschehen, sondern in einstellbarer Zeit. Diese Verschiebung soll den Rest des Programmes nicht blockieren.

    MfG


  • Mod

    ceplusplus schrieb:

    Es soll aber nicht ruckartig geschehen, sondern in einstellbarer Zeit. Diese Verschiebung soll den Rest des Programmes nicht blockieren.

    klingt gut, laeuft es denn schon (wenigstens in der ruckel variante die du als basis nehmen kannst?)



  • ceplusplus schrieb:

    Hey!

    Es soll aber nicht ruckartig geschehen, sondern in einstellbarer Zeit. Diese Verschiebung soll den Rest des Programmes nicht blockieren.

    MfG

    Ich habe ja absolut keine Ahnung von Spieleprogrammierung, auch wenn ich mich selbst gerade an einem Point'n'Click versuche (Guybrush, ich denk an dich 😃 )
    .. aber:

    du bewegst um x+-1, y+-1 und machst den Rest (Steuerung, Sound). Das solange, bis du die Mitte erreicht hast. Was sollte da blockieren?


Anmelden zum Antworten