这只是“事实”,OpenGL深度测试是在窗口空间坐标中执行的(在 [-1,1]^3 中的标准化设备坐标。具有额外的缩放 glViewport 和 glDepthRange)。
所以从我的角度来看,这是 OpenGL 库的设计观点之一。
消除此 OpenGL 扩展/OpenGL 核心功能的一种方法https://www.opengl.org/registry/specs/ARB/depth_clamp.txt如果它在您的 OpenGL 版本中可用。
我想描述的是,在透视投影中,没有关于“远裁剪平面”的内容。
3.1 对于透视投影,您需要将点 \vec{c} 设置为投影中心和将在其上执行投影的平面。我们称它为图像平面 T: (\vec{r}-\vec{r_0},\vec{n})
3.2 假设投影平面 T 分裂任意点 \vec{r} 和 \vec{c} 投影中心。在其他情况下,\vec{r} 和 \vec{c} 在一个 hafe-space 中,点 \vec{r} 应该被丢弃。
3.4 投影的思想是求\vec{i}与平面T的交点\vec{i}=(1-t)\vec{c}+t\vec{r}
3.5 原样 (\vec{i}-\vec{r_0},\vec{n})=0
=>
( (1-t)\vec{c}+t\vec{r}-\vec{r_0},\vec{n})=0
=>
( \vec{c}+t(\vec{r}-\vec{c})-\vec{r_0},\vec{n})=0
3.6. 从“3.5”派生的 t 可以代入“3.4”,您将收到到平面 T 的投影。
3.7. 投影后,您的点将位于平面内。但是如果假设图像平面与 OXY 平面平行,那么我可以建议在投影后使用原始“深度”作为点。
所以从几何的角度来看,根本不使用远平面是可能的。也根本不使用 [-1,1]^3 模型。
ps 我不知道如何以正确的方式输入乳胶公式,它们将被渲染。