我不是母语是英语,当我试图通过openGL的维基和教程www.learnopengl.com得到的,它永远不会结束的直觉概念如何整部作品可以理解的.有人可以用更抽象的方式向我解释它是如何工作的吗?什么是顶点着色器和片段着色器以及我们将它们用于什么?
Cir*_*四事件 23
在OpenGL的维基提供了一个很好的定义:
Shader是一个用户定义的程序,设计用于在图形处理器的某个阶段运行.
在过去,显卡是不可编程的硅片,它执行一组固定的算法:点/颜色/灯光进来,2D图像使用固定算法(通常沿着https://en.wikipedia). org/wiki/Phong_reflection_model).
但对于想要创造许多不同视觉效果的程序员来说,这太过限制了.
随着技术的进步,GPU供应商开始允许渲染管道的某些部分成为编程语言,如GLSL.
然后将这些语言转换为半无证书指令集,这些指令集运行在内置于较新GPU的小型"CPU"上.
直到不久之前,着色器语言甚至还没有图灵完整.
术语通用GPU(GPGPU)指的是现代GPU的可编程性增强.
在OpenGL模型中,只有下图的蓝色阶段是可编程的:
图像来源.
着色器从前一个流水线阶段获取输入(例如,顶点位置,颜色和光栅化像素),并将输出自定义到下一个阶段.
最重要的两个是:
名称着色器对于当前的结构不是很具描述性:GLSL中的"着色器"也管理顶点位置,更不用说OpenGL 4.3 GL_COMPUTE_SHADER,它允许任意计算与渲染完全无关,就像OpenCL一样.
TODO可以单独用OpenCL有效地实现OpenGL,即使所有阶段都可编程吗?当然,必须有性能/灵活性权衡.
带有着色器的第一个GPU使用不同的专用硬件进行顶点和片段着色,因为它们具有完全不同的工作负载.但是,当前的体系结构对所有着色器使用单一类型的硬件(基本上是小型CPU),这样可以节省一些硬件重复.这个概念被称为:https://en.wikipedia.org/wiki/Unified_shader_model
图像来源.
要真正理解着色器及其所能做的一切,您必须查看许多示例并学习API.https://github.com/JoeyDeVries/LearnOpenGL例如是一个很好的来源.
在现代的OpenGL 4,甚至世界你好三角形程序使用超级简单着色器,而不是像旧的过时即时的API glBegin和glColor.这是一个例子:https://stackoverflow.com/a/36166310/895245
非平凡着色器的一个经典酷应用是动态阴影:

图像来源.
jh3*_*314 17
基于几个光方程,着色器基本上为您提供要渲染的对象的正确颜色.因此,如果您有球体,灯光和相机,那么相机应该会看到一些阴影,一些闪亮的部分等,即使球体只有一种颜色.着色器执行光方程计算以提供这些效果.
顶点着色器将虚拟空间(您的三维模型)中每个顶点的3D位置转换为它在屏幕上显示的2D坐标.
片段着色器基本上通过进行光计算为您提供每个像素的着色.
| 归档时间: |
|
| 查看次数: |
12431 次 |
| 最近记录: |