Bestimmten Punkt einer Textur zum Bildschirmmittelpunkt verschieben
-
was hast du denn nicht verstanden?
-
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
-
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
-
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
-
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
-
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
-
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
-
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?
-
Hey!
Nur was, wenn sich die Linie, auf der ich mich bewegen will, nicht im 45° Winkel befindet? Dann sind x und y unterschiedlich, und da versteh ich es nimmer. zB x = 0.0036f; und y = 0.071f; Nur wie komme ich auf diese Werte?
MfG
-
-
subtrachiere die beiden vectoren voneinander. dann hast du den verschiebevektor.
Guck dir an was Vectoren sind, denke dann kommste der Lösung etwas näher.
-
Hey!
Ah versteh schon. Differenz der beiden Punktkoordinaten... Man, jetzt kommt es mir total einfach und logisch vor, ist es ja auch

Danke!
MfG