Metal的顶点着色器 vertex shader

所属分类:ios | 发布于 2024-12-19

对于初次接触的人来说,Metal的很多概念都很模糊。

上一篇介绍到Metal的着色器分为三类,这篇来说一说其中的顶点着色器vertex shader。

要了解vertex shader,需要先了解软件管线。

什么事渲染管线

渲染管线(Render Pipeline)指的是图形渲染的整体过程,负责定义从顶点数据到像素输出的完整流程,包括顶点着色,光栅化,片元着色等。它规定了数据如何从输入的顶点、纹理和其他资源流经一系列固定和可编程阶段,最终生成屏幕上的像素。在Metal中顶点着色和片元着色是可编程阶段,对应vertex shader和fragment shader。

顶点阶段vertex shader

vertex shader的作用是坐标转换,vertex shader函数把纹理顶点映射到渲染坐标。

先看一张图,顶点着色器将视图上的输入坐标转换为独立于输入坐标的坐标:

渲染视图:

每个顶点renderedCoordinates都由4个值定义:x、y、深度和w坐标。现在不必关心后两个值(它们都具有相同的值),并且为了使x和y有意义,你必须想象轴穿过屏幕的正中心,其坐标为(0, 0)。因此renderedCoordinates屏幕边缘的坐标按以下顺序排列:

左下(-1.0, -1.0),右下(1.0, -1.0),左上(-1.0, 1.0),右上(1.0, 1.0)。

坐标归一化:

纹理像素坐标系的原点是从其左上角开始的,其坐标为(0, 0)。

顶点着色器将纹理顶点映射到其渲染纹理的视图的顶点。映射由renderedCoordinates(视图坐标空间中的位置)和textureCoordinates(纹理坐标空间中的位置)指定。

现在,textureCoordinates包含完全相同的点,但在纹理的坐标空间与视图的坐标空间不同,纹理像素坐标系的原点从其左上角开始,其坐标为(0, 0)。基本上它与日常看到的坐标系相同,x轴从左到右,y轴从上到下。因此textureCoordinates的边缘坐标将按以下顺序排列:

左下(0, 1.0),右下(1.0, 1.0),左上(0.0, 0.0),右上(1.0, 0.0)。

这个过程就是坐标归一化。

 

文哥博客(https://wenge365.com)属于文野个人博客,欢迎浏览使用

联系方式:qq:52292959 邮箱:52292959@qq.com

备案号:粤ICP备18108585号 友情链接