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

Posted

技术标签:

【中文标题】默认的 GLSL 着色器是啥样的?对于版本 330【英文标题】:How does the default GLSL shaders look like? for version 330默认的 GLSL 着色器是什么样的?对于版本 330 【发布时间】:2011-12-26 02:07:10 【问题描述】:

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

【问题讨论】:

在最技术意义上,您不能在核心 GL 3.3 中关闭着色器,因为在 core OpenGL contexts 中删除了不使用着色器进行渲染的功能。 OpenGL Wiki 维护了一个list of shader-based tutorials(其中一个是我的),但它们都没有直接映射到固定功能的着色器。无论如何,这可能是学习基于着色器的编程的最糟糕的方式。 【参考方案1】:

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)”。

在顶点着色器中,“attribute”现在是“in”,“variing”现在是“out”。在片段着色器中,“variing”现在是“in”,“gl_FragColor”由“out”变量定义。我相信 gl_FragColor 仍然有效,但现在可以使用 out 变量来定义颜色。

This tutorial 非常好,教授核心 OpenGL 和 GLSL 3.30,我建议您使用它来帮助您了解更多关于 GLSL 的信息。还要记住GLSL Reference Pages 是你的朋友。

【讨论】:

谢谢,我还查看了“OpenGL 4.0 Shading Language Cookbook”一书,并且有类似的颜色三角形示例为我澄清了一切。我很困惑,以至于所有基本/琐碎的东西都被弃用了,感觉就像有人扯掉了我脚下的鲤鱼。

以上是关于默认的 GLSL 着色器是啥样的?对于版本 330的主要内容,如果未能解决你的问题,请参考以下文章

对于数组结果,optimisticResponse 是啥样的?

“版本文件”是啥样的?

这个 wcf 服务正在运行……那是啥样的绑定?哪个是默认绑定?有人解释吗?

css选择器执行的顺序是啥样的?

多于 1 列的 B 树索引是啥样的?

实际的机器代码在各个方面是啥样的? [关闭]