小羊的OpenGL学习笔记(二)

1、Uniform变量,用于定义着色器的GLSL代码中,可以实现让主程序与着色器GLSL代码交换数据的功能。

GLfloat timeValue = glfwGetTime();
GLfloat greenValue = (sin(timeValue) / 2) + 0.5;
GLint vertexColorLocation = glGetUniformLocation(shaderProgram, "ourColor");
glUseProgram(shaderProgram);
glUniform4f(vertexColorLocation, 0.0f, greenValue, 0.0f, 1.0f);

代码摘自https://learnopengl-cn.readthedocs.io/zh/latest/01%20Getting%20started/05%20Shaders/

此处,先定义需要传递的变量,之后,用glGetUniformLocation函数,传递了着色器和变量信息,获取了Uniform的地址。下面一步操作是重点,就是传递Uniform之前,要先glUseProgram激活着色器。这里的着色器因为之前已经连接过了,所以就用连接后的最终结果就行。最后再传递Uniform变量。

2、在顶点数据中可以定义更多维度的数据来定义更多的属性。比如每个顶点的前三维是位置数据,后三维是RGB颜色数据,那么,相应的着色器和顶点定义的数据都需要更改。

首先,要明确一点,着色器和glVertexAttribPointer()函数,是在VBO内操作数据的。glVertexAttribPointer()其实就是对VBO内存的管理。在函数中,第一个参数是位置信息,可以理解为ID,第二个参数是点数,第三个是类型,第四个是,第五个是各点之间的偏移量,即每个顶点数据的size大小,最后一个比较重要,是对于当前位置的属性而言,从一个点的0位置开始,偏移量是多少,单位是字节。位置信息在每个点的前三个,所以自然为0;颜色信息在该点的后三个,所以应该设定为3*sizeof(GLfloat)

有了以上设置,着色器方面相对简单,根据ID进去拿数据就可以了。不过,其实这是两个维度的事情。着色器进去拿的是位置和颜色信息,再进行处理,和顶点个数无关,后续的步骤才是把这些变换应用到各个顶点上,所以顶点个数是UseProgram时才需要考虑的事情(连接到对应的VAO就可以了)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值