【MVP矩阵】裁剪空间、NDC空间、屏幕空间

裁剪空间概述

裁剪空间是一个顶点乘以MVP矩阵之后所在的空间Vertex Shader的输出就是在裁剪空间上(划重点)

NDC空间概述

接上面,由GPU自己做透视除法将顶点转到NDC空间

两者的转换

透视除法将Clip Space顶点的4个分量都除以w分量,就从Clip Space转换到了NDC了。

而NDC是一个长宽高取值范围为[-1,1]的立方体,超过这个范围的顶点,会被GPU剪裁。
在这里插入图片描述
在这里插入图片描述

屏幕空间

Vertex Shader的输出在Clip Space,那Fragment Shader的输入在什么空间?不是NDC,而是屏幕空间Screen Space。

我们前面说到Vertex Shader的输出在Clip Space,接着GPU会做透视除法变到NDC。这之后GPU还有一步,应用视口变换,转换到Window Space(Screen Space),输入给Fragment Shader:
坐标系转换流程:
(Vertex Shader MVP) => Clip Space => (透视除法(GPU自己完成)) => NDC => (视口变换(GPU自己完成)) => Window Space => (Fragment Shader)

前面提到了Fragment Shader的输入是经过视口变换后的坐标,Shader中访问的方法是:OpenGL中通过gl_FragCoord来访问

此输入参数的xy分量表示Screen Space的坐标,z表示写入到深度缓冲中的值,那么w分量表示什么呢?OpenGL中gl_FragCoord来说,存的是1/w

备注

在这里插入图片描述

参考

https://sites.cs.ucsb.edu/~lingqi/teaching/games101.htm

相关推荐

  1. 向量、矩阵、数组、向量空间

    2023-12-05 20:00:02       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-05 20:00:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-05 20:00:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-05 20:00:02       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-05 20:00:02       20 阅读

热门阅读

  1. Vue3炫酷可旋转的3D地球

    2023-12-05 20:00:02       45 阅读
  2. 算法之选择排序

    2023-12-05 20:00:02       34 阅读
  3. 计算机网络测试题

    2023-12-05 20:00:02       34 阅读
  4. pytorch矩阵乘法

    2023-12-05 20:00:02       45 阅读
  5. 统领UOS上安装mysql5.7

    2023-12-05 20:00:02       51 阅读
  6. Visual Studio Code之自动补全的设置

    2023-12-05 20:00:02       35 阅读