欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一、OpenGL基本渲染步骤

程序员文章站 2022-07-04 15:01:29
...

获取当前渲染环境OpenGL信息

const GLubyte *renderer = glGetString( GL_RENDERER ); //具体渲染器,例如:ATI Radeon HD 5600 Series

const GLubyte *vendor = glGetString( GL_VENDOR ); //OpenGL实现的产商

const GLubyte *version = glGetString( GL_VERSION ); //open版本

const GLubyte *glslVersion = glGetString( GL_SHADING_LANGUAGE_VERSION ); //glsl版本

GLint major, minor;

glGetIntegerv(GL_MAJOR_VERSION, &major); //gl大版本(整型)

glGetIntegerv(GL_MINOR_VERSION, &minor); //gl小版本(整型)

//测试数据

float positionData[] = {
    -0.8f, -0.8f, 0.0f,
     0.8f, -0.8f, 0.0f,
     0.0f,  0.8f, 0.0f };
float colorData[] = {
    1.0f, 0.0f, 0.0f,
    0.0f, 1.0f, 0.0f,
    0.0f, 0.0f, 1.0f };
//定义相应对象
GLuint vao, vbo_pos, vbo_col;
//生成vao并保存句柄
glGenVertexArrays(1, &vao);
//生成vbo并保存句柄
glGenBuffers(1, &vbo_pos);
glGenBuffers(1, &vbo_col);
//绑定vbo数据
glBindBuffer(GL_ARRAY_BUFFER, vbo_pos);
glBufferData(GL_ARRAY_BUFFER, sizeof(positionData), positionData, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, vbo_col);
glBufferData(GL_ARRAY_BUFFER, sizeof(colorData), colorData, GL_STATIC_DRAW);
/*
glVertexAttribPointer(
   0,                  // 对应layout变量
   3,                  // 每次获取数据个数
   GL_FLOAT,           // 数据类型
   GL_FALSE,           // 是否归一化
   0,                  // 步长,即间隔多长距离获取下次数据间隔
   (void*)0            // 数据偏移
);
*/
//绑定并开始操作当前vao
glBindVertexArray(vao);
//设置数据到shader对应layout变量
glEnableVertexAttribArray(0); //开启layout = 0,位置数据
glBindBuffer(GL_ARRAY_BUFFER, vbo_pos);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(1); //开启layout = 1,颜色数据
glBindBuffer(GL_ARRAY_BUFFER, vbo_col);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
//vbo操作完毕处理解绑
glBindBuffer(GL_ARRAY_BUFFER, 0);
//vao操作完毕处理解绑
glBindVertexArray(0);