VAO,VBO绘图方式及GLSL传值

顶点数组对象(VAO)顶点缓冲区对象(VBO)

转载请声明出处:http://blog.csdn.net/xiaoge132/article/details/51512296


demo下载

用VAO方式来绘制一个三角形,


步骤一:

VAO,VBO对象的创建,glGenVertexArrays()是分配定点数组对象,这里说明有一个VAO对象,并且已经使用未初始化的定点数组集合的默认状态进行了数值的初始化.

glGen*类型负责分配不同类型的对象分配

glBindVertexArray()负责创建并且绑定一个定点对象.

glGenBuffers()在这里负责分配1个对象带数组gVBO里面,

glBindBuffer()函数负责在分配缓缓存的名称之后,用来绑定.在这里是将顶点数据绑定到缓存里,因此使用GL_ARRAY_BUFFER类型

 

  glGenVertexArrays(1, &gVAO);
    glBindVertexArray(gVAO);
    
    // make and bind the VBO
    glGenBuffers(1, &gVBO);
    glBindBuffer(GL_ARRAY_BUFFER, gVBO); 



步骤二:

三个三维点来组成一个三角形;下面来定义一个三角形:

   GLfloat vertexData[] = {
        //  X     Y     Z
         0.0f, 0.8f, 0.0f,
        -0.8f,-0.8f, 0.0f,
         0.8f,-0.8f, 0.0f,
    };


步骤三:

给VBO分配数据,用于存储数据或者索引.

glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);



步骤四:

glEnableVertexAttribArray()函数是否启用索引相关的顶点数组

glVertexAttribPointer()是将要处理的所有数据输入到顶点着色器里面,在着色器里面用in变量

    glEnableVertexAttribArray(gProgram->attrib("vert"));
    glVertexAttribPointer(gProgram->attrib("vert"), 3, GL_FLOAT, GL_FALSE, 0, NULL);

GLSL传值

创建shader


1、创建一个shader对象
2、将shader源代码传入前面创建的shader对象
3、编译shader

   glCreateShader();//创建shader对象
   glShaderSource();//把shader源码传给对象
   glCompileShader();//编译shader 


使用shader

1、创建一个对象,作为程序的容器
2、编译的shader附加到刚刚创建的程序中
3、连接程序

    glCreateProgram(void);//创建程序容器对象
    glAttachShade(GLuint program, GLuint shader);//将编译好的shader附加到程序里
    glLinkProgram(GLuint program); //连接程序
    glUseProgram(GLuint prog); //使用程序



shader的数据类型

同时再说下shader的数据类型,GLSL里面有attribute,uniform,varying数据类型

uniform是指程序里面传过来的,即不能对每个顶点设置该变量.

attribute是随不同顶点变化的全局变量,只能在定点着色里面使用.

varying是指vertex shader里面传给pixel shader里面使用的,必须同时在vertex shader,pixel shader里面声明.

在GL3.x中,废弃了attribute关键字以及varying关键字,属性变量统一用in/out作为前置关键字。
对每一个Shader stage来说,in表示该属性是作为输入的属性,out表示该属性是用于输出的属性。


demo下载



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>