3dsmax Kamerasteuerung
Übersicht

chiBetreff: 3dsmax Kamerasteuerung |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo leute!
hab ein kleines problem mit meiner 3dsmax-ähnlichen kamerasteuerung und hoffe jemand von euch kann mir vielleicht weiterhelfen... ich möchte mich unendlich um die objekte drehen, bewegen oder zoomen können, doch im moment springt alles wieder in seine ausgangsposition wenn ich mit der gedrückten maus ausserhalb des fensters komme... is jetzt etwas blöd erklärt, aber wenn ihr euch das beispiel anschaut wisst ihr sicher gleich was ich meine ![]() vielleicht hat jemand eine idee ?!? thx, chi Code: [AUSKLAPPEN] global width=800,height=540,onstart=1 graphics3d width,height,0,2 setbuffer backbuffer() camerapivot= createsphere() scaleentity camerapivot,0.2,0.2,0.2 brush=createbrush() brushcolor brush,255,0,0 paintmesh camerapivot,brush camera=createcamera(camerapivot) camerazoom camera,1.2 camerarange camera,0.1,200 cameraclscolor camera,190,190,190 camerabank=createbank(48) obj1=createcube() positionentity obj1,0,1,0 obj2=createcone() positionentity obj2,0,1,5 obj3=createcylinder() positionentity obj3,5,1,5 while not keyhit(1) cls updateworld renderworld cameramouseview(camerapivot,camera,camerabank) text 0,0," lmb=drehen rmb=zoomen lmb+rmb=bewegen " +" mx=" +mousex() +" my=" +mousey() vwait flip 0 delay 2 wend end function cameramouseview(camerapivot,camera,camerabank,speed#=0.05) local movex,movey,camx#,camy#,camz#,pivx#,pivz#,angle#,xaxis#,zaxis# if speed#<0.01 then speed#=0.01 if peekfloat(camerabank,36)=0 then pokefloat camerabank,36,-70 pokeint camerabank,0,peekint(camerabank,8) pokeint camerabank,4,peekint(camerabank,16) pokeint camerabank,8,mousex() pokeint camerabank,16,mousey() pokeint camerabank,20,mousex()-peekint(camerabank,0) pokeint camerabank,24,mousey()-peekint(camerabank,4) movex=peekint(camerabank,20) movey=peekint(camerabank,24) camx#=peekfloat(camerabank,28) camy#=peekfloat(camerabank,32) camz#=peekfloat(camerabank,36) pivx#=peekfloat(camerabank,40) pivz#=peekfloat(camerabank,44) if mousedown(1) and mousedown(2) angle#=camy# : xaxis#=speed# : zaxis#=speed# if angle#>90 and angle#<270 then zaxis#=-zaxis# if angle#>180 then angle#=360-angle# : xaxis#=-xaxis# if angle#>90 then angle#=180-angle# angle#=angle#*0.011 pivx#=pivx#-(movex*(1-angle#)*zaxis#)-(movey*angle#*xaxis#) pivz#=pivz#-(movex*angle#*xaxis#)+(movey*(1-angle#)*zaxis#) if mousex() <=1 then movemouse width/2,mousey() if mousex() >=width-1 then movemouse width/2,mousey() if mousey() <=1 then movemouse mousex(),height/2 if mousey() >=height-1 then movemouse mousex(),height/2 elseif mousedown(2) camz#=camz#-movey*speed# if camz#>-3 then camz#=-3 if mousey() <=3 then movemouse mousex(),height/2 if mousey() >=height-3 then movemouse mousex(),height/2 elseif mousedown(1) camx#=camx#+(movey*10*speed#) if camx#>90 then camx#=90 if camx#<5 then camx#=5 camy#=camy#-(movex*10*speed#) if camy#>359 then camy#=0 if camy#<0 then camy#=359 if mousex() <=3 then movemouse width/2,mousey() if mousex() >=width-3 then movemouse width/2,mousey() endif if onstart=1 camx#=40 camy#=20 onstart=0 endif pokefloat camerabank,28,camx# pokefloat camerabank,32,camy# pokefloat camerabank,36,camz# pokefloat camerabank,40,pivx# pokefloat camerabank,44,pivz# positionentity camerapivot,pivx#,0,pivz# rotateentity camerapivot,camx#,camy#,0 positionentity camera,0,0,camz# end function |
||
Krümel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo chi,
vorab eine frage, wieso machst du das so kompliziert mit bank und peek/poke anstatt ein type für die camera zu verwenden? |
||
chi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
um ehrlich zu sein is der code nicht ganz von mir... nur a bissl überarbeitet. so gut bin ich noch nicht um das alles allein zu progen.
aber ich schätze mal, daß es mit types genauso funktionieren würde und mein problem mit der durchgehenden drehung usw. noch immer bestehen würde... korrigiere mich bitte wenn ich falsch liege ![]() lg, chi |
||
Krümel |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok, hier ein beispiel wie ich die steuerung machen würde:
Code: [AUSKLAPPEN] Graphics3D 640,480,16,2 SetBuffer BackBuffer() Type camera Field Camera Field Pivot End Type Function MoveCamera(camera.camera, dirX#,dirY#, Button) Select Button Case 1 ;Left Button - drehen TurnEntity camera\pivot, diry , dirx , 0, 0 Case 2 ;Right Button - zoomen MoveEntity camera\Camera, 0,0, (-dirx + diry) * 0.1 Case 3 ;Left+Right Button - bewegen MoveEntity camera\Camera, -dirx * 0.1 ,diry * 0.1 ,0 End Select End Function CreateLight() obj1=CreateCube() PositionEntity obj1,0,1,0 obj2=CreateCone() PositionEntity obj2,0,1,5 obj3=CreateCylinder() PositionEntity obj3,5,1,5 camera1.camera=New camera camera1\Pivot=CreateSphere() ScaleMesh camera1\Pivot,0.2,0.2,0.2 EntityColor camera1\Pivot,255,0,0 camera1\Camera=CreateCamera() EntityParent camera1\camera, camera1\pivot MoveEntity camera1\camera,0,0,-10 While Not KeyHit(1) If MouseDown(1) Or MouseDown(2) If ButtonPressed=False ButtonPressed=True oldMouseX=MouseX() oldMouseY=MouseY() MoveMouse 320,240 HidePointer EndIf moveCamera(camera1, MouseXSpeed()*0.1, MouseYSpeed()*0.1, MouseDown(1)+MouseDown(2)*2) MoveMouse 320,240 Else If ButtonPressed=True ButtonPressed=False MoveMouse oldMouseX,oldMouseY ShowPointer EndIf EndIf RenderWorld Flip Wend |
||
chi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hey danke krümel... werd mich gleich mal hinsetzten und alles durchackern ![]() thx again, chi |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group