test.monkey2 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  1. Namespace mojo3d
  2. #Import "<std>"
  3. #Import "<gles20>"
  4. #Import "<mojo>"
  5. #Import "<mojox>"
  6. Using std..
  7. Using gles20..
  8. Using mojo.app
  9. Using mojo.input
  10. Using mojox
  11. #Import "glutil"
  12. #Import "texture"
  13. #Import "uniformblock"
  14. #Import "shader"
  15. #Import "vertex"
  16. #Import "vertexbuffer"
  17. #Import "indexbuffer"
  18. #Import "graphicsdevice"
  19. #Import "shadowcaster"
  20. #Import "image"
  21. #Import "font"
  22. #import "fontloader"
  23. #Import "canvas"
  24. #Import "Monkey2-logo-48.png"
  25. #Import "trans_heart.png"
  26. #Import "assets/"
  27. Class SettingsView Extends TableView
  28. Method New()
  29. AddColumn( "Setting" )
  30. AddColumn( "Value" )
  31. End
  32. Method AddRow( label:String,view:View )
  33. Local row:=NumRows
  34. AddRows( 1 )
  35. Self[0,row]=New Label( label )
  36. Self[1,row]=view
  37. End
  38. Method AddText:TextField( label:String,text:String,changed:Void( text:String ) )
  39. Local view:=New TextField( text )
  40. view.Entered+=Lambda()
  41. changed( view.Text )
  42. End
  43. AddRow( label,view )
  44. Return view
  45. End
  46. Method AddCheck:CheckButton( label:String,value:String,checked:Bool,changed:Void( checked:Bool ) )
  47. Local view:=New CheckButton( value )
  48. view.Checked=checked
  49. view.Clicked+=Lambda()
  50. changed( view.Checked )
  51. End
  52. AddRow( label,view )
  53. Return view
  54. End
  55. Method AddFilePath:FilePathField( label:String,path:String,changed:Void( path:String ) )
  56. Local view:=New FilePathField( path )
  57. view.FilePathChanged+=Lambda()
  58. changed( view.FilePath )
  59. End
  60. AddRow( label,view )
  61. Return view
  62. End
  63. Method AddOptions:OptionsField( label:String,options:String[],current:Int,changed:Void( current:Int ) )
  64. Local view:=New OptionsField( options )
  65. view.CurrentChanged+=Lambda()
  66. changed( view.Current )
  67. End
  68. AddRow( label,view )
  69. Return view
  70. End
  71. End
  72. Class MyWindow Extends GLWindow
  73. Field _canvas:Canvas
  74. Field _logoImage:Image
  75. Field _logoCaster:ShadowCaster
  76. Field _heartImage:Image
  77. Field _bumpImage:Image
  78. Field _light:Image
  79. Field _imageSize:=512.0
  80. Field _imageRepeat:=1
  81. Field _diffPath:="" '"Slate Tiles II_D.png"
  82. Field _normPath:="scale_normal.png" '"Slate Tiles II_N.png"
  83. Field _specPath:="" '"Slate Tiles II_S.png"
  84. Field _imageGloss:=0.5
  85. Field _lightPath:="pointlight2_light.png"
  86. Field _lightColor:=0
  87. Field _lightIntensity:=1.0
  88. Field _lightSize:=512.0
  89. Field _lightDepth:=100.0
  90. Field _ambient:Float=0.1
  91. Method UpdateImage()
  92. _bumpImage=Image.LoadBump( _diffPath,_normPath,_specPath,_imageGloss,True )
  93. Local size:=_imageSize/_imageRepeat
  94. _bumpImage.Scale=New Vec2f( size/_bumpImage.Width,size/_bumpImage.Height )
  95. End
  96. Method UpdateLight()
  97. Const _colors:=New Color[]( Color.White,Color.Red,Color.Green,Color.Blue )
  98. _light=Image.LoadLight( _lightPath )
  99. _light.Handle=New Vec2f( .5,.5 )
  100. _light.Scale=New Vec2f( _lightSize/_light.Width,_lightSize/_light.Height )
  101. _light.Color=_colors[_lightColor]*_lightIntensity
  102. _light.Depth=_lightDepth
  103. End
  104. Method New()
  105. Super.New( "Window",1024,768 )
  106. ChangeDir( AssetsDir() )
  107. Local _settings:=New SettingsView
  108. _settings.AddText( "Image size",_imageSize,Lambda( text:String )
  109. _imageSize=Float( text )
  110. UpdateImage()
  111. End )
  112. _settings.AddText( "Image repeat",_imageRepeat,Lambda( text:String )
  113. _imageRepeat=Int( text )
  114. UpdateImage()
  115. End )
  116. _settings.AddFilePath( "Image diffuse",_diffPath,Lambda( path:String )
  117. _diffPath=path
  118. UpdateImage()
  119. End )
  120. _settings.AddFilePath( "Image normal",_normPath,Lambda( path:String )
  121. _normPath=path
  122. UpdateImage()
  123. End )
  124. _settings.AddFilePath( "Image specular",_specPath,Lambda( path:String )
  125. _specPath=path
  126. UpdateImage()
  127. End )
  128. _settings.AddText( "Image gloss",_imageGloss,Lambda( text:String )
  129. _imageGloss=Float( text )
  130. UpdateImage()
  131. End )
  132. _settings.AddFilePath( "Light texture",_lightPath,Lambda( path:String )
  133. _lightPath=path
  134. UpdateLight()
  135. End )
  136. _settings.AddOptions( "Light color",New String[]( "White","Red","Green","Blue" ),_lightColor,Lambda( index:Int )
  137. _lightColor=index
  138. UpdateLight()
  139. End )
  140. _settings.AddText( "Light intensity",_lightIntensity,Lambda( text:String )
  141. _lightIntensity=Float( text )
  142. UpdateLight()
  143. End )
  144. _settings.AddText( "Light size",_lightSize,Lambda( text:String )
  145. _lightSize=Float( text )
  146. UpdateLight()
  147. End )
  148. _settings.AddText( "Light depth",_lightDepth,Lambda( text:String )
  149. _lightDepth=Float( text )
  150. UpdateLight()
  151. End )
  152. _settings.AddText( "Ambient light",_ambient,Lambda( text:String )
  153. _ambient=Float( text )
  154. End )
  155. Local dialog:=New Dialog( "Settings" )
  156. dialog.ContentView=_settings
  157. dialog.Open()
  158. BeginGL()
  159. _canvas=New Canvas
  160. _logoImage=Image.Load( "asset::monkey2-logo-48.png" )
  161. _logoImage.BlendMode=BlendMode.Alpha
  162. _logoImage.Handle=New Vec2f( .5,.5 )
  163. _logoCaster=New ShadowCaster( _logoImage.Width/2,24 )'_logoImage.Bounds )
  164. _heartImage=Image.Load( "asset::trans_heart.png" )
  165. _heartImage.BlendMode=BlendMode.Alpha'Additive
  166. _heartImage.Scale=New Vec2f( .25,.25 )
  167. _heartImage.Handle=New Vec2f( .5,.5 )
  168. UpdateImage()
  169. UpdateLight()
  170. EndGL()
  171. End
  172. Method OnRender( canvas:mojo.graphics.Canvas ) Override
  173. App.RequestRender()
  174. Super.OnRender( canvas )
  175. canvas.DrawText( "Hello World!",Width/2,0,.5,0 )
  176. End
  177. Method OnRenderGL() Override
  178. Global _rotz:=0.0
  179. Global _viewport:=New Recti( 32,32,1024-32,768-32 )
  180. If Keyboard.KeyDown( Key.Up )
  181. _viewport+=New Vec2i( 0,-3 )
  182. Else If Keyboard.KeyDown( Key.Down )
  183. _viewport+=New Vec2i( 0, 3 )
  184. Else If Keyboard.KeyDown( Key.Left )
  185. _viewport+=New Vec2i( -3,0 )
  186. Else If Keyboard.KeyDown( Key.Right )
  187. _viewport+=New Vec2i( 3,0 )
  188. Endif
  189. _canvas.AmbientLight=New Color( _ambient,_ambient,_ambient,1 )
  190. _canvas.Viewport=_viewport
  191. _canvas.Clear( Color.Blue )
  192. _canvas.PushMatrix()
  193. _canvas.Translate( Width/2,Height/2 )
  194. _canvas.Rotate( _rotz )
  195. _canvas.Translate( -Width/2,-Height/2 )
  196. For Local x:=0 Until _imageRepeat
  197. For Local y:=0 Until _imageRepeat
  198. _canvas.DrawImage(
  199. _bumpImage,
  200. (Width-_imageRepeat*_bumpImage.Width)/2+x*_bumpImage.Width,
  201. (Height-_imageRepeat*_bumpImage.Height)/2+y*_bumpImage.Height )
  202. Next
  203. Next
  204. _canvas.PopMatrix()
  205. _canvas.DrawImage( _heartImage,Width/2,Height/3 )
  206. _canvas.DrawImage( _logoImage,Width/2,Height/2 )
  207. _canvas.Color=Color.Yellow
  208. _canvas.DrawText( "Hello World!",0,0 )
  209. _canvas.Color=Color.White
  210. _canvas.AddShadowCaster( _logoCaster,Width/2,Height/2 )
  211. _canvas.AddLight( _light,Mouse.X-_viewport.Origin.x,Mouse.Y-_viewport.Origin.y )
  212. _canvas.Flush()
  213. End
  214. End
  215. Function Main()
  216. New AppInstance
  217. New MyWindow
  218. App.Run()
  219. End