Advertisement
Guest User

Untitled

a guest
May 21st, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.52 KB | None | 0 0
  1. #include "MyApp.h"
  2.  
  3. #include <math.h>
  4. #include <vector>
  5.  
  6. #include <array>
  7. #include <list>
  8. #include <tuple>
  9. #include <imgui/imgui.h>
  10. #include <iostream>
  11.  
  12. #include <stdlib.h> /* srand, rand */
  13. #include <time.h> /* time */
  14.  
  15. CMyApp::CMyApp(void)
  16. {
  17. m_camera.SetView(glm::vec3(5, 5, 5), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0));
  18. }
  19.  
  20.  
  21. CMyApp::~CMyApp(void)
  22. {
  23. std::cout << "dtor!\n";
  24. }
  25.  
  26. float CMyApp::getHeight(int x, int z) {
  27. return height[x + z * mapSize + 1];
  28. }
  29.  
  30.  
  31. int db;
  32.  
  33. glm::vec3 CMyApp::GetPos(float u, float v)
  34. {
  35. u *= 2 * 3.1415f;
  36. v *= 3.1415f;
  37. float cu = cosf(u), su = sinf(u), cv = cosf(v), sv = sinf(v);
  38. float r = 2;
  39.  
  40. return glm::vec3(r * cu * sv, r * su * sv, r * cv);
  41. }
  42.  
  43. glm::vec3 CMyApp::GetNorm(float u, float v)
  44. {
  45. // Képlettel
  46. u *= 2 * 3.1415f;
  47. v *= 3.1415f;
  48. float cu = cosf(u), su = sinf(u), cv = cosf(v), sv = sinf(v);
  49. return glm::vec3(cu * sv, cv, su * sv);
  50.  
  51. }
  52.  
  53. void CMyApp::initFa() {
  54. std::vector<glm::vec3> vert;
  55. vert.reserve((resolution + 1) * (resolution + 1));
  56. for (int i = 0; i <= resolution; ++i)
  57. for (int j = 0; j <= resolution; ++j)
  58. {
  59. float u = i / (float)resolution;
  60. float v = j / (float)resolution;
  61. vert.push_back(GetPos(u, v));
  62. vert.push_back(GetNorm(u, v));
  63. vert.push_back(glm::vec3(GetTex(u, v),0));
  64. }
  65. std::vector<int> indices;
  66. indices.resize(3 * 2 * resolution * resolution);
  67. for (int i = 0; i < resolution; ++i)
  68. for (int j = 0; j < resolution; ++j)
  69. {
  70. indices[6 * i + j * 3 * 2 * resolution +0] = (i)+(j) * (resolution + 1);
  71. indices[6 * i + j * 3 * 2 * resolution +1] = (i + 1) + (j) * (resolution + 1);
  72. indices[6 * i + j * 3 * 2 * resolution +2] = (i)+(j + 1) * (resolution + 1);
  73. indices[6 * i + j * 3 * 2 * resolution +3] = (i + 1) + (j) * (resolution + 1);
  74. indices[6 * i + j * 3 * 2 * resolution +4] = (i + 1) + (j + 1) * (resolution + 1);
  75. indices[6 * i + j * 3 * 2 * resolution +5] = (i)+(j + 1) * (resolution + 1);
  76. }
  77. m_gpuBufferPos_fa.BufferData(vert);
  78. m_gpuBufferIndices_fa.BufferData(indices);
  79.  
  80.  
  81. m_vao_fa.Init(
  82. {
  83. // 0-ás attribútum "lényegében" glm::vec3-ak sorozata és az adatok az m_gpuBufferPos GPU pufferben vannak
  84. { CreateAttribute< 0, // csatorna: 0
  85. glm::vec3, // CPU oldali adattípus amit a 0-ás csatorna attribútumainak meghatározására használtunk <- az eljárás a glm::vec3-ból kikövetkezteti, hogy 3 darab float-ból áll a 0-ás attribútum
  86. 0, // offset: az attribútum tároló elejétől vett offset-je, byte-ban
  87. sizeof(glm::vec3) * 3 // stride: a következő csúcspont ezen attribútuma hány byte-ra van az aktuálistól
  88. >, m_gpuBufferPos_fa },
  89. { CreateAttribute< 1, // csatorna: 0
  90. glm::vec3, // CPU oldali adattípus amit a 0-ás csatorna attribútumainak meghatározására használtunk <- az eljárás a glm::vec3-ból kikövetkezteti, hogy 3 darab float-ból áll a 0-ás attribútum
  91. sizeof(glm::vec3), // offset: az attribútum tároló elejétől vett offset-je, byte-ban
  92. sizeof(glm::vec3) * 3 // stride: a következő csúcspont ezen attribútuma hány byte-ra van az aktuálistól
  93. >,m_gpuBufferPos_fa
  94. },
  95. { CreateAttribute< 2, // csatorna: 0
  96. glm::vec2, // CPU oldali adattípus amit a 0-ás csatorna attribútumainak meghatározására használtunk <- az eljárás a glm::vec3-ból kikövetkezteti, hogy 3 darab float-ból áll a 0-ás attribútum
  97. sizeof(glm::vec3) * 2, // offset: az attribútum tároló elejétől vett offset-je, byte-ban
  98. sizeof(glm::vec3) * 3 // stride: a következő csúcspont ezen attribútuma hány byte-ra van az aktuálistól
  99. >,m_gpuBufferPos_fa
  100. }
  101. },
  102. m_gpuBufferIndices_fa
  103. );
  104.  
  105. glGenTextures(1, &m_levelTexture);
  106.  
  107. glBindTexture(GL_TEXTURE_2D, m_levelTexture);
  108.  
  109. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  110. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  111. TextureFromFileAttach("leaves.jpg", GL_TEXTURE_2D);
  112. glGenerateMipmap(GL_TEXTURE_2D);
  113.  
  114. glBindTexture(GL_TEXTURE_2D, 0);
  115.  
  116.  
  117.  
  118. m_mesh = ObjParser::parse("henger.obj");
  119. m_mesh->initBuffers();
  120. glGenTextures(1, &m_faTexture);
  121.  
  122. glBindTexture(GL_TEXTURE_2D, m_faTexture);
  123.  
  124. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  125. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  126. TextureFromFileAttach("bark.jpg", GL_TEXTURE_2D);
  127. glGenerateMipmap(GL_TEXTURE_2D);
  128.  
  129. glBindTexture(GL_TEXTURE_2D, 0);
  130.  
  131. }
  132.  
  133. void CMyApp::renderFa() {
  134. m_vao_fa.Bind();
  135. m_program.Use();
  136. glm::mat4 cubeWorld = glm::translate(glm::vec3(0, 5, 0))* glm::scale(glm::vec3(0.75, 0.75, 0.75));
  137. m_program.SetUniform("MVP", m_camera.GetViewProj()*cubeWorld);
  138. glActiveTexture(GL_TEXTURE1);
  139. glBindTexture(GL_TEXTURE_2D, m_levelTexture);
  140. glUniform1i(m_program.GetLocation("tex"), 1);
  141.  
  142.  
  143. glDrawElements(GL_TRIANGLES, 3 * 2 * (resolution) * (resolution), GL_UNSIGNED_INT, nullptr);
  144. cubeWorld = glm::scale(glm::vec3(1, 1, 1))* glm::translate(glm::vec3(0,1.7,0));
  145. m_program.SetUniform("MVP", m_camera.GetViewProj()*cubeWorld);
  146. glActiveTexture(GL_TEXTURE0);
  147. glBindTexture(GL_TEXTURE_2D, m_faTexture);
  148. glUniform1i(m_program.GetLocation("tex"), 0);
  149.  
  150. m_mesh->draw();
  151.  
  152. m_vao_fa.Unbind();
  153. }
  154.  
  155. bool CMyApp::Init()
  156. {
  157. // törlési szín legyen kékes
  158. glClearColor(0.125f, 0.25f, 0.5f, 1.0f);
  159.  
  160. glEnable(GL_CULL_FACE); // kapcsoljuk be a hatrafele nezo lapok eldobasat
  161. glEnable(GL_DEPTH_TEST); // mélységi teszt bekapcsolása (takarás)
  162.  
  163. //
  164. // shaderek betöltése
  165. //
  166.  
  167. // a shadereket tároló program létrehozása az OpenGL-hez hasonló módon:
  168. m_program.AttachShaders({
  169. { GL_VERTEX_SHADER, "myVert.vert"},
  170. { GL_FRAGMENT_SHADER, "myFrag.frag"}
  171. });
  172.  
  173. // attributomok osszerendelese a VAO es shader kozt
  174. m_program.BindAttribLocations({
  175. { 0, "vs_in_pos" }, // VAO 0-as csatorna menjen a vs_in_pos-ba
  176. { 1, "vs_in_norm" }, // VAO 1-es csatorna menjen a vs_in_norm-ba
  177. { 2, "vs_in_tex" } // VAO 2-es csatorna menjen a vs_in_tex-be
  178. });
  179.  
  180. m_program.LinkProgram();
  181.  
  182. // shader program rövid létrehozása, egyetlen függvényhívással a fenti három:
  183. m_programSkybox.Init(
  184. {
  185. { GL_VERTEX_SHADER, "skybox.vert" },
  186. { GL_FRAGMENT_SHADER, "skybox.frag" }
  187. },
  188. {
  189. { 0, "vs_in_pos" }, // VAO 0-as csatorna menjen a vs_in_pos-ba
  190. }
  191. );
  192.  
  193.  
  194. for (int i = 0; i < treeCount; ++i) {
  195.  
  196. treepos.push_back(glm::vec3());
  197. }
  198.  
  199. //
  200. // geometria definiálása (std::vector<...>) és GPU pufferekbe (m_buffer*) való feltöltése BufferData-val
  201. //
  202.  
  203. // vertexek pozíciói:
  204. /*
  205. Az m_gpuBufferPos konstruktora már létrehozott egy GPU puffer azonosítót és a most következő BufferData hívás ezt
  206. 1. bind-olni fogja GL_ARRAY_BUFFER target-re (hiszen m_gpuBufferPos típusa ArrayBuffer) és
  207. 2. glBufferData segítségével áttölti a GPU-ra az argumentumban adott tároló értékeit
  208.  
  209. */
  210.  
  211. //init vertex
  212. srand(time(NULL));
  213. std::vector<glm::vec3> vert;
  214.  
  215. for (int i = 0; i <= mapSize; ++i)
  216. for (int j = 0; j <= mapSize; ++j)
  217. {
  218. float x = i-10;
  219. float z = j-10;
  220. float random = sin(rand());
  221. height.push_back(random);
  222. vert.push_back(glm::vec3(x, random, z));
  223. vert.push_back(glm::vec3(-z, random, x));
  224. vert.push_back(glm::vec3(i - 1 / mapSize, j - 1 / mapSize,0));
  225. }
  226.  
  227. //init indicies
  228. std::vector<int> indicies;
  229. for (int i = 0; i <mapSize; ++i)
  230. for (int j = 0; j <mapSize; ++j)
  231. {
  232.  
  233. indicies.push_back( (i)+(j)*(mapSize+1));
  234. indicies.push_back( (i + 1) + (j)* (mapSize+1 ));
  235. indicies.push_back( (i)+(j + 1) * (mapSize+1 ));
  236. indicies.push_back( (i) + (j+1)* (mapSize+1 ));
  237. indicies.push_back( (i + 1) + (j ) * (mapSize+1 ));
  238. indicies.push_back( (i+1)+(j + 1) * (mapSize+1 ));
  239. }
  240. db = indicies.size();
  241. m_gpuBufferPos.BufferData(vert);
  242. m_gpuBufferIndices.BufferData(indicies);
  243. for (int i = 0; i < indicies.size(); ++i) {
  244. //std::cout << indicies[i] << " ";
  245. }
  246.  
  247.  
  248.  
  249.  
  250. // geometria VAO-ban való regisztrálása
  251. m_vao.Init(
  252. {
  253. // 0-ás attribútum "lényegében" glm::vec3-ak sorozata és az adatok az m_gpuBufferPos GPU pufferben vannak
  254. { CreateAttribute< 0, // csatorna: 0
  255. glm::vec3, // CPU oldali adattípus amit a 0-ás csatorna attribútumainak meghatározására használtunk <- az eljárás a glm::vec3-ból kikövetkezteti, hogy 3 darab float-ból áll a 0-ás attribútum
  256. 0, // offset: az attribútum tároló elejétől vett offset-je, byte-ban
  257. sizeof(glm::vec3) * 3 // stride: a következő csúcspont ezen attribútuma hány byte-ra van az aktuálistól
  258. >, m_gpuBufferPos },
  259. { CreateAttribute< 1, // csatorna: 0
  260. glm::vec3, // CPU oldali adattípus amit a 0-ás csatorna attribútumainak meghatározására használtunk <- az eljárás a glm::vec3-ból kikövetkezteti, hogy 3 darab float-ból áll a 0-ás attribútum
  261. sizeof(glm::vec3), // offset: az attribútum tároló elejétől vett offset-je, byte-ban
  262. sizeof(glm::vec3) * 3 // stride: a következő csúcspont ezen attribútuma hány byte-ra van az aktuálistól
  263. >,m_gpuBufferPos
  264. },
  265. { CreateAttribute< 2, // csatorna: 0
  266. glm::vec2, // CPU oldali adattípus amit a 0-ás csatorna attribútumainak meghatározására használtunk <- az eljárás a glm::vec3-ból kikövetkezteti, hogy 3 darab float-ból áll a 0-ás attribútum
  267. sizeof(glm::vec3)*2, // offset: az attribútum tároló elejétől vett offset-je, byte-ban
  268. sizeof(glm::vec3) * 3 // stride: a következő csúcspont ezen attribútuma hány byte-ra van az aktuálistól
  269. >,m_gpuBufferPos
  270. }
  271. },
  272. m_gpuBufferIndices
  273. );
  274.  
  275. //maptexture
  276. glGenTextures(1, &m_mapTexture);
  277.  
  278. glBindTexture(GL_TEXTURE_2D, m_mapTexture);
  279.  
  280. //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  281. //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  282. TextureFromFileAttach("fasz.jpg", GL_TEXTURE_2D);
  283. glGenerateMipmap(GL_TEXTURE_2D);
  284.  
  285. glBindTexture(GL_TEXTURE_2D, 0);
  286. glGenTextures(1, &m_keretTexture);
  287. //keret
  288. glBindTexture(GL_TEXTURE_2D, m_keretTexture);
  289.  
  290. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  291. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  292. TextureFromFileAttach("forest.jpg", GL_TEXTURE_2D);
  293. glGenerateMipmap(GL_TEXTURE_2D);
  294.  
  295. glBindTexture(GL_TEXTURE_2D, 0);
  296.  
  297. m_gpuBufferPos_keret.BufferData(
  298. std::vector<glm::vec3>{
  299. // hátsó lap
  300. glm::vec3(-1, -1, -1),
  301. glm::vec3(1,1,0),
  302. glm::vec3(1, -1, -1),
  303. glm::vec3(0, 1, 0),
  304. glm::vec3(1, 1, -1),
  305. glm::vec3(0, 0, 0),
  306. glm::vec3(-1, 1, -1),
  307. glm::vec3(1, 0, 0),
  308. // elülső lap
  309. glm::vec3(-1, -1, 1),
  310. glm::vec3(0, 1, 0),
  311. glm::vec3(1, -1, 1),
  312. glm::vec3(1, 1, 0),
  313. glm::vec3(1, 1, 1),
  314. glm::vec3(1, 0, 0),
  315. glm::vec3(-1, 1, 1),
  316. glm::vec3(0, 0, 0),
  317.  
  318. }
  319. );
  320.  
  321. m_gpuBufferIndices_keret.BufferData(
  322. std::vector<int>{
  323. // hátsó lap
  324. 0, 1, 2,
  325. 2, 3, 0,
  326. // elülső lap
  327. 4, 6, 5,
  328. 6, 4, 7,
  329. // bal
  330. 0, 3, 4,
  331. 4, 3, 7,
  332. // jobb
  333. 1, 5, 2,
  334. 5, 6, 2,
  335. }
  336. );
  337. //4, 6, 5,
  338. //6, 4, 7,
  339.  
  340. m_vao_keret.Init(
  341. {
  342. // 0-ás attribútum "lényegében" glm::vec3-ak sorozata és az adatok az m_gpuBufferPos GPU pufferben vannak
  343. { CreateAttribute< 0, // csatorna: 0
  344. glm::vec3, // CPU oldali adattípus amit a 0-ás csatorna attribútumainak meghatározására használtunk <- az eljárás a glm::vec3-ból kikövetkezteti, hogy 3 darab float-ból áll a 0-ás attribútum
  345. 0, // offset: az attribútum tároló elejétől vett offset-je, byte-ban
  346. sizeof(glm::vec3)*2 // stride: a következő csúcspont ezen attribútuma hány byte-ra van az aktuálistól
  347. >, m_gpuBufferPos_keret },
  348. { CreateAttribute< 2, // csatorna: 0
  349. glm::vec3, // CPU oldali adattípus amit a 0-ás csatorna attribútumainak meghatározására használtunk <- az eljárás a glm::vec3-ból kikövetkezteti, hogy 3 darab float-ból áll a 0-ás attribútum
  350. sizeof(glm::vec3), // offset: az attribútum tároló elejétől vett offset-je, byte-ban
  351. sizeof(glm::vec3)*2 // stride: a következő csúcspont ezen attribútuma hány byte-ra van az aktuálistól
  352. >, m_gpuBufferPos_keret }
  353. },
  354. m_gpuBufferIndices_keret
  355. );
  356.  
  357. initFa();
  358. // skybox
  359.  
  360. m_gpuBufferPos_skybox.BufferData(
  361. std::vector<glm::vec3>{
  362. // hátsó lap
  363. glm::vec3(-1, -1, -1),
  364. glm::vec3(1, -1, -1),
  365. glm::vec3(1, 1, -1),
  366. glm::vec3(-1, 1, -1),
  367. // elülső lap
  368. glm::vec3(-1, -1, 1),
  369. glm::vec3(1, -1, 1),
  370. glm::vec3(1, 1, 1),
  371. glm::vec3(-1, 1, 1),
  372.  
  373. }
  374. );
  375.  
  376. m_gpuBufferIndices_skybox.BufferData(
  377. std::vector<int>{
  378. // hátsó lap
  379. 0, 1, 2,
  380. 2, 3, 0,
  381. // elülső lap
  382. 4, 6, 5,
  383. 6, 4, 7,
  384. // bal
  385. 0, 3, 4,
  386. 4, 3, 7,
  387. // jobb
  388. 1, 5, 2,
  389. 5, 6, 2,
  390. // alsó
  391. 1, 0, 4,
  392. 1, 4, 5,
  393. // felső
  394. 3, 2, 6,
  395. 3, 6, 7,
  396. }
  397. );
  398.  
  399. m_vao_skybox.Init(
  400. {
  401. // 0-ás attribútum "lényegében" glm::vec3-ak sorozata és az adatok az m_gpuBufferPos GPU pufferben vannak
  402. { CreateAttribute< 0, // csatorna: 0
  403. glm::vec3, // CPU oldali adattípus amit a 0-ás csatorna attribútumainak meghatározására használtunk <- az eljárás a glm::vec3-ból kikövetkezteti, hogy 3 darab float-ból áll a 0-ás attribútum
  404. 0, // offset: az attribútum tároló elejétől vett offset-je, byte-ban
  405. sizeof(glm::vec3) // stride: a következő csúcspont ezen attribútuma hány byte-ra van az aktuálistól
  406. >, m_gpuBufferPos_skybox },
  407. },
  408. m_gpuBufferIndices_skybox
  409. );
  410.  
  411.  
  412.  
  413. glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS);
  414.  
  415. glGenTextures(1, &m_skyboxTexture);
  416. glBindTexture(GL_TEXTURE_CUBE_MAP, m_skyboxTexture);
  417.  
  418. glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  419. glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  420. glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  421. glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  422. glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
  423.  
  424. TextureFromFileAttach("xpos.png", GL_TEXTURE_CUBE_MAP_POSITIVE_X);
  425. TextureFromFileAttach("xneg.png", GL_TEXTURE_CUBE_MAP_NEGATIVE_X);
  426. TextureFromFileAttach("ypos.png", GL_TEXTURE_CUBE_MAP_POSITIVE_Y);
  427. TextureFromFileAttach("yneg.png", GL_TEXTURE_CUBE_MAP_NEGATIVE_Y);
  428. TextureFromFileAttach("zpos.png", GL_TEXTURE_CUBE_MAP_POSITIVE_Z);
  429. TextureFromFileAttach("zneg.png", GL_TEXTURE_CUBE_MAP_NEGATIVE_Z);
  430.  
  431. glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
  432.  
  433. // kamera
  434. m_camera.SetProj(45.0f, 640.0f / 480.0f, 0.01f, 1000.0f);
  435.  
  436. return true;
  437. }
  438.  
  439. void CMyApp::TextureFromFileAttach(const char* filename, GLuint role) const
  440. {
  441. SDL_Surface* loaded_img = IMG_Load(filename);
  442.  
  443. int img_mode = 0;
  444.  
  445. if (loaded_img == 0)
  446. {
  447. std::cout << "[TextureFromFile] Hiba a kép betöltése közben: " << filename << std::endl;
  448. return;
  449. }
  450.  
  451. #if SDL_BYTEORDER == SDL_LIL_ENDIAN
  452. if (loaded_img->format->BytesPerPixel == 4)
  453. img_mode = GL_RGBA;
  454. else
  455. img_mode = GL_RGB;
  456. #else
  457. if (loaded_img->format->BytesPerPixel == 4)
  458. img_mode = GL_RGBA;
  459. else
  460. img_mode = GL_RGB;
  461. #endif
  462.  
  463. glTexImage2D(role, 0, GL_RGBA, loaded_img->w, loaded_img->h, 0, img_mode, GL_UNSIGNED_BYTE, loaded_img->pixels);
  464.  
  465. SDL_FreeSurface(loaded_img);
  466. }
  467.  
  468. void CMyApp::Clean()
  469. {
  470. glDeleteTextures(1, &m_skyboxTexture);
  471. }
  472.  
  473. void CMyApp::Update()
  474. {
  475. static Uint32 last_time = SDL_GetTicks();
  476. float delta_time = (SDL_GetTicks() - last_time) / 1000.0f;
  477.  
  478. m_camera.Update(delta_time);
  479.  
  480. last_time = SDL_GetTicks();
  481. }
  482.  
  483. void CMyApp::Render()
  484. {
  485. // töröljük a frampuffert (GL_COLOR_BUFFER_BIT) és a mélységi Z puffert (GL_DEPTH_BUFFER_BIT)
  486. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  487.  
  488. // kocka
  489. m_vao.Bind();
  490.  
  491. m_program.Use();
  492.  
  493. // fő kocka
  494. //glm::mat4 cubeWorld = glm::scale(glm::vec3(-1,-1,-1)); // kifordítjuk, mert egyébként "kívül a belül"
  495. m_program.SetUniform("MVP", m_camera.GetViewProj());
  496. glActiveTexture(GL_TEXTURE1);
  497. glBindTexture(GL_TEXTURE_2D, m_mapTexture);
  498. glUniform1i(m_program.GetLocation("tex"), 1);
  499.  
  500.  
  501. glDrawElements(GL_TRIANGLES, db, GL_UNSIGNED_INT, nullptr);
  502.  
  503.  
  504.  
  505.  
  506.  
  507. // mentsük el az előző Z-test eredményt, azaz azt a relációt, ami alapján update-eljük a pixelt.
  508. GLint prevDepthFnc;
  509. glGetIntegerv(GL_DEPTH_FUNC, &prevDepthFnc);
  510.  
  511. // most kisebb-egyenlőt használjunk, mert mindent kitolunk a távoli vágósíkokra
  512. glDepthFunc(GL_LEQUAL);
  513. m_vao.Unbind();
  514. m_vao_keret.Bind();
  515.  
  516.  
  517. //mapkeret
  518. m_program.Use();
  519.  
  520. glm::mat4 cubeWorld = glm::translate(glm::vec3(0,4,0))*glm::scale(glm::vec3(10,5,10)); // kifordítjuk, mert egyébként "kívül a belül"
  521. m_program.SetUniform("MVP", m_camera.GetViewProj()*cubeWorld);
  522.  
  523. glActiveTexture(GL_TEXTURE0);
  524. glBindTexture(GL_TEXTURE_2D, m_keretTexture);
  525. glUniform1i(m_program.GetLocation("tex"), 0);
  526.  
  527.  
  528. glDrawElements(GL_TRIANGLES, 24, GL_UNSIGNED_INT, nullptr);
  529.  
  530.  
  531. // skybox
  532.  
  533. m_vao_keret.Unbind();
  534.  
  535.  
  536. renderFa();
  537.  
  538. m_vao_skybox.Bind();
  539. m_programSkybox.Use();
  540. m_programSkybox.SetUniform("MVP", m_camera.GetViewProj() * glm::translate( m_camera.GetEye()) );
  541.  
  542. // cube map textúra beállítása 0-ás mintavételezőre és annak a shaderre beállítása
  543. glActiveTexture(GL_TEXTURE0);
  544. glBindTexture(GL_TEXTURE_CUBE_MAP, m_skyboxTexture);
  545. glUniform1i(m_programSkybox.GetLocation("skyboxTexture"), 0);
  546.  
  547. // az előző három sor <=> m_programSkybox.SetCubeTexture("skyboxTexture", 0, m_skyboxTexture);
  548.  
  549. glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_INT, nullptr);
  550.  
  551. // végül állítsuk vissza
  552. glDepthFunc(prevDepthFnc);
  553.  
  554. m_vao_skybox.Unbind();
  555.  
  556. // 1. feladat: készíts egy vertex shader-fragment shader párt, ami tárolt geometria _nélkül_ kirajzol egy tetszőleges pozícióba egy XYZ tengely-hármast,
  557. // ahol az X piros, az Y zöld a Z pedig kék!
  558.  
  559. //ImGui Testwindow
  560. //ImGui::ShowTestWindow();
  561. }
  562.  
  563. void CMyApp::KeyboardDown(SDL_KeyboardEvent& key)
  564. {
  565. m_camera.KeyboardDown(key);
  566. }
  567.  
  568. void CMyApp::KeyboardUp(SDL_KeyboardEvent& key)
  569. {
  570. m_camera.KeyboardUp(key);
  571. }
  572.  
  573. void CMyApp::MouseMove(SDL_MouseMotionEvent& mouse)
  574. {
  575. m_camera.MouseMove(mouse);
  576. }
  577.  
  578. void CMyApp::MouseDown(SDL_MouseButtonEvent& mouse)
  579. {
  580. }
  581.  
  582. void CMyApp::MouseUp(SDL_MouseButtonEvent& mouse)
  583. {
  584. }
  585.  
  586. void CMyApp::MouseWheel(SDL_MouseWheelEvent& wheel)
  587. {
  588. }
  589.  
  590. // a két paraméterbe az új ablakméret szélessége (_w) és magassága (_h) található
  591. void CMyApp::Resize(int _w, int _h)
  592. {
  593. glViewport(0, 0, _w, _h );
  594.  
  595. m_camera.Resize(_w, _h);
  596. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement