默认的 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 是啥样的?