重写Opengl版本

着色器

2022-07-14  本文已影响0人  大旺旺的弟弟小旺旺

着色器是运行在GPU上的一个程序,为了完成管线某个特定功能运行的,它只是将一个输入转化为输出的程序,他们只能输出和输入。

GLSL

它是专门来写着色器语言的,它包含了向量和矩阵操作的特性。

书写格式

可以设置的属性是有限制的,有点是16个,有点更多,这个可以进行查询

GL_MAX_VERTEX_ATTRIBS

int nrAttributes;
glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrAttributes);
std::cout << "Maximum nr of vertex attributes supported: " << nrAttributes << std::endl;

支持的数据类型

int float double uint bool vector matrix

向量

GLSL中向量可以有234个分量,可以是任意类型

可以通过.x,.y,.z,.w,还可以通过rgba的方式。

重组

vec2 someVec;
vec4 differentVec = someVec.xyxx;
vec3 anotherVec = differentVec.zyw;
vec4 otherVec = someVec.xxxx + anotherVec.yxzy;

任意组合

vec2 vect = vec2(0.5, 0.7);
vec4 result = vec4(vect, 0.0, 0.0);
vec4 otherResult = vec4(result.xyz, 1.0);

输入和输出

着色器是各自独立的小程序,都是整体的一部分,每个部分只关心输入什么,输出什么,对其它部分并不关心。in和out作为3.0的扛把子来实现。

attribute:属性输入
varying:属性值传递

in输入
out输出

顶点着色器向片段着色器中传递数据,它们的名字是一样的就可以了。

uniform

它是一种从cpu向Gpu发送数据的方式,但是uniform和顶点属性有些不同。

它是全局的,所以我们不需要通过顶点着色器这个中介来完成。

使用uniform

int vertexColorLocation = glGetUniformLocation(shaderProgram,"outColor");
glUniform4f(vertexColorLocation,0.0f,greenValue,0f,1f)
上一篇 下一篇

猜你喜欢

热点阅读