#include <glad\glad.h>
#include <glfw3.h>
#include <iostream>
float vertices[] = {
-0.5f,-0.5f,0.0f,
0.5f,-0.5f,0.0f,
0,0.5f,0.0f
};
GLFWwindow* glfwWindow;
int gl_init();
int main() {
gl_init();
/*
* VBO(Vertex Buffer Objects)顶点缓冲对象是显卡存储空间里一块缓存区BUFFER
* 用于存储和顶点以及其属性相关的信息(顶点信息,颜色信息,法线信息,纹理坐标信息和索引信息等)
* VAO(Vertex Array Object)是包含一个或者多个VBO的对象
* 被设计用来存储被完整渲染对象的相关数据信息,如渲染对象的顶点信息和每一个顶点的颜色信息。
*/
unsigned int VBO,VAO;
//生成VB0对象
glGenBuffers(1, &VBO);
//绑定VBO对象
glBindBuffer(GL_ARRAY_BUFFER, VBO);
//生成VAO对象
glGenVertexArrays(1, &VAO);
//绑定VAO对象
glBindVertexArray(VAO);
//复制数据到显存缓冲区中供OpenGL使用 GL_STATIC_DRAW 表示数据不会或几乎不会改变。
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
//告诉OpenGL如何解析顶点数据
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
//启用顶点属性
glEnableVertexAttribArray(0);
//主逻辑循环 当窗体没有关闭的时候执行
while (!glfwWindowShouldClose(glfwWindow)) {
//设置清除颜色RGBA
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
//使用颜色Buff清除窗口
glClear(GL_COLOR_BUFFER_BIT);
//画三角形
glDrawArrays(GL_TRIANGLES, 0, 3);
//接受事件触发,更新窗体的状态
glfwPollEvents();
//交换颜色缓冲区,渲染指令在后缓冲绘制 ,前缓冲用来输出显示到屏幕
glfwSwapBuffers(glfwWindow);
}
glfwTerminate();
return 0;
}
int gl_init() {
//glfw初始化
glfwInit();
//设置OpenGL 版本号3.3
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
//设置OpenGL工作模式为核心模式
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
//创建窗体
glfwWindow = glfwCreateWindow(800, 600, "LearnOpenGL01", NULL, NULL);
if (glfwWindow == NULL) {
std::cout << "err ==== createWindow fail" << std::endl;
glfwTerminate();
return -1;
}
//设置窗体为当前线程的主上下文
glfwMakeContextCurrent(glfwWindow);
//glad初始化 用来管理OpenGL的函数指针(不初始化的话 使用不了OpenGL的函数)
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
}
OpenGL -- 绘制第一个三角形(2)
最新推荐文章于 2024-07-16 16:14:53 发布