camerapick.bmx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. ' camerapick.bmx
  2. ' from minib3d examples
  3. Strict
  4. Framework b3d.b3dglgraphics
  5. Local width%=800,height%=600,depth%=0,Mode%=2
  6. Graphics3D width,height,depth,Mode
  7. Local cam:TCamera=CreateCamera()
  8. PositionEntity cam,0,0,-15
  9. Local light:TLight=CreateLight()
  10. RotateEntity light,45,0,0
  11. Local marker:TMesh=CreateSphere()
  12. ScaleEntity marker,0.2,0.2,0.2
  13. EntityColor marker,255,0,0
  14. Local sphere:TMesh=CreateSphere()
  15. EntityRadius sphere,1
  16. EntityPickMode sphere,1
  17. PositionEntity sphere,-10,0,0
  18. Local mesh:TMesh=LoadMesh("media/teapot.b3d")
  19. EntityPickMode mesh,2
  20. ScaleEntity mesh,4,4,4
  21. Local box:TMesh=CreateCube()
  22. FitMesh box,-2,-1,-1,4,2,2
  23. EntityBox box,-2,-1,-1,4,2,2
  24. EntityPickMode box,3
  25. PositionEntity box,10,0,0
  26. ' used by fps code
  27. Local old_ms%=MilliSecs()
  28. Local renders%, fps%
  29. While Not KeyDown(KEY_ESCAPE)
  30. If KeyHit(KEY_ENTER) Then DebugStop
  31. ' control camera
  32. MoveEntity cam,KeyDown(KEY_D)-KeyDown(KEY_A),0,KeyDown(KEY_W)-KeyDown(KEY_S)
  33. TurnEntity cam,KeyDown(KEY_DOWN)-KeyDown(KEY_UP),KeyDown(KEY_LEFT)-KeyDown(KEY_RIGHT),0
  34. TurnEntity mesh,0,1,0
  35. ' if mousedown then perform camerapick
  36. Local myPick:TEntity
  37. If MouseDown(1)
  38. ' reset entity colors
  39. EntityColor sphere,255,255,255
  40. EntityColor mesh,255,255,255
  41. EntityColor box,255,255,255
  42. myPick=CameraPick(cam,MouseX(),MouseY())
  43. If myPick<>Null
  44. EntityColor myPick,255,255,0
  45. PositionEntity marker,PickedX(),PickedY(),PickedZ()
  46. EndIf
  47. EndIf
  48. RenderWorld
  49. renders=renders+1
  50. ' calculate fps
  51. If MilliSecs()-old_ms>=1000
  52. old_ms=MilliSecs()
  53. fps=renders
  54. renders=0
  55. EndIf
  56. Text 0,0,"FPS: "+fps
  57. If myPick<>Null
  58. ' Text 0,20,"Picked!"
  59. Else
  60. ' Text 0,20,"Not Picked"
  61. EndIf
  62. Flip
  63. Wend
  64. End