Advertisement
Guest User

Untitled

a guest
May 24th, 2015
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.19 KB | None | 0 0
  1. #ifndef TEST_MODEL_CORNEL_BOX_H
  2. #define TEST_MODEL_CORNEL_BOX_H
  3.  
  4. // Defines a simple test model: The Cornel Box
  5.  
  6. #include <glm/glm.hpp>
  7. #include <vector>
  8. #include "windows.h"
  9. #include <string>
  10. #include "cstring"
  11. // Used to describe a triangular surface:
  12. class Triangle
  13. {
  14. public:
  15. glm::vec3 v0;
  16. glm::vec3 v1;
  17. glm::vec3 v2;
  18. glm::vec3 normal;
  19. glm::vec3 color;
  20.  
  21. Triangle( glm::vec3 v0, glm::vec3 v1, glm::vec3 v2, glm::vec3 color )
  22. : v0(v0), v1(v1), v2(v2), color(color)
  23. {
  24. ComputeNormal();
  25. }
  26.  
  27. void ComputeNormal()
  28. {
  29. glm::vec3 e1 = v1-v0;
  30. glm::vec3 e2 = v2-v0;
  31. normal = glm::normalize( glm::cross( e2, e1 ) );
  32. }
  33. };
  34.  
  35. // Loads the Cornell Box. It is scaled to fill the volume:
  36. // -1 <= x <= +1
  37. // -1 <= y <= +1
  38. // -1 <= z <= +1
  39. void LoadTestModel( std::vector<Triangle>& triangles )
  40. {
  41. using glm::vec3;
  42.  
  43. // Defines colors:
  44. vec3 red( 0.75f, 0.15f, 0.15f );
  45. vec3 yellow( 0.75f, 0.75f, 0.15f );
  46. vec3 green( 0.15f, 0.75f, 0.15f );
  47. vec3 cyan( 0.15f, 0.75f, 0.75f );
  48. vec3 blue( 0.15f, 0.15f, 0.75f );
  49. vec3 purple( 0.75f, 0.15f, 0.75f );
  50. vec3 white( 0.75f, 0.75f, 0.75f );
  51.  
  52. triangles.clear();
  53. triangles.reserve( 5*2*3 );
  54.  
  55. // ---------------------------------------------------------------------------
  56. // Room
  57.  
  58. float L = 555; // Length of Cornell Box side.
  59.  
  60. vec3 A(L,0,0);
  61. vec3 B(0,0,0);
  62. vec3 C(L,0,L);
  63. vec3 D(0,0,L);
  64.  
  65. vec3 E(L,L,0);
  66. vec3 F(0,L,0);
  67. vec3 G(L,L,L);
  68. vec3 H(0,L,L);
  69.  
  70. // Floor:
  71. triangles.push_back( Triangle( C, B, A, green ) );
  72. triangles.push_back( Triangle( C, D, B, green ) );
  73.  
  74. // Left wall
  75. triangles.push_back( Triangle( A, E, C, purple ) );
  76. triangles.push_back( Triangle( C, E, G, purple ) );
  77.  
  78. // Right wall
  79. triangles.push_back( Triangle( F, B, D, yellow ) );
  80. triangles.push_back( Triangle( H, F, D, yellow ) );
  81.  
  82. // Ceiling
  83. triangles.push_back( Triangle( E, F, G, cyan ) );
  84. triangles.push_back( Triangle( F, H, G, cyan ) );
  85.  
  86. // Back wall
  87. triangles.push_back( Triangle( G, D, C, white ) );
  88. triangles.push_back( Triangle( G, H, D, white ) );
  89.  
  90. // ---------------------------------------------------------------------------
  91. // Short block
  92.  
  93. A = vec3(290,0,114);
  94. B = vec3(130,0, 65);
  95. C = vec3(240,0,272);
  96. D = vec3( 82,0,225);
  97.  
  98. E = vec3(290,165,114);
  99. F = vec3(130,165, 65);
  100. G = vec3(240,165,272);
  101. H = vec3( 82,165,225);
  102.  
  103. // Front
  104. triangles.push_back( Triangle(E,B,A,red) );
  105. triangles.push_back( Triangle(E,F,B,red) );
  106.  
  107. // Front
  108. triangles.push_back( Triangle(F,D,B,red) );
  109. triangles.push_back( Triangle(F,H,D,red) );
  110.  
  111. // BACK
  112. triangles.push_back( Triangle(H,C,D,red) );
  113. triangles.push_back( Triangle(H,G,C,red) );
  114.  
  115. // LEFT
  116. triangles.push_back( Triangle(G,E,C,red) );
  117. triangles.push_back( Triangle(E,A,C,red) );
  118.  
  119. // TOP
  120. triangles.push_back( Triangle(G,F,E,red) );
  121. triangles.push_back( Triangle(G,H,F,red) );
  122.  
  123. // ---------------------------------------------------------------------------
  124. // Tall block
  125.  
  126. A = vec3(423,0,247);
  127. B = vec3(265,0,296);
  128. C = vec3(472,0,406);
  129. D = vec3(314,0,456);
  130.  
  131. E = vec3(423,330,247);
  132. F = vec3(265,330,296);
  133. G = vec3(472,330,406);
  134. H = vec3(314,330,456);
  135.  
  136. // Front
  137. triangles.push_back( Triangle(E,B,A,blue) );
  138. triangles.push_back( Triangle(E,F,B,blue) );
  139.  
  140. // Front
  141. triangles.push_back( Triangle(F,D,B,blue) );
  142. triangles.push_back( Triangle(F,H,D,blue) );
  143.  
  144. // BACK
  145. triangles.push_back( Triangle(H,C,D,blue) );
  146. triangles.push_back( Triangle(H,G,C,blue) );
  147.  
  148. // LEFT
  149. triangles.push_back( Triangle(G,E,C,blue) );
  150. triangles.push_back( Triangle(E,A,C,blue) );
  151.  
  152. // TOP
  153. triangles.push_back( Triangle(G,F,E,blue) );
  154. triangles.push_back( Triangle(G,H,F,blue) );
  155.  
  156.  
  157. // ----------------------------------------------
  158. // Scale to the volume [-1,1]^3
  159.  
  160.  
  161. for( size_t i=0; i<triangles.size(); ++i )
  162. {
  163. triangles[i].v0 *= 2/L;
  164. triangles[i].v1 *= 2/L;
  165. triangles[i].v2 *= 2/L;
  166.  
  167. triangles[i].v0 -= vec3(1,1,1);
  168. triangles[i].v1 -= vec3(1,1,1);
  169. triangles[i].v2 -= vec3(1,1,1);
  170.  
  171. triangles[i].v0.x *= -1;
  172. triangles[i].v1.x *= -1;
  173. triangles[i].v2.x *= -1;
  174.  
  175. triangles[i].v0.y *= -1;
  176. triangles[i].v1.y *= -1;
  177. triangles[i].v2.y *= -1;
  178.  
  179. triangles[i].ComputeNormal();
  180. }
  181. }
  182.  
  183. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement