基于OpenGL 3.3 記錄了一些OpenGL常用的組合API纹因。初學的,這篇可能還是太毛了
glfw的初始化:
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); //主版本號
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); //次版本號
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //核心模式
創(chuàng)建窗口:
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
加載GLAD指針
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
創(chuàng)建VAO:
unsigned int VAO;
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
然后是VBO:
unsigned int VBO;
//綁定+復制VBO
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
接著是EBO:
unsigned int EBO;
glGenBuffers(1, &EBO);
//綁定+復制EBO
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
記得配置下頂點給頂點著色器使用。
然后是渲染循環(huán):
while (!glfwWindowShouldClose(window))
{
// 處理事件
processInput(window);
// 渲染
// 但是覺得每一次都清除下畫面的顏色宦赠,會很費時間趟据,應該有別的解決方案
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
// 綁定紋理 bind textures on corresponding texture units
.....
// 創(chuàng)造動畫 create transformations
.....
// render container
glBindVertexArray(VAO);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
//交換緩沖
glfwSwapBuffers(window);
//檢查并調(diào)用事件
glfwPollEvents();
}