默认的GLSL着色器是什么样的?对于版本330

Col*_*acX 25 shader glsl

对于版本#330,默认的顶点,片段和几何GLSL着色器是什么样的?

我将#version 330通过Cg编译器使用GLSL版本3.30 NVIDIA,因为这是我的显卡支持的.

使用默认着色器时,我的意思是着色器与图形卡在关闭着色器程序时执行的操作完全相同.

我找不到一个很好的例子#version 330.一整天都在谷歌搜索.不确定术语默认着色器是否被称为其他类似于普通或基本的东西,如果这就是为什么我找不到它.

对于版本330的书籍的任何建议或链接到330版本的简单初学者教程也会很棒.

#version 110中的普通顶点着色器的示例执行默认的顶点变换

#version 110

void main()
{
    gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;
}
Run Code Online (Sandbox Code Playgroud)

#version 110中的普通片段着色器的示例将颜色变为红色

#version 110

void main()
{
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*ani 36

OpenGL没有"默认"着色器.它看起来像你想要一个非常简单的着色器示例,它将顶点转换为剪辑空间并为它们提供颜色,所以在这里你去:

顶点着色器:

#version 330

layout(location = 0)in vec4 vert;

uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;

void main()
{
    gl_Position = projection * view * model * vert;
}
Run Code Online (Sandbox Code Playgroud)

片段着色器:

#version 330

out vec4 fragColor;

void main()
{
    fragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

核心OpenGL 3.3配置文件不再支持许多旧的固定功能,如矩阵堆栈.您需要处理自己的矩阵并将它们发送到着色器.没有ftransform,gl_Position几乎是唯一有效的gl_*变量.

虽然不推荐使用glBindAttribLocation,但定义顶点属性位置的首选方法是通过GLSL中的"layout(location = x)".

在顶点着色器中,"属性"现在是"在"中,"变化"现在是"在外".在片段着色器中,"vary"现在是"in","gl_FragColor"由"out"变量定义.我相信gl_FragColor仍然有效,但现在可以使用out变量来定义颜色.

本教程非常好,并教授核心OpenGL和GLSL 3.30,我建议您使用它来帮助您了解有关GLSL的更多信息.还要记住,GLSL参考页面是你的朋友.

  • 谢谢我还看了"OpenGL 4.0着色语言手册"这本书,并且有类似的颜色三角形示例,它为我澄清了一切.我很困惑,以至于所有基本/琐碎的东西都被弃用了,感觉就像是有人把我的屁股撕掉了. (5认同)