GLSL语法以及如何与程序链接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GLSL语法以及如何与程序链接相关的知识,希望对你有一定的参考价值。

参考技术A GLSL几个要点

限定符

在之前的博客中也提到了,GLSL中的限定符号主要有:

attritude:一般用于各个顶点各不相同的量。如顶点颜色、坐标等。  输入

uniform:一般用于对于3D物体中所有顶点都相同的量。比如光源位置,统一变换矩阵等。

varying:表示易变量,一般用于顶点着色器传递到片元着色器的量。输出,vetexshader和fragshader数据的传递

const:常量。

privatestaticfinalStringVERTEX_SHADER="attribute vec4 position;\n"+

"attribute vec4 inputTextureCoordinate;\n"+

"attribute vec4 inputTextureCoordinate2;\n"+

"\n"+

"varying vec2 textureCoordinate;\n"+

"varying vec2 textureCoordinate2;\n"+

"\n"+

"void main()\n"+

"\n"+

" gl_Position = position;\n"+

" textureCoordinate = inputTextureCoordinate.xy;\n"+

" textureCoordinate2 = inputTextureCoordinate2.xy;\n"+

"";

publicstaticfinalStringALPHA_BLEND_FRAGMENT_SHADER="varying highp vec2 textureCoordinate;\n"+

" varying highp vec2 textureCoordinate2;\n"+

"\n"+

" uniform sampler2D inputImageTexture;\n"+

" uniform sampler2D inputImageTexture2;\n"+

"\n"+

" uniform lowp float mixturePercent;\n"+

"\n"+

" void main()\n"+

" \n"+

" lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);\n"+

" lowp vec4 textureColor2 = texture2D(inputImageTexture2, textureCoordinate2);\n"+

"\n"+

" gl_FragColor = vec4(mix(textureColor.rgb, textureColor2.rgb, textureColor2.a * mixturePercent), textureColor.a);\n"+

" ";

以上是一个典型的顶点着色器和片段着色器

inputTextureCoordinatetextureCoordinate2 顶点传入 

position  绑定顶点坐标

inputImageTexture

inputImageTexture2  创建并绑定纹理

inputTextureCoordinate 

inputTextureCoordinate2绑定纹理坐标

textureCoordinate2作为片段着色器的输出  最终生成gl_FragColor

对于抖音特效,其实就改变gl_Position 和 gl_FragColor

以上是关于GLSL语法以及如何与程序链接的主要内容,如果未能解决你的问题,请参考以下文章

GLSL/C++:自定义着色器的默认行为

OPENGL ES 2.0 知识串讲 ——GLSL 语法(II)

GLEW 链接错误 [重复]

OpenGL,如何设置 GLSL 版本?

OPENGL ES 2.0 知识串讲 ——GLSL 语法(II)

我的OpenGL学习进阶之旅如何抽取着色器代码到assets目录下的GLSL文件,以及如何通过Java或者C++代码来加载着GLSL文件?