glsl - 默认的 GLSL 着色器是什么样子的?适用于 330 版本

标签 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);
}

最佳答案

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是你的 friend 。

关于glsl - 默认的 GLSL 着色器是什么样子的?适用于 330 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8632550/

相关文章:

c++ - 在GLFW窗口中启用多重采样不会提高抗锯齿的质量

c++ - 片段着色器在不同的计算机上执行不同

c++ - 基于 GLSL 的投影/模型 View 使对象不可见

java - glNormal3f 和 glNormalPointer 之间的区别

python - 如何在 Moderngl EGL 后端启用抗锯齿?

opengl - OpenGL 纹理中的 NAN

c++ - 从深度缓冲区重建位置 - 缺少 Z?

c++ - GLSL 灯光/高光随相机移动

javascript - 在 webgl 中切换着色器

javascript - 老派电视翘边效应?