I think I have found a bug:
If you have scaled an Entity to another value than 1,1,1, then
If you use RotateEntity the mesh is scaled wrong the way. eg: a sphere looks more like an oval than a sphere.
here is a modified primitives sample which should demonstrate the problem.
If you have scaled an Entity to another value than 1,1,1, then
If you use RotateEntity the mesh is scaled wrong the way. eg: a sphere looks more like an oval than a sphere.
here is a modified primitives sample which should demonstrate the problem.
Import "../MiniB3D.bmx" Strict Local width=640,height=480,depth=16,mode=0 Graphics3D width,height,depth,mode Local cam:TCamera=CreateCamera() PositionEntity cam,0,0,-10 Local light:TLight=CreateLight(1) Local tex:TTexture=LoadTexture("media/test.png") Local cube:TMesh=CreateCube() Local sphere:TMesh=CreateSphere() Local cylinder:TMesh=CreateCylinder() Local cone:TMesh=CreateCone() PositionEntity cube,-6,0,0 PositionEntity sphere,-2,0,0 PositionEntity cylinder,2,0,0 PositionEntity cone,6,0,0 ScaleEntity sphere,3,3,3 EntityTexture cube,tex EntityTexture sphere,tex EntityTexture cylinder,tex EntityTexture cone,tex ' used by camera code Local mxs#=0 Local mys#=0 Local move#=0.5 MouseXSpeed() ' flush MouseYSpeed() ' flush ' used by fps code Local old_ms=MilliSecs() Local renders Local fps While Not KeyDown(KEY_ESCAPE) If KeyHit(KEY_ENTER) Then DebugStop '' control camera ' mouse look mxs#=mxs#+(MouseXSpeed()/5.0) mys#=mys#+(MouseYSpeed()/5.0) RotateEntity cam,mys#,-mxs#,0 MoveMouse width/2,height/2 MouseXSpeed() ' flush MouseYSpeed() ' flush ' move camera forwards/backwards/left/right with cursor keys If KeyDown(KEY_UP)=True Then MoveEntity cam,0,0,move# ' move camera forward If KeyDown(KEY_DOWN)=True Then MoveEntity cam,0,0,-move# ' move camera back If KeyDown(KEY_LEFT)=True Then MoveEntity cam,-move#,0,0 ' move camera left If KeyDown(KEY_RIGHT)=True Then MoveEntity cam,move#,0,0 ' move camera right '' TurnEntity cube,0,1,0 RotateEntity(sphere,EntityPitch(sphere)+0.7,EntityYaw(sphere)+0.7,EntityRoll(sphere)+0.7) RenderWorld renders=renders+1 ' calculate fps If MilliSecs()-old_ms>=1000 old_ms=MilliSecs() fps=renders renders=0 EndIf Text 0,0,"FPS: "+String(fps) Flip Wend End