您的位置:首页 > 运维架构

学习笔记一

2015-06-11 11:22 344 查看
画一个三矩形

1,生成vertex buffer

//三角形顶点信息
static const GLfloat g_vertex_buffer_data[] = {
-1.0f/2, -1.0f/2, 0.0f,
1.0f/2, -1.0f/2, 0.0f,
1.0f/2,  1.0f/2, 0.0f,
-1.0f/2,  1.0f/2, 0.0f
};
//vb的标识符由后面的函数得到
GLuint vertexbuffer;
// 产生一个buffer并把标识符保存到vertexbuffer中
glGenBuffers(1, &vertexbuffer);

//绑定vertexbuffer到数组缓冲
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);

//把定点数组复制到缓冲区内
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
//着色器
GLuint programID = LoadShaders( "SimpleVertexShader.vertexshader", "SimpleFragmentShader.fragmentshader" );


2,绘制

// Clear the screen
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 使用着色器
glUseProgram(programID);
// 1rst attribute buffer : vertices
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glVertexAttribPointer(
0,                  // attribute 0. No particular reason for 0, but must match the layout in the shader.
3,                  // 三个顶点信息为一组
GL_FLOAT,           // type
GL_FALSE,           // normalized?
0,                  // stride
(void*)0            // array buffer offset
);
//使用GL_TRANGLE_FAN以公用边的形式画多边形
glDrawArrays(GL_TRIANGLE_FAN , 0, 3*2);
glDisableVertexAttribArray(0);


3,着色器代码

顶点着色器

#version 330 core

// Input vertex data, different for all executions of this shader.
layout(location = 0) in vec3 vertexPosition_modelspace;

void main(){

gl_Position.xyz = vertexPosition_modelspace;
gl_Position.w = 1.0;

}


片段着色器

#version 330 core

// Ouput data
out vec3 color;

void main()
{

// Output color = red
color = vec3(1,0,0);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opengl