glcube.bmx 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. 'Simple GL cube demo
  2. 'Written by Birdie
  3. Import MaxGui.Drivers
  4. Strict
  5. SetGraphicsDriver GLGraphicsDriver(),GRAPHICS_BACKBUFFER|GRAPHICS_DEPTHBUFFER
  6. Global ax#, ay#,tim#
  7. Local w:TGadget = CreateWindow("Easy GL Cube in a GUI window", 10, 10, 512, 512 )
  8. Local c:TGadget = CreateCanvas(0,0,w.ClientWidth(),w.ClientHeight(),w,0)
  9. c.setlayout 1,1,1,1
  10. CreateTimer( 60 )
  11. While True
  12. WaitEvent()
  13. Select EventID()
  14. Case EVENT_WINDOWCLOSE
  15. End
  16. Case EVENT_TIMERTICK
  17. RedrawGadget c
  18. Case EVENT_GADGETPAINT
  19. SetGraphics CanvasGraphics( c )
  20. Local wid = c.ClientWidth()
  21. Local hgt = c.ClientHeight()
  22. Local asp# = Float(wid)/Float(hgt)
  23. glViewport 0,0,wid,hgt
  24. glMatrixMode GL_PROJECTION
  25. glLoadIdentity
  26. gluPerspective 45, asp, 1, 100
  27. gltranslatef 0,0,-50+tim
  28. tim=20*Cos(MilliSecs()/10.0)
  29. glMatrixMode GL_MODELVIEW
  30. glLoadIdentity
  31. Local global_ambient#[]=[0.6#, 0.5#, 0.3#, 1.0#]
  32. Local light0pos#[]= [0.0#, 5.0#, 10.0#, 1.0#]
  33. Local light0ambient#[]= [0.5#, 0.5#, 0.5#, 1.0#]
  34. Local light0diffuse#[]= [0.3#, 0.3#, 0.3#, 1.0#]
  35. Local light0specular#[]=[0.8#, 0.8#, 0.8#, 1.0#]
  36. Local lmodel_ambient#[]=[ 0.2#,0.2#,0.2#,1.0#]
  37. glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient)
  38. glLightModelfv(GL_LIGHT_MODEL_AMBIENT, global_ambient)
  39. glLightfv(GL_LIGHT0, GL_POSITION, light0pos)
  40. glLightfv(GL_LIGHT0, GL_AMBIENT, light0ambient)
  41. glLightfv(GL_LIGHT0, GL_DIFFUSE, light0diffuse)
  42. glLightfv(GL_LIGHT0, GL_SPECULAR, light0specular)
  43. glEnable(GL_LIGHTING)
  44. glEnable(GL_LIGHT0)
  45. glShadeModel(GL_SMOOTH)
  46. glMateriali(GL_FRONT, GL_SHININESS, 128)
  47. glClearColor 0,0,0.5,1
  48. glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
  49. glEnable(GL_DEPTH_TEST)
  50. glRotatef ax,1,0,0
  51. glRotatef ay,0,1,0
  52. ax:+1
  53. ay:+5
  54. DrawSizeCube(7)
  55. Flip
  56. EndSelect
  57. Wend
  58. Function DrawSizeCube(size#)
  59. size=-size
  60. 'Front Face
  61. glBegin(GL_TRIANGLE_STRIP)
  62. glNormal3f( 0.0, 0.0, 1.0)
  63. glVertex3f( size, size,-size)
  64. glNormal3f( 0.0, 0.0, 1.0)
  65. glVertex3f(-size, size,-size)
  66. glNormal3f( 0.0, 0.0, 1.0)
  67. glVertex3f( size,-size,-size)
  68. glNormal3f( 0.0, 0.0, 1.0)
  69. glVertex3f(-size,-size,-size)
  70. glEnd
  71. 'Back Face
  72. glNormal3f( 0.0, 0.0, -1.0)
  73. glBegin(GL_TRIANGLE_STRIP)
  74. glVertex3f(-size, size, size)
  75. glVertex3f( size, size, size)
  76. glVertex3f(-size,-size, size)
  77. glVertex3f( size,-size, size)
  78. glEnd
  79. 'Right Face
  80. glNormal3f( 1.0, 0.0, 0.0)
  81. glBegin(GL_TRIANGLE_STRIP)
  82. glVertex3f(-size, size,-size)
  83. glVertex3f(-size, size, size)
  84. glVertex3f(-size,-size,-size)
  85. glVertex3f(-size,-size, size)
  86. glEnd
  87. 'Left Face
  88. glNormal3f( -1.0, 0.0, 0.0)
  89. glBegin(GL_TRIANGLE_STRIP)
  90. glVertex3f( size, size, size)
  91. glVertex3f( size, size,-size)
  92. glVertex3f( size,-size, size)
  93. glVertex3f( size,-size,-size)
  94. glEnd
  95. 'Bottom Face
  96. glNormal3f( 0.0, -1.0, 0.0)
  97. glBegin(GL_TRIANGLE_STRIP)
  98. glVertex3f( size, size,-size)
  99. glVertex3f( size, size, size)
  100. glVertex3f(-size, size,-size)
  101. glVertex3f(-size, size, size)
  102. glEnd
  103. 'Top Face
  104. glNormal3f( 0.0, 1.0, 0.0)
  105. glBegin(GL_TRIANGLE_STRIP)
  106. glVertex3f( size,-size,-size)
  107. glVertex3f(-size,-size,-size)
  108. glVertex3f( size,-size, size)
  109. glVertex3f(-size,-size, size)
  110. glEnd
  111. End Function