ducks.monkey2 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. Namespace myapp
  2. #Import "<std>"
  3. #Import "<mojo>"
  4. #Import "<mojo3d>"
  5. 'uncomment this to create a mojo3d scene file in monkey2 dir!
  6. #Reflect mojo3d
  7. #Import "assets/duck.gltf/@/duck.gltf"
  8. Using std..
  9. Using mojo..
  10. Using mojo3d..
  11. Class MyWindow Extends Window
  12. Field _scene:Scene
  13. Method New( title:String="Simple mojo app",width:Int=640,height:Int=480,flags:WindowFlags=WindowFlags.Resizable )
  14. Super.New( title,width,height,flags )
  15. CreateScene()
  16. End
  17. Method CreateGround()
  18. Local box:=New Boxf( -50,-1,-50,50,0,50 )
  19. Local material:=New PbrMaterial( Color.Green,0,1 )
  20. Local model:=Model.CreateBox( box,1,1,1,material )
  21. model.CastsShadow=False
  22. End
  23. Method CreateDucks()
  24. Local duck:=Model.Load( "asset::duck.gltf/Duck.gltf" )
  25. duck.Mesh.FitVertices( New Boxf( -1,1 ) )
  26. Local root:=duck.Copy()
  27. root.Move( 0,10,0 )
  28. root.Scale=New Vec3f( 3 )
  29. root.AddComponent<RotateBehaviour>().Speed=New Vec3f( 0,-.01,0 )
  30. For Local m:=0.0 To 1.0 Step .125
  31. For Local i:=0.0 Until 360.0 Step 24
  32. Local copy:=duck.Copy( root )
  33. copy.RotateY( i )
  34. copy.Move( 0,0,6+m*16 )
  35. copy.Scale=New Vec3f( 1 )
  36. Local materials:=copy.Materials.Slice( 0 )
  37. For Local j:=0 Until materials.Length
  38. Local material:=Cast<PbrMaterial>( materials[j].Copy() )
  39. material.MetalnessFactor=m
  40. material.RoughnessFactor=i/360.0
  41. materials[j]=material
  42. Next
  43. copy.Materials=materials
  44. Next
  45. Next
  46. duck.Destroy()
  47. End
  48. Method CreateScene()
  49. 'create scene
  50. '
  51. _scene=New Scene( True )
  52. 'for softer shadows
  53. '
  54. _scene.ShadowAlpha=.6
  55. 'create camera
  56. '
  57. Local camera:=New Camera( Self )
  58. camera.AddComponent<FlyBehaviour>()
  59. camera.Move( 0,15,-20 )
  60. 'create light
  61. '
  62. Local light:=New Light
  63. light.CastsShadow=True
  64. light.Rotate( 90,0,0 )
  65. CreateGround()
  66. CreateDucks()
  67. If _scene.Editable _scene.Save( "ducks-scene.mojo3d" ) ; _scene=Scene.Load( "ducks-scene.mojo3d" )
  68. End
  69. Method OnRender( canvas:Canvas ) Override
  70. RequestRender()
  71. _scene.Update()
  72. _scene.Render( canvas )
  73. canvas.DrawText( "FPS="+App.FPS,Width,0,1,0 )
  74. End
  75. End
  76. Function Main()
  77. New AppInstance
  78. New MyWindow
  79. App.Run()
  80. End