PointEntity auf zwei Achsen beschränken

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Der Eisvogel

Betreff: PointEntity auf zwei Achsen beschränken

BeitragMi, Nov 20, 2013 1:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo liebe Community,

schon lange war ich hier nicht mehr aktiv und auch Blitz ist etwas eingeschlafen. Aber für ein aktuelles Schulprojekt wollte ich mir einen Spaß erlauben und eine 3D Visualisierung für einen Roboter basteln. Meine Erfahrungen im 3D-Bereich sind noch weniger als gering, aber mittlerweile erkennt man den Roboter und er kann sich bewegen.

Zu meiner Frage: Die Antriebe des Roboters müssen jetzt irgendwie mit dem Roboter selbst bewegt werden. Hierzu erstmal ein Bild:
user posted image

Das weiße Teil ist ein Antrieb, dieser hat am unteren Ende einen Aufsatzpunkt. Die lokal Koordinate für den Antrieb an diesem Punkt ist 0,0,0. Dort wo der Pfeil hinzeigt, soll der Antrieb später eine Verbindung haben, indem dort noch einen Stange dran kommt. Der Antrieb musst jetzt also auf diesen Punkt zeigen. Je nachdem wie der Roboter sich bewegt muss der Antrieb auch mitbewegt werden. Meine Idee war jetzt also ein Pivot genau auf den oberen Aufsatzpunkt zu setzen und mittels PointEntity den Antrieb darauf auszurichten. Das funktioniert aber leider nur solange der Roboter im rechten Winkel steht (linkes Bild). Wenn man ihn nach vorne (rechtes Bild) oder hinten (mittleres Bild) bewegt, dann dreht sich der Antrieb so zur Seite. Er soll sich jedoch nicht um seine eigene Achse drehen. Wie kann ich dies verhindern, oder gar ganz anders realisieren?

Ich hoffe das war verständlich erklärt, wenn nicht, würde ich kurz noch einen Demo hochladen, wo man sich das in Bewegung angucken kann.

Vielen Dank für eure Unterstützung.

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
 

Kruemelator

BeitragMi, Nov 20, 2013 6:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt den Befehl:
BlitzBasic: [AUSKLAPPEN]
AlignToVector

der ist etwas mächtiger als PointEntity kann aber auch genau dasselbe machen wenn man möchte. Bei diesem kannst du die Achse die ausgerichtet werden soll selber bestimmen.

Du könntest auch den Winkel zwischen der unteren Leiste und der senkrechten ermitteln und dann RotateEntity nutzen.

Der Eisvogel

BeitragMi, Nov 20, 2013 11:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Kruemelator,

vielen Dank für den Vorschlag. Ich hab das jetzt eben mal probiert und mir mittels TFromPoint etc. einen Vektor zusammengebastelt, der vom unteren Aufsatzpunkt auf den oberen zeigt. Jetzt funktioniert das ganze aber wiederum nur solange, bis ich den Körper des Roboter (das unterste blaue Teile) um seine Hochachse drehe. Dann muss der Antrieb auf zwei Achsen im globalen Koordinatensystem ausgerichtet werden. Kann ich AlignToVector auch irgendwie so anwenden, dass es sich auf lokales Koordinatensystem eines Entitys ausrichtet?

EDIT: Man vergesse bitte meine obige Anmerkung. Ich hatte die Funktionsweise des Befehls nicht ganz durchleuchtet und ihn falsch angewendet. Jetzt funktioniert es. Vielen Dank.

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Tankbuster

BeitragMi, Nov 20, 2013 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit PointEntity würde es auch funktionieren.


Das bewirkt eine Drehung nur um die Y-Achse (Pseudocode)
Hab ich immer so gemacht, wenns mal schnell gehen sollte Embarassed

Code: [AUSKLAPPEN]

pitch=EntityPitch(Gerät)
;yaw=EntityYaw(Gerät)
roll=EntityRoll(Gerät)

PointEntity(Gerät,Punkt)
RotateEntity Gerät,pitch,EntityYaw(Gerät),roll
Twitter
Download Jewel Snake!
Windows|Android

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group