112 lines
4.4 KiB
Plaintext
112 lines
4.4 KiB
Plaintext
|
#include <iostream>
|
|||
|
// GLEW
|
|||
|
#define GLEW_STATIC
|
|||
|
#include <GL/glew.h>
|
|||
|
// GLFW
|
|||
|
#include <GLFW/glfw3.h>
|
|||
|
// Other includes
|
|||
|
#include "shader.h"
|
|||
|
|
|||
|
// Function prototypes
|
|||
|
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode);
|
|||
|
|
|||
|
// Window dimensions
|
|||
|
const GLuint WIDTH = 800, HEIGHT = 600;
|
|||
|
|
|||
|
// The MAIN function, from here we start the application and run the game loop
|
|||
|
int main()
|
|||
|
{
|
|||
|
// Init GLFW
|
|||
|
glfwInit();
|
|||
|
// Set all the required options for GLFW
|
|||
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
|||
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
|
|||
|
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
|||
|
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
|
|||
|
|
|||
|
// Create a GLFWwindow object that we can use for GLFW's functions
|
|||
|
GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", nullptr, nullptr);
|
|||
|
glfwMakeContextCurrent(window);
|
|||
|
|
|||
|
// Set the required callback functions
|
|||
|
glfwSetKeyCallback(window, key_callback);
|
|||
|
|
|||
|
// Set this to true so GLEW knows to use a modern approach to retrieving function pointers and extensions
|
|||
|
glewExperimental = GL_TRUE;
|
|||
|
// Initialize GLEW to setup the OpenGL Function pointers
|
|||
|
glewInit();
|
|||
|
|
|||
|
// Define the viewport dimensions
|
|||
|
glViewport(0, 0, WIDTH, HEIGHT);
|
|||
|
|
|||
|
|
|||
|
//<2F><>ȡshader<65>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룬<EFBFBD><EBA3AC>shader.h<><68><EFBFBD><EFBFBD>
|
|||
|
Shader ourShader("shader.vs", "shader.frag");
|
|||
|
|
|||
|
|
|||
|
// һά<D2BB><CEAC><EFBFBD>飬ÿ<E9A3AC><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
|
|||
|
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 VBO, VAO;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㻺<EFBFBD>壬<EFBFBD><E5A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
glGenVertexArrays(1, &VAO);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬<EFBFBD><E9A3AC><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><DEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
|
|||
|
glGenBuffers(1, &VBO);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㻺<EFBFBD>壬<EFBFBD><E5A3AC><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><DEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
glBindVertexArray(VAO);//<2F><EFBFBD><F3B6A8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
glBindBuffer(GL_ARRAY_BUFFER, VBO);//<2F><EFBFBD><F3B6A8B6>㻺<EFBFBD><E3BBBA>
|
|||
|
//ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԴΪvertices<65><73><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD>ι<EFBFBD><CEB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>GL_STATIC_DRWA<57><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>
|
|||
|
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
|
|||
|
|
|||
|
// ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԵĽ<D4B5><C4BD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δӶ<CEB4><D3B6>㻺<EFBFBD><E3BBBA><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ӧ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ԡ<EFBFBD><D4A1><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֪<EFBFBD><D6AA>ȥ<EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>
|
|||
|
//<2F><>ÿһ<C3BF><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD>֣<EFBFBD>һ<EFBFBD><D2BB>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ú<EFBFBD><C3BA><EFBFBD>ɫ
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>layout(location = 0)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>position<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD>λ<EFBFBD><CEBB>ֵ(Location)<29><><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD>ά<EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>壬<EFBFBD><E5A3AC><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>
|
|||
|
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)0);
|
|||
|
glEnableVertexAttribArray(0);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>ΪĬ<CEAA><C4AC><EFBFBD>ǽ<EFBFBD><C7BD>õ<EFBFBD>
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>е<EFBFBD>layout (location = 1) in vec3 color;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>Ե<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>verticesһ<73><D2BB>
|
|||
|
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
|
|||
|
glEnableVertexAttribArray(1);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1.
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Vertex Array Object, VAO)<29>ĺô<C4BA><C3B4><EFBFBD><EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>һ<EFBFBD>Σ<EFBFBD>֮<EFBFBD><D6AE><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ֻ<EFBFBD><D6BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>VAO<41><4F><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><CBA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>еİ<D0B5><C4B0><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD>
|
|||
|
glBindVertexArray(0); // <20><><EFBFBD><EFBFBD> VAO
|
|||
|
// Game loop
|
|||
|
while (!glfwWindowShouldClose(window))
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>key_callback<63><6B><EFBFBD><EFBFBD>
|
|||
|
glfwPollEvents();
|
|||
|
|
|||
|
// Render
|
|||
|
// Clear the colorbuffer
|
|||
|
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);//<2F><>Ⱦ<EFBFBD><C8BE>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>
|
|||
|
glClear(GL_COLOR_BUFFER_BIT);//<2F><><EFBFBD><EFBFBD>ǰ̨<C7B0><CCA8><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
// Draw the triangle
|
|||
|
ourShader.Use();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
glBindVertexArray(VAO);//ÿ<><C3BF>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><F3B6A8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>VAO
|
|||
|
glDrawArrays(GL_TRIANGLES, 0, 3);
|
|||
|
glBindVertexArray(0);//<2F><><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
// Swap the screen buffers
|
|||
|
glfwSwapBuffers(window);
|
|||
|
}
|
|||
|
// Properly de-allocate all resources once they've outlived their purpose
|
|||
|
glDeleteVertexArrays(1, &VAO);
|
|||
|
glDeleteBuffers(1, &VBO);
|
|||
|
// Terminate GLFW, clearing any resources allocated by GLFW.
|
|||
|
glfwTerminate();
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
// Is called whenever a key is pressed/released via GLFW
|
|||
|
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
|
|||
|
{
|
|||
|
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
|
|||
|
glfwSetWindowShouldClose(window, GL_TRUE);
|
|||
|
}
|