3D Rotation

Previous topic - Next topic

x-tra

Wenn ich den Befehl x_rotation nehme, dann gibt man ja in welchem winkel sich das objeckt um die achse x,y,z  drehen soll.


Ich hab als x,y,z wahrscheinlich fälschlicherweise die positionskoordinaten genommen.

Wie hab ich das mit den koordinaten zu verstehen?

ich habe ein Objekt von insgesamt dreien, und muß dieses von der camerasicht aus gesehen sozusagen um ca. 90 Grad nach rechts hinten in der horizontalen drehen.

Es ist momentan von der front zu sehen, und ich brauch die seite.

Wie macht man das mit dem x_rotation?

Kitty Hello

x,y,z ist die Richting der Achse um die gedreht wird. Nimm den rechten Daumen als Achse, und krümm' den Zeigefinger, dann hast Du die Richtung des Drehwinkels.

Schranz0r

Quote from: x-traIch hab als x,y,z wahrscheinlich fälschlicherweise die positionskoordinaten genommen.
X_ROTATION Winkel,x,y,z


wenn du dein Objekt drehen willst:(evtl meinst ja das!)

Code (glbasic) Select
INC phi,1
IF phi > 359 THEN phi = 0  

X_ROTATION phi, 1, 1, 0 // 1 ist Positive richtung, -1 negative richtung
X_DRAWOBJ 0,0
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

x-tra

Quote from: GernotFrischx,y,z ist die Richting der Achse um die gedreht wird. Nimm den rechten Daumen als Achse, und krümm' den Zeigefinger, dann hast Du die Richtung des Drehwinkels.
Kannst du mir mal bildlich beschreiben, etwas unverständlich.


Ebenso wie dies:  
Code (glbasic) Select
X_ROTATION phi, 1, 1, 0 // 1 ist Positive richtung, -1 negative richtungKann das mal jemand im dreidimensionalen Raum zeigen, damit ichs leichter begreif.Sorry aber danke für die Mühe.

x-tra

Ich habs jetzt soweit hinbekommen, daß ich ja eine drehung hinbekomme, allerdings habe ich ein Objekt, was nur aus zwei kleinen Kreisen besteht.

Links einer, und rechts einer.Ich möchte, daß diese sich einfach im Kreis drehen, sozusagen eben um den eigenen Mittelpunkt, welcher auf der Z-Achse liegt.


Momentan wird nur das gesammte objekt rotiert, aber um die globale Z_Achse, nicht um die Objekt eigene.

Wie macht man das?

RotateEntity wäre da cool.


so hier mal mein code, ist etwas schludrig, aber naja.

Code (glbasic) Select
// --------------------------------- //
// Project: spaceship
// Start: Wednesday, September 12, 2007
// IDE Version: 4.279

//Variablen

GLOBAL posx=0
GLOBAL posy=0
GLOBAL posz=0


// Spaceship zweiteilig laden


X_LOADOBJ "heck.ddd", 2
X_LOADOBJ "lichter1.ddd", 3

// 3D Modus, Kamera und Licht hinzufügen

    X_MAKE3D 1, 100, 45
X_CAMERA 0, 0, 2, 0, 0, 0
X_AMBIENT_LT 0, RGB(209,209,209)
// Zeichnen

INC phi,1
    IF phi > 359 THEN phi = 0  

X_MOVEMENT posx, posy, posz
X_ROTATION 150, 0, 0, 0
X_DRAWOBJ 2, 0

GOSUB rotation

SHOWSCREEN
MOUSEWAIT
END


SUB rotation:
X_MOVEMENT posx, posy, posz
X_ROTATION phi, 1, 1, 0
X_DRAWOBJ 3, 0
ENDSUB
wie baue ich am besten eine schleife ein, daß das objekt 3 aus der "Sub Rotation" sich langsam um sich selbst dreht?

mousewait hab ich erstmal dringelassen, damit überhaupt erstmal etwas zu sehen ist.


okay, habs damit hinbekommen, aber das mit der drehung klappt nicht, das objekt 3 dreht sich nicht um sich selbst.

Code (glbasic) Select
// --------------------------------- //
// Project: spaceship
// Start: Wednesday, September 12, 2007
// IDE Version: 4.279

//Variablen

GLOBAL posx=0
GLOBAL posy=0
GLOBAL posz=0


// Spaceship zweiteilig laden


X_LOADOBJ "heck.ddd", 2
X_LOADOBJ "lichter1.ddd", 3

// 3D Modus, Kamera und Licht hinzufügen
start:
    X_MAKE3D 1, 100, 45
X_CAMERA 0, 0, 2, 0, 0, 0
X_AMBIENT_LT 0, RGB(209,209,209)
// Zeichnen

INC phi,1
    IF phi > 359 THEN phi = 0  

X_MOVEMENT posx, posy, posz
X_ROTATION 150, 0, 0, 0
X_DRAWOBJ 2, 0

X_MOVEMENT posx, posy, posz
X_ROTATION phi, 0, 0, 1
X_DRAWOBJ 3, 1


SHOWSCREEN
GOTO start
Ich suche also eine Möglichkeit, um ein Objekt relativ zu EIGENEN Achse zu rotieren/drehen usw.

BumbleBee

Morgen :)

Also, das Objekt das du entwirfst  muß Mittig in deinem 3D Programm sein. Also nicht in den   Achsen verschoben. Dann rotiert es normalerweise in GLBasic auch um seine eigene Achse. So kenn ich das halt. Aber vielleicht rede ich ja nur Blech.  Ist ja schließlich noch sehr früh.:D
Probiers mal aus

Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

x-tra

Code (glbasic) Select
// Spaceship zweiteilig laden


X_LOADOBJ "heck.ddd", 2
X_LOADOBJ "lichter.ddd", 3

// 3D Modus, Kamera und Licht hinzufügen
WHILE TRUE
    X_MAKE3D 1, 100, 45
X_CAMERA 0, 0, 2, 0, 0, 0
X_AMBIENT_LT 0, RGB(209,209,209)
// Zeichnen

INC phi,1
    IF phi > 359 THEN phi = 0  

//X_Movement 0, 0, 0
X_ROTATION phi,0,0,1
X_DRAWOBJ 2,0

//X_Movement 0, 0, 0
X_ROTATION phi,0,0,1
X_DRAWOBJ 3,0


SHOWSCREEN
WEND
mit diesem code und dem Objekt mittig in AC3D hab ich es versucht, und obwohl es mir einleuchtete, funktioniert es nicht.

wenn ich X_Movement weglasse, dreht sich ein Objekt schneller als das andere, mit X_Movement beide gleichmässig, aber eben nur um die Globale Welt Z-Achse


Ah funktioniert, riesigen Dank, lag an AC3D, hatte beim export in .3ds die Koordinaten nicht gespeichert, warum auch immer, so jetzt bin ich schonmal ein ganzes Stück weiter.

Kitty Hello

AC3D kann direkt nach .ddd exportieren. Im Ordner /plugins ist die .dll.