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

时间:2011-12-26 02:07:11

标签: glsl shader

版本#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);
}

1 个答案:

答案 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是你的朋友。