glcube.bmx 5.2 KB

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