【转】【OpenTK】C# OpenTK教程 着色器 layout

图形管道

OpenGL中所有物体处在3D空间中,但屏幕和窗口是一个2D像素数组,因此OpenGL工作的很大一部分是将所有3D坐标转换为适合您屏幕上的2D像素。将3D坐标转换为2D像素的过程由OpenGL的图形管道管理。图形管道可分为两大部分:第一部分将3D坐标转换为2D坐标,第二部分将2D坐标转换为实际彩色像素。在本教程中,我们将简要讨论图形管道,以及如何利用它来创建花哨的像素。

图形管道将一组3D坐标作为输入,并将这些坐标转换为屏幕上的彩色2D像素。图形管道可分为几个步骤,其中每个步骤都需要上一步的输出作为输入。所有这些步骤都是高度专业化的(它们具有一个特定的功能),并且可以很容易地并行执行。由于其具有并行性特点,当今的图形卡具有数千个小型处理内核,通过为管道的每个步骤在GPU上运行小型程序,在图形管道中快速处理数据。这些小程序称为着色器。

其中一些着色器由开发人员配置,这允许我们编写自己的着色器来替换现有的默认着色器。这为我们提供了对管道特定部分的更细粒度的控制,并且由于它们在GPU上运行,因此还可以为我们节省宝贵的CPU时间。着色器以OpenGL着色语言(GLSL)编写,我们将在下一教程中深入探讨这一点。

下面您将找到图形管道所有阶段的抽象表示形式。

pipeline
具有蓝色背景的部分是可编程的,并且具有灰色背景的部分可以使用函数轻轻自定义。步骤如下:

  1. 顶点着色器:顶点移动到位置。这是应用模型位置等位置的位置。
  2. 形状拼接。在这个阶段,OpenGL的工作原理是将顶点拼接到三角形中;
  3. 几何着色器:过程的可选阶段。允许您从形状装配体微调结果。
  4. 栅格化:三角形转换为碎片。
  5. 线段着色器:对线段进行修改,以包括颜色数据等内容。这是纹理和照明,除其他外,应用的地方。
  6. 测试和混合:片段着色器的结果与场景的其余部分集成。

这些可能看起来很繁琐,但一旦设置完成,我们进入管道,它是相当直观的。

一些新的函数

我们需要重写几个额外的函数才能开始。首先,我们重写OnLoad函数。

protected override void OnLoad(EventArgs e)
{
    GL.ClearColor(0.2f, 0.3f, 0.3f, 1.0f);
    base.OnLoad(e);
}

当窗口首次打开时,此函数将运行一次。任何初始化相关的代码都应转到此处。

同时在这里,我们得到我们OpenGL调用的第一个函数:GL.ClearColor。这需要四个浮点,范围在0.0f1.0f之间。这将决定在窗口在帧之间清除后的颜色。

之后,我们需要重写OnRenderFrame

protected override void OnRenderFrame(FrameEventArgs e)
{
    GL.Clear(ClearBufferMask.ColorBufferBit);

    Context.SwapBuffers();
    base.OnRenderFrame(e);
}

我们这里有两个调用。首先,GL.Clear使用OnLoad中设置的颜色清除屏幕。这应始终是呈现时调用的第一个函数。
之后我们使用Context.SwapBuffers。几乎任何现代OpenGL上下文都是所谓的"双缓冲"。双缓冲意味着OpenGL绘制到的两个领域。本质上:显示一个区域,而另一个区域用来展示。然后,当您调用交换缓冲区时,两者将反转。单缓冲上下文可能会有屏幕卡顿等问题。

现在我们重写OnResize

protected override void On
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值