一、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);
上一篇: [OpenGL]计算机图形学实验01:一个简单的球体
下一篇: 老中医徐蔚霖养生之道 饮绿茶戒烟酒