版本#330的默认顶点,片段和几何GLSL着色器是什么样的?
我将通过Cg编译器使用#version 330
GLSL版本3.30 NVIDIA,因为这是我的显卡支持的。
使用默认着色器时,我的意思是着色器与图形卡在关闭着色器程序时的操作完全相同。
我找不到#version 330
的好例子。一整天都在谷歌搜索。不确定术语默认着色器是否被称为其他类似琐碎或基本的东西,如果这就是为什么我找不到它。
对于版本为330的图书的任何建议或者链接到版本330的简单初学者教程也会很棒。
#version 110中的普通顶点着色器的示例,执行默认的顶点变换
#version 110
void main()
{
gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;
}
#version 110中的普通片段着色器示例,将颜色变为红色
#version 110
void main()
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
答案 0 :(得分:35)
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;
}
片段着色器:
#version 330
out vec4 fragColor;
void main()
{
fragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
核心OpenGL 3.3配置文件不再支持许多旧的固定功能,如矩阵堆栈。您需要处理自己的矩阵并将它们发送到着色器。没有ftransform,gl_Position几乎是唯一有效的gl_ *变量。
虽然不推荐使用glBindAttribLocation,但定义顶点属性位置的首选方法是通过GLSL中的“layout(location = x)”。
在顶点着色器中,“属性”现在是“在”中,“变化”现在是“在外”。在片段着色器中,“vary”现在是“in”,“gl_FragColor”由“out”变量定义。我相信gl_FragColor仍然有效,但现在可以使用out变量来定义颜色。
This tutorial非常好,并且教授核心OpenGL和GLSL 3.30,我建议您使用它来帮助您了解有关GLSL的更多信息。还要记住,GLSL Reference Pages是你的朋友。