terrain.monkey2 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. Namespace myapp
  2. #Import "<std>"
  3. #Import "<mojo>"
  4. #Import "<mojo3d>"
  5. #Import "assets/miramar-skybox.jpg"
  6. #Import "assets/terrain_256.png"
  7. #Import "assets/mossy.pbr/@/mossy.pbr"
  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 CreateTerrain:Model()
  18. Local box:=New Boxf( -256,0,-256,256,32,256 )
  19. Local hmap:=Pixmap.Load( "asset::terrain_256.png",PixelFormat.I8 )
  20. Local material:=PbrMaterial.Load( "asset::mossy.pbr" )
  21. material.ScaleTextureMatrix( 64,64 )
  22. 'model+mesh
  23. Local terrain:=Model.CreateTerrain( hmap,box,material )
  24. terrain.CastsShadow=False
  25. Local collider:=New TerrainCollider( terrain )
  26. collider.Heightmap=hmap
  27. collider.Bounds=box
  28. Local body:=New RigidBody( terrain )
  29. body.Mass=0
  30. Return terrain
  31. End
  32. Method CreateBodies()
  33. Local material:=New PbrMaterial( Color.Brown,1,.5 )
  34. Local box:=New Boxf( -.5,.5 )
  35. Local model:=Model.CreateBox( box,1,1,1,material )
  36. Local collider:=model.AddComponent<BoxCollider>()
  37. collider.Box=box
  38. Local body:=model.AddComponent<RigidBody>()
  39. For Local i:=0 Until 360 Step 6
  40. Local copy:=model.Copy()
  41. copy.Rotate( 0,i,0 )
  42. copy.Move( 0,40+i*.1,Rnd( 5,10 ) )
  43. Next
  44. model.Destroy()
  45. End
  46. Method CreateScene()
  47. _scene=New Scene
  48. _scene.SkyTexture=Texture.Load( "asset::miramar-skybox.jpg",TextureFlags.FilterMipmap|TextureFlags.Cubemap )
  49. _scene.FogColor=New Color( .75,1,0 )*.25
  50. _scene.FogNear=75
  51. _scene.FogFar=100
  52. Local camera:=New Camera( Self )
  53. camera.Near=.1
  54. camera.Far=100
  55. camera.Move( 0,40,0 )
  56. New FlyBehaviour( camera )
  57. Local light:=New Light
  58. light.CastsShadow=True
  59. light.RotateX( 45 )
  60. CreateTerrain()
  61. CreateBodies()
  62. End
  63. Method OnRender( canvas:Canvas ) Override
  64. RequestRender()
  65. _scene.Update()
  66. _scene.Render( canvas )
  67. canvas.DrawText( "FPS="+App.FPS,Width,0,1,0 )
  68. End
  69. End
  70. Function Main()
  71. New AppInstance
  72. New MyWindow
  73. App.Run()
  74. End