/tutorial/vision/opengl/NeHe/lesson06/cube.e

http://github.com/tybor/Liberty · Specman e · 142 lines · 112 code · 29 blank · 1 comment · 1 complexity · 4988cf0fead1f7bfb1e4ba47b1314c88 MD5 · raw file

  1. class CUBE
  2. inherit
  3. GL_OBJECT
  4. creation
  5. make_at_origin, make_with_position
  6. feature{ANY}
  7. build is
  8. do
  9. create vertices.make(24)
  10. vertices.put(create {VERTEX}.make(-1, 1, 1), 0)
  11. vertices.put(create {VERTEX}.make(-1, -1, 1), 1)
  12. vertices.put(create {VERTEX}.make(1, -1, 1), 2)
  13. vertices.put(create {VERTEX}.make(1, 1, 1), 3)
  14. vertices.put(create {VERTEX}.make(1, 1, -1), 4)
  15. vertices.put(create {VERTEX}.make(-1, 1, -1), 5)
  16. vertices.put(create {VERTEX}.make(-1, -1, -1), 6)
  17. vertices.put(create {VERTEX}.make(1, -1, -1), 7)
  18. vertices.put(create {VERTEX}.make(-1, 1, 1), 8)
  19. vertices.put(create {VERTEX}.make(-1, -1, 1), 9)
  20. vertices.put(create {VERTEX}.make(1, -1, 1), 10)
  21. vertices.put(create {VERTEX}.make(1, 1, 1), 11)
  22. vertices.put(create {VERTEX}.make(1, 1, -1), 12)
  23. vertices.put(create {VERTEX}.make(-1, 1, -1), 13)
  24. vertices.put(create {VERTEX}.make(-1, -1, -1), 14)
  25. vertices.put(create {VERTEX}.make(1, -1, -1), 15)
  26. vertices.put(create {VERTEX}.make(-1, 1, 1), 16)
  27. vertices.put(create {VERTEX}.make(-1, -1, 1), 17)
  28. vertices.put(create {VERTEX}.make(1, -1, 1), 18)
  29. vertices.put(create {VERTEX}.make(1, 1, 1), 19)
  30. vertices.put(create {VERTEX}.make(1, 1, -1), 20)
  31. vertices.put(create {VERTEX}.make(-1, 1, -1), 21)
  32. vertices.put(create {VERTEX}.make(-1, -1, -1), 22)
  33. vertices.put(create {VERTEX}.make(1, -1, -1), 23)
  34. -- Here, vertices can only be shared between two facets of the same cube's face because of texture mapping
  35. facets.add_last(create {FACET}.make(vertices.item(0), vertices.item(1), vertices.item(3)))
  36. facets.add_last(create {FACET}.make(vertices.item(1), vertices.item(2), vertices.item(3)))
  37. facets.add_last(create {FACET}.make(vertices.item(11), vertices.item(10), vertices.item(4)))
  38. facets.add_last(create {FACET}.make(vertices.item(10), vertices.item(7), vertices.item(4)))
  39. facets.add_last(create {FACET}.make(vertices.item(5), vertices.item(6), vertices.item(8)))
  40. facets.add_last(create {FACET}.make(vertices.item(6), vertices.item(9), vertices.item(8)))
  41. facets.add_last(create {FACET}.make(vertices.item(13), vertices.item(16), vertices.item(12)))
  42. facets.add_last(create {FACET}.make(vertices.item(16), vertices.item(19), vertices.item(12)))
  43. facets.add_last(create {FACET}.make(vertices.item(17), vertices.item(14), vertices.item(18)))
  44. facets.add_last(create {FACET}.make(vertices.item(14), vertices.item(15), vertices.item(18)))
  45. facets.add_last(create {FACET}.make(vertices.item(20), vertices.item(23), vertices.item(21)))
  46. facets.add_last(create {FACET}.make(vertices.item(23), vertices.item(22), vertices.item(21)))
  47. load_textures
  48. facets.item(facets.lower + 0).set_texture(texture)
  49. facets.item(facets.lower + 0).vertex1.set_2d_texture_coord(0, 1)
  50. facets.item(facets.lower + 0).vertex2.set_2d_texture_coord(0, 0)
  51. facets.item(facets.lower + 0).vertex3.set_2d_texture_coord(1, 1)
  52. facets.item(facets.lower + 1).set_texture(texture)
  53. facets.item(facets.lower + 1).vertex1.set_2d_texture_coord(0, 0)
  54. facets.item(facets.lower + 1).vertex2.set_2d_texture_coord(1, 0)
  55. facets.item(facets.lower + 1).vertex3.set_2d_texture_coord(1, 1)
  56. facets.item(facets.lower + 2).set_texture(texture)
  57. facets.item(facets.lower + 2).vertex1.set_2d_texture_coord(0, 1)
  58. facets.item(facets.lower + 2).vertex2.set_2d_texture_coord(0, 0)
  59. facets.item(facets.lower + 2).vertex3.set_2d_texture_coord(1, 1)
  60. facets.item(facets.lower + 3).set_texture(texture)
  61. facets.item(facets.lower + 3).vertex1.set_2d_texture_coord(0, 0)
  62. facets.item(facets.lower + 3).vertex2.set_2d_texture_coord(1, 0)
  63. facets.item(facets.lower + 3).vertex3.set_2d_texture_coord(1, 1)
  64. facets.item(facets.lower + 4).set_texture(texture)
  65. facets.item(facets.lower + 4).vertex1.set_2d_texture_coord(0, 1)
  66. facets.item(facets.lower + 4).vertex2.set_2d_texture_coord(0, 0)
  67. facets.item(facets.lower + 4).vertex3.set_2d_texture_coord(1, 1)
  68. facets.item(facets.lower + 5).set_texture(texture)
  69. facets.item(facets.lower + 5).vertex1.set_2d_texture_coord(0, 0)
  70. facets.item(facets.lower + 5).vertex2.set_2d_texture_coord(1, 0)
  71. facets.item(facets.lower + 5).vertex3.set_2d_texture_coord(1, 1)
  72. facets.item(facets.lower + 6).set_texture(texture)
  73. facets.item(facets.lower + 6).vertex1.set_2d_texture_coord(0, 1)
  74. facets.item(facets.lower + 6).vertex2.set_2d_texture_coord(0, 0)
  75. facets.item(facets.lower + 6).vertex3.set_2d_texture_coord(1, 1)
  76. facets.item(facets.lower + 7).set_texture(texture)
  77. facets.item(facets.lower + 7).vertex1.set_2d_texture_coord(0, 0)
  78. facets.item(facets.lower + 7).vertex2.set_2d_texture_coord(1, 0)
  79. facets.item(facets.lower + 7).vertex3.set_2d_texture_coord(1, 1)
  80. facets.item(facets.lower + 8).set_texture(texture)
  81. facets.item(facets.lower + 8).vertex1.set_2d_texture_coord(0, 1)
  82. facets.item(facets.lower + 8).vertex2.set_2d_texture_coord(0, 0)
  83. facets.item(facets.lower + 8).vertex3.set_2d_texture_coord(1, 1)
  84. facets.item(facets.lower + 9).set_texture(texture)
  85. facets.item(facets.lower + 9).vertex1.set_2d_texture_coord(0, 0)
  86. facets.item(facets.lower + 9).vertex2.set_2d_texture_coord(1, 0)
  87. facets.item(facets.lower + 9).vertex3.set_2d_texture_coord(1, 1)
  88. facets.item(facets.lower + 10).set_texture(texture)
  89. facets.item(facets.lower + 10).vertex1.set_2d_texture_coord(0, 1)
  90. facets.item(facets.lower + 10).vertex2.set_2d_texture_coord(0, 0)
  91. facets.item(facets.lower + 10).vertex3.set_2d_texture_coord(1, 1)
  92. facets.item(facets.lower + 11).set_texture(texture)
  93. facets.item(facets.lower + 11).vertex1.set_2d_texture_coord(0, 0)
  94. facets.item(facets.lower + 11).vertex2.set_2d_texture_coord(1, 0)
  95. facets.item(facets.lower + 11).vertex3.set_2d_texture_coord(1, 1)
  96. end
  97. load_textures is
  98. local
  99. image: BMP_IMG
  100. do
  101. create image.load_from_file("nehe.bmp")
  102. if image.is_loaded then
  103. create texture.make(image)
  104. end
  105. end
  106. turn (angle: REAL) is
  107. do
  108. set_orientation(0.2 * angle, 0.3 * angle, 0.4 * angle)
  109. end
  110. feature{}
  111. texture: TEXTURE_2D
  112. vertices: FAST_ARRAY[VERTEX]
  113. end