Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.75 KB | None | 0 0
  1. //
  2. // main.cpp
  3. // OpenGL_Shader_Example_step1
  4. //
  5. // Created by CGIS on 30/11/15.
  6. // Copyright © 2015 CGIS. All rights reserved.
  7. //
  8.  
  9.  
  10. //DIN LAB 3 IAU PROIECTUL 2013 SI INLOCUIESC CE AM IN LAB4 IN PLUS
  11.  
  12. #define GLEW_STATIC
  13.  
  14. #include <iostream>
  15. #include "glm/glm/glm.hpp"//core glm functionality
  16. #include "glm/glm/gtc/matrix_transform.hpp"//glm extension for generating common transformation matrices
  17. #include "glm/glm/gtc/type_ptr.hpp"
  18. #include "GLEW\glew.h"
  19. #include "GLFW\glfw3.h"
  20. #include <string>
  21. #include "Shader.hpp"
  22.  
  23. int glWindowWidth = 640;
  24. int glWindowHeight = 480;
  25. int retina_width, retina_height;
  26. GLFWwindow* glWindow = NULL;
  27.  
  28.  
  29. //vertex data --- position and color
  30. GLfloat vertices[] = {
  31. -0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, //0
  32. 0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, //1
  33. 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f, //2
  34. -0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f, //3
  35. -0.5f, 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, //4
  36. 0.5f, 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, //5
  37. 0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, //6
  38. -0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, //7
  39. -0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, //8 0'
  40. 0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, //9 1'
  41. 0.5f, -0.5f, 0.5f, 0.0f, 1.0f, 1.0f, //10 2'
  42. -0.5f, -0.5f, 0.5f, 0.0f, 1.0f, 0.0f, //11 3'
  43. -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, //12 4'
  44. 0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 1.0f, //13 5'
  45. 0.5f, 0.5f, 0.5f, 1.0f, 1.0f, 0.0f, //14 6'
  46. -0.5f, 0.5f, 0.5f, 1.0f, 1.0f, 0.0f, //15 7'
  47. -0.5f, -0.5f, -0.5f, 0.0f, 1.0f, 0.0f, //16 0''
  48. 0.5f, -0.5f, -0.5f, 0.0f, 1.0f, 1.0f, //17 1''
  49. 0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 1.0f, //18 2''
  50. -0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 1.0f, //19 3''
  51. -0.5f, 0.5f, -0.5f, 1.0f, 1.0f, 0.0f, //20 4''
  52. 0.5f, 0.5f, -0.5f, 1.0f, 1.0f, 0.0f, //21 5''
  53. 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f, //22 6''
  54. -0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f, //23 7''
  55. };
  56.  
  57. GLuint indices[] = {
  58. 0, 1, 2, 0, 2, 3, // bottom plane triangles
  59. 8, 9, 5, 8, 5, 4, // back plane triangles
  60. 17, 10, 6, 17, 6, 13, // right plane triangles
  61. 16, 12, 7, 16, 7, 11, // left plane triangles
  62. 20, 21, 14, 20, 14, 15, // top plane triangles
  63. 19, 18, 22, 19, 22, 23 // front plane triangles
  64. };
  65.  
  66. GLuint verticesVBO;
  67. GLuint verticesEBO;
  68. GLuint objectVAO;
  69.  
  70. gps::Shader myCustomShader;
  71.  
  72. glm::mat4 model;
  73. GLint modellLoc;
  74.  
  75.  
  76. void windowResizeCallback(GLFWwindow* window, int width, int height)
  77. {
  78. fprintf(stdout, "window resized to width: %d , and height: %d\n", width, height);
  79. //TODO
  80. }
  81.  
  82. void initObjects()
  83. {
  84. glGenVertexArrays(1, &objectVAO);
  85. glBindVertexArray(objectVAO);
  86.  
  87. glGenBuffers(1, &verticesVBO);
  88. glBindBuffer(GL_ARRAY_BUFFER, verticesVBO);
  89. glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  90.  
  91. glGenBuffers(1, &verticesEBO);
  92. glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, verticesEBO);
  93. glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
  94.  
  95. //vertex position attribute
  96. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)0);
  97. glEnableVertexAttribArray(0);
  98.  
  99. //vertex colour attribute
  100. glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(float)));
  101. glEnableVertexAttribArray(1);
  102.  
  103. glBindVertexArray(0);
  104. }
  105.  
  106. bool initOpenGLWindow()
  107. {
  108. if (!glfwInit()) {
  109. fprintf(stderr, "ERROR: could not start GLFW3\n");
  110. return false;
  111. }
  112.  
  113. //for Mac OS X
  114. glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
  115. glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
  116. glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
  117. glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
  118.  
  119. glWindow = glfwCreateWindow(glWindowWidth, glWindowHeight, "OpenGL Shader Example", NULL, NULL);
  120. if (!glWindow) {
  121. fprintf(stderr, "ERROR: could not open window with GLFW3\n");
  122. glfwTerminate();
  123. return false;
  124. }
  125.  
  126. glfwSetWindowSizeCallback(glWindow, windowResizeCallback);
  127. glfwMakeContextCurrent(glWindow);
  128.  
  129. glfwWindowHint(GLFW_SAMPLES, 4);
  130.  
  131. // start GLEW extension handler
  132. glewExperimental = GL_TRUE;
  133. glewInit();
  134.  
  135. // get version info
  136. const GLubyte* renderer = glGetString(GL_RENDERER); // get renderer string
  137. const GLubyte* version = glGetString(GL_VERSION); // version as a string
  138. printf("Renderer: %s\n", renderer);
  139. printf("OpenGL version supported %s\n", version);
  140.  
  141. //for RETINA display
  142. glfwGetFramebufferSize(glWindow, &retina_width, &retina_height);
  143.  
  144. return true;
  145. }
  146.  
  147. float angle = 0;
  148. float angle1 = 0;
  149.  
  150. void renderScene()
  151. {
  152. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  153. glClearColor(0.8, 0.8, 0.8, 1.0);
  154. glViewport(0, 0, retina_width, retina_height);
  155.  
  156. if (glfwGetKey(glWindow, GLFW_KEY_Q)) {
  157. glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  158. }
  159.  
  160. if (glfwGetKey(glWindow, GLFW_KEY_E)) {
  161. glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  162. }
  163.  
  164. model = glm::mat4(1.0f);
  165.  
  166. if (glfwGetKey(glWindow, GLFW_KEY_R)) {
  167. angle += 0.0002f;
  168. }
  169.  
  170. if (glfwGetKey(glWindow, GLFW_KEY_T)){
  171. angle1 += 0.0002f;
  172. }
  173.  
  174.  
  175.  
  176. model = glm::rotate(model, angle, glm::vec3(0, 1, 0));
  177. glUniformMatrix4fv(modellLoc, 1, GL_FALSE, glm::value_ptr(model));
  178. myCustomShader.useShaderProgram();
  179. glBindVertexArray(objectVAO);
  180. glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_INT, 0);
  181.  
  182.  
  183. model = glm::mat4(1.0f);
  184.  
  185.  
  186. model = glm::rotate(model, angle1, glm::vec3(0, 1, 0));
  187. glUniformMatrix4fv(modellLoc, 1, GL_FALSE, glm::value_ptr(model));
  188.  
  189. model = glm::translate(model, glm::vec3(2, 0, 0));
  190. glUniformMatrix4fv(modellLoc, 1, GL_FALSE, glm::value_ptr(model));
  191.  
  192.  
  193. ///interschimba rotate cu translate pt a obtine alt rezultat
  194. myCustomShader.useShaderProgram();
  195. glBindVertexArray(objectVAO);
  196. glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_INT, 0);
  197.  
  198.  
  199.  
  200. }
  201.  
  202.  
  203. int main(int argc, const char * argv[]) {
  204.  
  205. initOpenGLWindow();
  206.  
  207. initObjects();
  208.  
  209. glEnable(GL_DEPTH_TEST);
  210.  
  211. myCustomShader.loadShader("shaders/shaderStart.vert", "shaders/shaderStart.frag");
  212. myCustomShader.useShaderProgram();
  213.  
  214. model = glm::mat4(1.0f);
  215. modellLoc = glGetUniformLocation(myCustomShader.shaderProgram, "model");
  216. glUniformMatrix4fv(modellLoc, 1, GL_FALSE, glm::value_ptr(model));
  217.  
  218. glm::mat4 view = glm::lookAt(glm::vec3(0.0f, 0.0f, 5.0f), glm::vec3(0.0f, 0.0f, -10.0f), glm::vec3(0.0f, 1.0f, 0.0f));
  219.  
  220. GLint viewLoc = glGetUniformLocation(myCustomShader.shaderProgram, "view");
  221. glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));
  222.  
  223. glm::mat4 projection = glm::perspective(70.0f, (float)glWindowWidth / (float)glWindowHeight, 0.1f, 1000.0f);
  224. GLint projLoc = glGetUniformLocation(myCustomShader.shaderProgram, "projection");
  225. glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(projection));
  226.  
  227.  
  228. while (!glfwWindowShouldClose(glWindow)) {
  229. renderScene();
  230.  
  231. glfwPollEvents();
  232. glfwSwapBuffers(glWindow);
  233. }
  234.  
  235. //close GL context and any other GLFW resources
  236. glfwTerminate();
  237.  
  238. return 0;
  239. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement