kamera mit objekt drehen

Previous topic - Next topic

sechsrad

hallo fachleute, ich möchte die kamera mit dem objekt drehen, wie geht das?
habe hier im forum2 beiträge gesehen, waren aber für mich nicht so eindeutig.
die kamera folgt dem objekt schon aber  wie dreht sie sich mit ?

mfg


Code (glbasic) Select
// X: rot
// Y: grün
// Z: blau

LOADSPRITE      "image.bmp",0

X_OBJSTART 1
X_OBJADDVERTEX   20, 0, 20,  0,1, RGB(255,255,255)
X_OBJADDVERTEX   -20,  0, 20,  0,0, RGB(255,255,255)
X_OBJADDVERTEX    20, 0, -20,  1,1, RGB(255,255,255)
X_OBJADDVERTEX    -20,  0, -20,  1,0, RGB(255,255,255)
X_OBJEND

WHILE TRUE

 IF phi>=360 THEN phi=phi-360
 
 X_MAKE3D 1, 1000, 45

 X_CAMERA x+0, y+50, z+50, x,y,z

 X_DRAWAXES 0, 0, 0

 X_SETTEXTURE 0, 0
 X_MOVEMENT x,y,z
 X_ROTATION phi, 0, 1, 0
 X_DRAWOBJ 1, 0

 IF KEY(16) = 1
  phi=phi+0.5
 ENDIF
 IF KEY(18) = 1
  phi=phi-0.5
 ENDIF

 IF KEY(205) = 1
  x=x+0.5
 ENDIF
 IF KEY(203) = 1
  x=x-0.5
 ENDIF

 IF KEY(30) = 1
  y=y+0.5
 ENDIF
 IF KEY(44) = 1
  y=y-0.5
 ENDIF

 IF KEY(208) = 1
  z=z+0.5
 ENDIF
 IF KEY(200) = 1
  z=z-0.5
 ENDIF

 SHOWSCREEN
WEND

Schranz0r

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

sechsrad

kannste mal ein kurzes beispiel geben? wo muss ich die werte der kamera übergeben? da ist doch kein drehwinkel angegeben.

danke.

mfg

Schranz0r

Deshalb ja Sin und Cos, irgendwo in den Codeschnippseln ist ein Beispiel wie das geht !


Siehe da: http://www.glbasic.com/forum/viewtopic.php?id=1147
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

sechsrad

geht wunderbar damit.

werde hier und da noch einmal rumspielen mit dem code.

mfg

Schranz0r

Darfst du gerne machen ;)
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

sechsrad

wie wir dann eine nickbewegung der kamera programmiert?

mfg

Kitty Hello

Verschieb' einfach die Kamera:

X_CAMERA x,y,z,   x-sin(nick)*dist, ycam, z+cos(nick)*dist

sechsrad

damit setze ich ja die kamera (prog ist von schranz0r), ist zb de erste aufruf:
X_CAMERA Cam_X, Cam_Y, Cam_Z,   Cam_X+COS(phiXZ), Cam_Y+SIN(phiXY), Cam_Z+SIN(phiXZ)

dann mus ja dieser aufruf folgen zum nicken der kamera, welche werte kommen denn jetzt hier rein: nick, cma_x, cam_y und cam_z ist klar :
X_CAMERA Cam_X, Cam_Y, Cam_Z,   x-sin(nick)*dist, ycam, z*cos(nick)*dist


aber welche werte kommen hier rein :  x-sin(nick)*dist, ycam, z*cos(nick)*dist ?

warum wird mit z multipliziert? > z*cos(nick)*dist

mfg

Kitty Hello


sechsrad

die kamera wander von rechts oder nach links, nicht nach oben oder unten !!! woran liegt der fehler?

Code (glbasic) Select
Global nick
Global dist

IF KEY(31) // S
        nick=nick+0.1
        dist=1
    ENDIF
   
    IF KEY(45) // S
        nick=nick-0.1
        dist=1
    ENDIF  
ENDSUB

SUB X3D_CAM_SET:
X_CAMERA Cam_X, Cam_Y, Cam_Z,   Cam_X-SIN(nick)*dist, Cam_Y, Cam_Z-COS(nick)*dist

ENDSUB

Kitty Hello

dist  =100 statt 1. Viel zu kleiner Abstand