int main(void) { GLFWwindow* window; if (!glfwInit()) return -1; glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_RESIZABLE, GL_TRUE); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); if (!window) { glfwTerminate(); return -1; } glfwMakeContextCurrent(window); // Set the required callback functions glfwSetKeyCallback(window, key_callback); // Define the viewport dimensions glViewport(0, 0, 640, 480); // Setup OpenGL options glEnable(GL_DEPTH_TEST); printf("%s \n\n",glGetString(GL_VERSION)) ; //下面两种方式二选一: //1.使用全局的字符串加载shader // compileShaders(); //2.使用c++类加载shader资源文件 ZZLShader myshader("./shaderFiles/vertexShader.vs", "./shaderFiles/fragmentShader.frag"); // process(); textureProcess(); while (!glfwWindowShouldClose(window)) { glClearColor(0.2, 0.2, 0.2, 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* use uniform global var.. GLfloat timeValue = glfwGetTime(); GLfloat greenValue = sin(timeValue)/2 + 0.5f; GLuint vertexColorLocation = glGetUniformLocation(shaderProgram, "changeColor"); glUseProgram(shaderProgram); glUniform4f(vertexColorLocation, 0.5f, 0.5f, greenValue, 1.0f); */ //1.使用全局的字符串加载着色器程序方式 // glUseProgram(shaderProgram); //2.使用C++类加载加载着色器程序方式 myshader.UseShader(); // transform /* glm::mat4 trans; GLfloat timeValue = glfwGetTime(); GLfloat greenValue = sin(timeValue)/2 + 0.5f; // // trans = glm::scale(trans, glm::vec3(greenValue,greenValue,0.0f)); trans = glm::rotate(trans, (GLfloat)glfwGetTime() * 2.0f, glm::vec3(0.0,0.0,1.0f)); trans = glm::translate(trans, glm::vec3(greenValue,greenValue,0.0f)); GLuint transfromLoc = glGetUniformLocation(myshader.programId, "transform"); glUniformMatrix4fv(transfromLoc, 1, GL_FALSE, glm::value_ptr(trans)); */ glm::mat4 modeMatrix; glm::mat4 viewMatrix; glm::mat4 perspectiveMatrix; // viewMatrix = glm::translate(viewMatrix, glm::vec3(0.0,0.0,-3.0)); GLfloat camX = sinf(glfwGetTime())*10.0f; GLfloat camZ = cos(glfwGetTime())*10.0f; viewMatrix = glm::lookAt(glm::vec3(camX,0.0f,camZ), glm::vec3(0.0f,0.0f,0.0f), glm::vec3(0.0f,1.0f,0.0f)); perspectiveMatrix = glm::perspective(glm::radians(field_of_view), (GLfloat)(640.0/480.0), 0.1f, 100.0f); GLuint modelLocal = glGetUniformLocation(myshader.programId, "modeMatrix"); GLuint viewLocal = glGetUniformLocation(myshader.programId, "viewMatrix"); GLuint perspectiveLocal = glGetUniformLocation(myshader.programId, "perspectiveMatrix"); glUniformMatrix4fv(viewLocal, 1, GL_FALSE, glm::value_ptr(viewMatrix)); glUniformMatrix4fv(perspectiveLocal, 1, GL_FALSE, glm::value_ptr(perspectiveMatrix)); glBindVertexArray(VAO[0]); glBindTexture(GL_TEXTURE_2D, texture1); glDrawArrays(GL_TRIANGLES, 0, 3); glBindVertexArray(VAO[1]); glDrawArrays(GL_TRIANGLES, 0, 3); glBindVertexArray(VAO[2]); for (GLuint i= 0; i<10; i++) { modeMatrix = glm::translate(modeMatrix, cubePositions[i]*0.3f); // modeMatrix = glm::rotate(modeMatrix, (GLfloat)glm::radians(glfwGetTime()*100), glm::vec3(0.5f,0.5,0.5)); glUniformMatrix4fv(modelLocal, 1, GL_FALSE, glm::value_ptr(modeMatrix)); glDrawArrays(GL_TRIANGLES, 0, 36); } glBindVertexArray(0); glfwSwapBuffers(window); glfwPollEvents(); } glDeleteProgram(shaderProgram); glDeleteVertexArrays(3, VAO); glDeleteBuffers(3, VBO); glfwTerminate(); return 0; }
int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "3.Exercise1", NULL, NULL); /* 第一次把这个忘了,异常中断 */ glfwMakeContextCurrent(window); glViewport(0, 0, WIDTH, HEIGHT); glewExperimental = GL_TRUE; glewInit(); Shader myshader("./Resources/default.vs", "./Resources/default.frag"); GLfloat vertices[] = { // Positions // Colors 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, // Bottom Right -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, // Bottom Left 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f // Top }; GLuint VAO, VBO; glGenVertexArrays(1, &VAO); glGenBuffers(1, &VBO); glBindVertexArray(VAO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); /* positioin attribute */ glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)0); glEnableVertexAttribArray(0); /*color attribute */ glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat))); glEnableVertexAttribArray(1); glBindVertexArray(0); while (!glfwWindowShouldClose(window)){ glfwPollEvents(); glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); myshader.Use(); glBindVertexArray(VAO); glDrawArrays(GL_TRIANGLES, 0, 3); glBindVertexArray(0); glfwSwapBuffers(window); } glDeleteVertexArrays(1, &VAO); glDeleteBuffers(1, &VBO); glfwTerminate(); return a.exec(); }