如何获取shader中的变量并赋值(二)

本文详细介绍了如何在shader中设置attribute变量,包括将VBO中的顶点数据配置到attribute变量,启用变量插槽,使用glVertexAttribPointer()指定数据格式,以及通过glDrawArrays()绘制图形的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设置shader中的attribute变量

  • 将vbo中的顶点数据设置到attribute变量里
    1. 设置当前的数据集:把vbo设置为当前要绘制图形的数据集,就是程序或者叫shader在绘制的时候去vbo取数据
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    
    1. 启用attribute变量的插槽,这里是positionLocation
    glEnableVertexAttribArray(positionLocation);
    
    1. 调用glVertexAttribPointer(),告诉GPU如何去遍历vbo这个内存块,给positionLocation这个插槽上填数据。第一个参数:插槽的位置;第二个参数:这个插槽中数据有几个分量;第三个参数:表示每个分量的类型;第四个参数:需不需要归一化,假如传入颜色值时255,255,255,他不是浮点数,如果归一化就把255,255,255映射为1.0,1.0,1.0;第五个参数:紧挨着的两个点相距多远;第六个参数:从vbo的哪个位置开始取值;
    glVertexAttribPointer(positionLocation, 4, GL_FLOAT, GL_FALSE, sizeof(float) * 4, 0);
    
    1. 调用glDrawArrays(),告诉GPU如何把vbo中的数据分发到各个不同的shader,让他们去执行。第一个参数:表示绘制三角形,每三点个绘制一个面;第二个参数:从第几个点开始绘制;第三个参数:要绘制多少个点。这句话在执行的时候,在GPU端,他会遍历vbo中的数据,并分别传入三个不同的shader,这三个shader分别拿到了不同的点,然后他们的viewMatrix,modelmatrix,projectMatrix是一样的,之后这三个点通过shader会在GPU上不同的三个核心(core)上同时执行
    glDrawArrays(GL_TRIANGLES, 0, 3);
    
    在这里插入图片描述
    1. 最后绘制完成之后,把当前的GL_ARRAY_BUTTER设置为0
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值