首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >opengl投影-其中是到NDC的映射

opengl投影-其中是到NDC的映射
EN

Stack Overflow用户
提问于 2021-07-12 08:58:43
回答 1查看 79关注 0票数 2

到NDC的映射在哪里?

根据我的理解,投影矩阵做两件事:首先,它裁剪视图空间以形成圆锥体。它只保留落入锥体的顶点,但会剪裁掉落入锥体之外的其他顶点。其次,它将裁剪后的空间中的坐标映射到NDC - 1,1。

但我只看到我们通过使用glm::透视或glm::ortho定义透视矩阵来创建一个平截体(用于裁剪)。在截锥和NDC之间进行映射的步骤在哪里?

或者我们只需要定义平截体,OpenGL会自动为我们完成这两个步骤?

EN

回答 1

Stack Overflow用户

发布于 2021-07-12 09:18:36

根据我的理解,投影矩阵做两件事:首先,它裁剪视图空间以形成圆锥体。它只保留落入锥体的顶点,而其他顶点则落在外面。其次,它将裁剪后的空间中的坐标映射到NDC - 1,1。

它不会做这两件事。

一个4x4矩阵只是一个变换。转换本身不能裁剪任何东西。虽然矩阵可以将坐标转换为-1,1空间,但这不一定是顶点着色器提供的剪辑空间。这肯定不是3D投影矩阵所使用的剪辑空间。

顶点着色器(或最后一个vertex processing shader stage)的唯一强制作业是生成clip-space position for each vertex。剪辑空间由OpenGL定义为位置的XYZ分量在-W范围内的4D空间,W被认为是“可见的”。这里,"W“是位置的W分量。因此,对于每个XYZW,“可见”被定义为XYZ分量在W范围内的位置。

基本体的实际裁剪发生在顶点着色器之后。根据先前定义的4D剪辑空间剪裁每个基本体的顶点。

投影锥体是通过将位置变换到剪辑空间来创建的,使得锥体外部的那些4D位置在-W,W范围之外,而在该范围内的那些4D位置在该范围内。

因此,转换并不是裁剪任何东西;它只是设置数据,以便OpenGL的裁剪系统能够正确裁剪对象。

同样,剪辑空间不是NDC空间(除非该位置的W分量为1)。NDC空间的定义是将剪辑空间位置的XYZ除以该位置的W分量(如果W为1,则这显然不会改变任何内容)。裁剪和NDC空间是两个独立的空间,裁剪发生在NDC空间之前。在概念上,您可以认为裁剪是针对-1,1范围的NDC空间进行的。毕竟,剪辑空间在-W,W的范围内,所以如果你除以W,你得到的范围是- 1,1。

但重要的是要记住,剪辑空间不是NDC空间。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68340918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档