【发布时间】:2017-06-13 11:06:25
【问题描述】:
听说剪裁应该在剪裁坐标系中进行。 这本书提出了一种情况,即从相机后面到观看体积中铺设一条线。 (我们把这条线定义为PQ,P在相机点后面) 我不明白为什么会出现问题。
(书上说完成归一化变换后,P会放在镜头前。)
我认为在制作裁剪坐标系之前,相机在原点 (0, 0, 0, 1) 上,因为我们做了视图变换。 但是,在 NDCS 中,我无法考虑相机的位置。
我还有第二个问题。 在顶点着色器中,我们进行模型视图转换,然后进行投影转换。最后,我们将这些顶点输出到光栅化器。 (有些顶点的w不等于'1')
在这里,我很好奇。渲染管线会自动做除法(by w)吗?完成剪辑后。
【问题讨论】:
-
我建议你这样做:alfonse.bitbucket.io/oldtut? Nicol Bolas 的一本很棒的书/教程,您的所有问题都会很快得到解答。
-
我看了一点,但我认为没有任何我想要的信息。
-
OpenGL 只绘制坐标在 de 2x2x2 NDCS 内的像素。其他一切都被剪裁了。值模型 XYZ 坐标由矩阵 M、V、P 转换,生成的坐标分量“w”用于进行自动除法。 GPU 做的,不是你。
-
@Ripi2 非常感谢。如果你不介意,那么你能解释一下为什么剪裁应该在剪裁坐标中进行,而不是 NDCS。
-
当您有 4D 坐标(作为矩阵相乘的结果)时,像 {3.0, 6.0, 12.0, 4.0} 这样的点表示与 {0.75, 1.5, 3.0, 1.0} 相同的 3D 点。注意除以“w”。将“w”视为 4D 中的比例因子。因此,在透视分割之前,NDCS 2x2x2 立方体是 2wx2wx2wx。这是“剪裁空间”。驱动程序使用 if 进行剪裁,保存剪裁部分的分割。
标签: opengl graphics transformation vertex-shader coordinate-transformation