标准化均匀的3d点

正如我在几何中看到的腐败一样,为什么规范一个齐次(除以w)顶点着色器返回的顶点位置是一个坏主意?

更新

顶点着色器:

// float4 pos : SV_POSITION; output.pos = mul( mvpMatrix, float4(input.pos, 1) ); output.pos /= output.pos.w; // this line causes the visual corruption below 

当我移动到线框的球体右侧时,有三个图像。 随着我越来越近,几何graphics开始腐蚀。 看来相机周围的几何graphics最腐败。 几何腐败

很难确切地expression你的意思,但是这听起来像是你将顶点位置除以顶点着色器中计算的一部分。 这是不正确的,由w划分实际上是由graphics处理器为您完成的。 考虑这里的标准转换:

在这里输入图像说明 (原始图像来自: http : //www.c-jump.com/bcc/common/Talk3/Math/Matrices/Matrices.html )

如果你要自己分裂,那么最终会发生两次,这自然会产生奇怪的结果。 顶点着色器可以安全地写入顶点位置

 gl_Position = Proj * View * Model * in_vertex; 

编辑:我的答案是在OpenGL的上下文中,但同样适用于DirectX。