Vulkan Cookbook 第七章 2 编写顶点着色器

编写顶点着色器

译者注:示例代码点击此处

顶点处理是可以编程的第一个图形管道阶段。 其主要目的是将形成我们几何体的顶点位置从其局部坐标系转换为称为裁剪空间的坐标系。 裁剪坐标系用于允许图形硬件以更容易和更优化的方式执行所有后续步骤。 其中一个步骤是剪切,它将处理的顶点剪切为仅可能可见的顶点,因此是坐标系的名称。 除此之外,我们可以执行所有其他操作,每个操作在绘制几何体的每个顶点执行一次。

怎么做...

1.创建一个扩展名为vert的文本文件。(例如,shader.vert)。
2.文件的第一行插入#version 450。
3.定义将从应用程序为每个顶点提供的一组顶点输入(input)变量(属性)(除非另有说明)。 对于每个输入变量:
    1.使用位置布局(location layout)限定符和属性索引(index)定义其位置:
        layout( location = <index> )
    2.提供in限定符
    3.指定变量的类型(例如vec4,float,int3)
    4.提供输入变量的唯一名称
4.如有必要,定义一个输出(output)变量,该变量将被传递(并插入,除非另有说明)到后面的流水线阶段。 要定义每个输出变量:
    1.使用位置布局限定符和索引提供变量的位置:
          layout( location = <index> )
    2.提供out限定符
    3.指定变量的类型(例如vec3或int)
    4.提供输出变量的唯一名称
5.如有必要,请定义与应用程序中创建的描述符资源相对应的统一变量。 要定义统一变量:
    1.指定描述符集的数量和可以访问给定资源的绑定号:
        1.layout (set=<set index>, binding=<binding index>)
        2.提供uniform限定符
        3.指定变量的类型(例如sampler2D,imageBuffer)
        4.为变量定义唯一名称
6.创建一个void main()函数,其中:
    1.执行所需的操作
    2.将输入变量传递给输出变量(带或不带变换)
    3.将处理过的顶点(可能已转换)的位置存储在gl_Position内置变量中。

这个怎么运作...

顶点处理(通过顶点着色)是图形管线中的第一个可编程阶段。在我们在Vulkan创建的每个图形管线中,这是必须的。其主要目的是将应用程序传递的顶点位置从其局部坐标系转换为裁剪空间。如何完成转换取决于我们;我们可以省略它并提供裁剪空间中已经存在的坐标。如果后期阶段(细分或几何体着色器)计算位置并将其传递到管线中,顶点着色器也可能根本不执行任何操作。

不过,顶点着色器通常将应用程序提供的位置作为输入变量(坐标)之一,并将其(在左侧)乘以模型视图投影矩阵。

提示:顶点着色器的主要目的是获取顶点的位置,将模型 - 视图 - 投影矩阵乘以它,并将结果存储在gl_Position内置变量中。

顶点着色器还可以执行其他操作,将其结果传递到图形管线的后续阶段,或将它们存储在存储器映像或缓冲区中。 但是,我们必须记住,所绘制几何体的每个顶点都执行一次所有计算。

在下图中,绘制了一个三角形,并在管线对象中启用了线框渲染。 为了能够绘制非实体几何,我们需要在创建逻辑设备期间启用fillModeNonSolid功能(请参阅第1章,实例和设备的 获取物理设备的功能和属性以及创建逻辑设备内容)。

为了绘制这个三角形,使用了一个简单的顶点着色器。 以下是用GLSL编写的着色器的源代码:

#version 450 

layout( location = 0 ) in vec4 app_position; 

void main() { 
  gl_Position = app_position; 
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值