ducks.monkey2 2.0 KB

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