teapot.bmx 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. ' The UTAH Teapot. See <a href="http://sjbaker.org/teapot/" target="_blank">sjbaker.org/teapot/</a> For more information
  2. ' This Function returns an OpenGL display list.
  3. ' BlitzMax port by Peter Scheutz 2004.12.18
  4. Function ogld_TeaPot(grid%)
  5. Local x#,y#,z#
  6. Local i, n
  7. Local verts
  8. Local teaList
  9. Local rimbank
  10. Local bodybank1
  11. Local bodybank2
  12. Local lidbank1
  13. Local lidbank2
  14. Local handlebank1
  15. Local handlebank2
  16. Local spoutbank1
  17. Local spoutbank2
  18. verts=CreateBank(3*4*119)
  19. RestoreData teaPotVerts
  20. For i=0 To 118
  21. ReadData x#
  22. ReadData y#
  23. ReadData z#
  24. PokeFloat verts,i*12,x
  25. PokeFloat verts,i*12+4,y
  26. PokeFloat verts,i*12+8,z
  27. Next
  28. rimbank=CreateBank(16*4*3)
  29. bodybank1=CreateBank(16*4*3)
  30. bodybank2=CreateBank(16*4*3)
  31. lidbank1=CreateBank(16*4*3)
  32. lidbank2=CreateBank(16*4*3)
  33. handlebank1=CreateBank(16*4*3)
  34. handlebank2=CreateBank(16*4*3)
  35. spoutbank1=CreateBank(16*4*3)
  36. spoutbank2=CreateBank(16*4*3)
  37. ' rim
  38. RestoreData teaPotRim
  39. For n=0 To 15
  40. ReadData i
  41. PokeFloat rimbank,n*12,PeekFloat(verts,i*12)
  42. PokeFloat rimbank,n*12+4,PeekFloat(verts,i*12+4)
  43. PokeFloat rimbank,n*12+8,PeekFloat(verts,i*12+8)
  44. Next
  45. ' body
  46. RestoreData teaPotBody
  47. For n=0 To 15
  48. ReadData i
  49. PokeFloat bodybank1,n*12,PeekFloat(verts,i*12)
  50. PokeFloat bodybank1,n*12+4,PeekFloat(verts,i*12+4)
  51. PokeFloat bodybank1,n*12+8,PeekFloat(verts,i*12+8)
  52. Next
  53. For n=0 To 15
  54. ReadData i
  55. PokeFloat bodybank2,n*12,PeekFloat(verts,i*12)
  56. PokeFloat bodybank2,n*12+4,PeekFloat(verts,i*12+4)
  57. PokeFloat bodybank2,n*12+8,PeekFloat(verts,i*12+8)
  58. Next
  59. ' lid
  60. RestoreData teaPotLid
  61. For n=0 To 15
  62. ReadData i
  63. PokeFloat lidbank1,n*12,PeekFloat(verts,i*12)
  64. PokeFloat lidbank1,n*12+4,PeekFloat(verts,i*12+4)
  65. PokeFloat lidbank1,n*12+8,PeekFloat(verts,i*12+8)
  66. Next
  67. For n=0 To 15
  68. ReadData i
  69. PokeFloat lidbank2,n*12,PeekFloat(verts,i*12)
  70. PokeFloat lidbank2,n*12+4,PeekFloat(verts,i*12+4)
  71. PokeFloat lidbank2,n*12+8,PeekFloat(verts,i*12+8)
  72. Next
  73. ' handle
  74. RestoreData teaPotHandle
  75. For n=0 To 15
  76. ReadData i
  77. PokeFloat handlebank1,n*12,PeekFloat(verts,i*12)
  78. PokeFloat handlebank1,n*12+4,PeekFloat(verts,i*12+4)
  79. PokeFloat handlebank1,n*12+8,PeekFloat(verts,i*12+8)
  80. Next
  81. For n=0 To 15
  82. ReadData i
  83. PokeFloat handlebank2,n*12,PeekFloat(verts,i*12)
  84. PokeFloat handlebank2,n*12+4,PeekFloat(verts,i*12+4)
  85. PokeFloat handlebank2,n*12+8,PeekFloat(verts,i*12+8)
  86. Next
  87. ' Spout
  88. RestoreData teaPotSpout
  89. For n=0 To 15
  90. ReadData i
  91. PokeFloat spoutbank1,n*12,PeekFloat(verts,i*12)
  92. PokeFloat spoutbank1,n*12+4,PeekFloat(verts,i*12+4)
  93. PokeFloat spoutbank1,n*12+8,PeekFloat(verts,i*12+8)
  94. Next
  95. For n=0 To 15
  96. ReadData i
  97. PokeFloat spoutbank2,n*12,PeekFloat(verts,i*12)
  98. PokeFloat spoutbank2,n*12+4,PeekFloat(verts,i*12+4)
  99. PokeFloat spoutbank2,n*12+8,PeekFloat(verts,i*12+8)
  100. Next
  101. teaList = glGenLists(1)
  102. glNewList teaList, GL_COMPILE
  103. glPushMatrix
  104. glRotatef 270, 1, 0, 0
  105. glEnable GL_MAP2_VERTEX_3
  106. glMapGrid2f grid, 0, 1, grid, 0, 1
  107. For i=0 To 3
  108. glMap2f GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, Float Ptr( BankBuf(rimbank))
  109. glEvalMesh2 GL_FILL, 0, grid, 0, grid
  110. glMap2f GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, Float Ptr( BankBuf(bodybank1))
  111. glEvalMesh2 GL_FILL, 0, grid, 0, grid
  112. glMap2f GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, Float Ptr( BankBuf(bodybank2))
  113. glEvalMesh2 GL_FILL, 0, grid, 0, grid
  114. glMap2f GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, Float Ptr( BankBuf(lidbank1))
  115. glEvalMesh2 GL_FILL, 0, grid, 0, grid
  116. glMap2f GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, Float Ptr( BankBuf(lidbank2))
  117. glEvalMesh2 GL_FILL, 0, grid, 0, grid
  118. glRotatef 90, 0, 0, 1
  119. Next
  120. For i=0 To 1
  121. glMap2f GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, Float Ptr( BankBuf(handlebank1))
  122. glEvalMesh2 GL_FILL, 0, grid, 0, grid
  123. glMap2f GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, Float Ptr( BankBuf(handlebank2))
  124. glEvalMesh2 GL_FILL, 0, grid, 0, grid
  125. glMap2f GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, Float Ptr( BankBuf(spoutbank1))
  126. glEvalMesh2 GL_FILL, 0, grid, 0, grid
  127. glMap2f GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, Float Ptr( BankBuf(spoutbank2))
  128. glEvalMesh2 GL_FILL, 0, grid, 0, grid
  129. glScalef 1,-1,1
  130. Next
  131. glDisable GL_MAP2_VERTEX_3
  132. glPopMatrix
  133. glEndList
  134. Return teaList
  135. End Function
  136. #teaPotRim
  137. DefData 102, 103, 104, 105, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
  138. #teaPotBody
  139. DefData 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27
  140. DefData 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40
  141. #teaPotLid
  142. DefData 96, 96, 96, 96, 97, 98, 99, 100, 101, 101, 101, 101, 0, 1, 2, 3
  143. DefData 0, 1, 2, 3, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117
  144. #teaPotHandle
  145. DefData 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56
  146. DefData 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 28, 65, 66, 67
  147. #teaPotSpout
  148. DefData 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83
  149. DefData 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95
  150. #teaPotVerts
  151. DefData 0.2000, 0.0000, 2.70000 , 0.2000, -0.1120, 2.70000 , 0.1120, -0.2000, 2.70000
  152. DefData 0.0000, -0.2000, 2.70000 , 1.3375, 0.0000, 2.53125 , 1.3375, -0.7490, 2.53125
  153. DefData 0.7490, -1.3375, 2.53125 , 0.0000, -1.3375, 2.53125 , 1.4375, 0.0000, 2.53125
  154. DefData 1.4375, -0.8050, 2.53125 , 0.8050, -1.4375, 2.53125 , 0.0000, -1.4375, 2.53125
  155. DefData 1.5000, 0.0000, 2.40000 , 1.5000, -0.8400, 2.40000 , 0.8400, -1.5000, 2.40000
  156. DefData 0.0000, -1.5000, 2.40000 , 1.7500, 0.0000, 1.87500 , 1.7500, -0.9800, 1.87500
  157. DefData 0.9800, -1.7500, 1.87500 , 0.0000, -1.7500, 1.87500 , 2.0000, 0.0000, 1.35000
  158. DefData 2.0000, -1.1200, 1.35000 , 1.1200, -2.0000, 1.35000 , 0.0000, -2.0000, 1.35000
  159. DefData 2.0000, 0.0000, 0.90000 , 2.0000, -1.1200, 0.90000 , 1.1200, -2.0000, 0.90000
  160. DefData 0.0000, -2.0000, 0.90000 , -2.0000, 0.0000, 0.90000 , 2.0000, 0.0000, 0.45000
  161. DefData 2.0000, -1.1200, 0.45000 , 1.1200, -2.0000, 0.45000 , 0.0000, -2.0000, 0.45000
  162. DefData 1.5000, 0.0000, 0.22500 , 1.5000, -0.8400, 0.22500 , 0.8400, -1.5000, 0.22500
  163. DefData 0.0000, -1.5000, 0.22500 , 1.5000, 0.0000, 0.15000 , 1.5000, -0.8400, 0.15000
  164. DefData 0.8400, -1.5000, 0.15000 , 0.0000, -1.5000, 0.15000 , -1.6000, 0.0000, 2.02500
  165. DefData -1.6000, -0.3000, 2.02500 , -1.5000, -0.3000, 2.25000 , -1.5000, 0.0000, 2.25000
  166. DefData -2.3000, 0.0000, 2.02500 , -2.3000, -0.3000, 2.02500 , -2.5000, -0.3000, 2.25000
  167. DefData -2.5000, 0.0000, 2.25000 , -2.7000, 0.0000, 2.02500 , -2.7000, -0.3000, 2.02500
  168. DefData -3.0000, -0.3000, 2.25000 , -3.0000, 0.0000, 2.25000 , -2.7000, 0.0000, 1.80000
  169. DefData -2.7000, -0.3000, 1.80000 , -3.0000, -0.3000, 1.80000 , -3.0000, 0.0000, 1.80000
  170. DefData -2.7000, 0.0000, 1.57500 , -2.7000, -0.3000, 1.57500 , -3.0000, -0.3000, 1.35000
  171. DefData -3.0000, 0.0000, 1.35000 , -2.5000, 0.0000, 1.12500 , -2.5000, -0.3000, 1.12500
  172. DefData -2.6500, -0.3000, 0.93750 , -2.6500, 0.0000, 0.93750 , -2.0000, -0.3000, 0.90000
  173. DefData -1.9000, -0.3000, 0.60000 , -1.9000, 0.0000, 0.60000 , 1.7000, 0.0000, 1.42500
  174. DefData 1.7000, -0.6600, 1.42500 , 1.7000, -0.6600, 0.60000 , 1.7000, 0.0000, 0.60000
  175. DefData 2.6000, 0.0000, 1.42500 , 2.6000, -0.6600, 1.42500 , 3.1000, -0.6600, 0.82500
  176. DefData 3.1000, 0.0000, 0.82500 , 2.3000, 0.0000, 2.10000 , 2.3000, -0.2500, 2.10000
  177. DefData 2.4000, -0.2500, 2.02500 , 2.4000, 0.0000, 2.02500 , 2.7000, 0.0000, 2.40000
  178. DefData 2.7000, -0.2500, 2.40000 , 3.3000, -0.2500, 2.40000 , 3.3000, 0.0000, 2.40000
  179. DefData 2.8000, 0.0000, 2.47500 , 2.8000, -0.2500, 2.47500 , 3.5250, -0.2500, 2.49375
  180. DefData 3.5250, 0.0000, 2.49375 , 2.9000, 0.0000, 2.47500 , 2.9000, -0.1500, 2.47500
  181. DefData 3.4500, -0.1500, 2.51250 , 3.4500, 0.0000, 2.51250 , 2.8000, 0.0000, 2.40000
  182. DefData 2.8000, -0.1500, 2.40000 , 3.2000, -0.1500, 2.40000 , 3.2000, 0.0000, 2.40000
  183. DefData 0.0000, 0.0000, 3.15000 , 0.8000, 0.0000, 3.15000 , 0.8000, -0.4500, 3.15000
  184. DefData 0.4500, -0.8000, 3.15000 , 0.0000, -0.8000, 3.15000 , 0.0000, 0.0000, 2.85000
  185. DefData 1.4000, 0.0000, 2.40000 , 1.4000, -0.7840, 2.40000 , 0.7840, -1.4000, 2.40000
  186. DefData 0.0000, -1.4000, 2.40000 , 0.4000, 0.0000, 2.55000 , 0.4000, -0.2240, 2.55000
  187. DefData 0.2240, -0.4000, 2.55000 , 0.0000, -0.4000, 2.55000 , 1.3000, 0.0000, 2.55000
  188. DefData 1.3000, -0.7280, 2.55000 , 0.7280, -1.3000, 2.55000 , 0.0000, -1.3000, 2.55000
  189. DefData 1.3000, 0.0000, 2.40000 , 1.3000, -0.7280, 2.40000 , 0.7280, -1.3000, 2.40000
  190. DefData 0.0000, -1.3000, 2.40000 , 0.0000, 0.0000, 0.00000