顶点着色器的绘制操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顶点着色器的绘制操作相关的知识,希望对你有一定的参考价值。
将数据传入图形渲染管线
着色器内部有些属性是在其渲染的过程中取出进行判断如何渲染的,比如顶点着色器当中就有个aPosition属性代表的是【顶点属性数组】,记住是顶点属性的数组,不单单只是顶点坐标这一个属性,但是最起码要包含坐标这一个属性,初次之外还可以添加坐标转换等属性,再比如片段着色器中也有个属性决定着片段的最终颜色
顶点处理器的操作
Opengl采用GLSL的语言用于编写Sharder着色器程序,该语言和c语言类似都是面向过程。在着色器代码中也是如此,我们需要获取到着色器中的属性进行赋值
//三角形坐标 采用的是三维数组,使用vec纬度来表示类型。比如vec4是四纬数组,vec3是三维数组
定义顶点属性数组对象
static float triangleVer[] =
0.8f, -0.8f, 0.0f,
-0.8f, -0.8f, 0.0f,
0.0f, 0.8f, 0.0f,
;
获取着色器内部属性
//指定接收三角形坐标的变量名,program为上面的编译链接好的着色器程序
GLuint apos = static_cast(glGetAttribLocation(program, "aPosition"));
设置着色器内部属性
//真正传输数据的地方
ps:glVertexAttribPointer方法指定了顶点属性数组要传到着色器哪个变量中(这里的变量指的是顶点着色器中被in修饰的变量),另外就是指定传入的顶点属性数组的格式(Float) 以及着色器如何去取顶点属性数组数据。
将triangleVer数组的每个元素用Float类型来看待,每3个元素为一个属性,每间隔12个字节(stride传0告诉OpenGL顶点属性都是紧密挨着)属性依次传给着色器中apos引用的变量
最终代码:glVertexAttribPointer(apos, 3, GL_FLOAT, GL_FALSE, 0, triangleVer);
打开开关
//这就是一个开关方法,就是打开着色器中apos这个变量
开关在这里介绍一下:正常情况下外部传入的参数会自动绑定到着色器内部变量,前提是名字一致,但是如果内部某天换了个名字就会绑定出错,因此使用position来定位具体传入赋值的参数名字叫什么。
这最后一步就是定位打开这个属性将我们修改后的apos变量送入到着色器代码内部
glEnableVertexAttribArray(apos);
以上是关于顶点着色器的绘制操作的主要内容,如果未能解决你的问题,请参考以下文章