gpt4 book ai didi

rendering - 我应该如何处理裁剪到观察平面的 3D 点的投影?

转载 作者:行者123 更新时间:2023-12-02 05:08:25 29 4
gpt4 key购买 nike

我正在创建一个基于软件的 3D 渲染器,只是为了学习概念和数学。这很有趣,我在网格顶部有一个漂亮的旋转立方体,充当一​​种地板。使用线段渲染网格/地板。我有一个使用简单的观察转换定位和定向的虚拟相机。观察平面任意设置为距“眼睛”的距离为 n,或在 z = -n .

一切正常(从对象到世界转换到相机空间,剔除,项目,剪辑,渲染)除了一件事。渲染网格时,线段端点可能跨越虚拟相机的观察平面。我想渲染可见的部分,所以我剪辑到查看平面。剪裁的端点被投影到观察平面。投影是:

p'(x) = -n * p(x) / p(z)
p'(y) = -n * p(y) / p(z)

所有潜在的可见点都将具有 p(z) ≤ -n .裁剪到观察平面的点有 p(z) = -n .因此,我有效果:
p'(x) = p(x)
p'(y) = p(y)

对于这一点;一个正交投影。

此处的值很容易位于查看平面上的窗口之外,这会导致视口(viewport)转换将这些点发送到操作系统窗口的边界之外。效果是我看到杂散线周期性地飞来飞去。这太糟糕了。

没有像说OpenGL那样做所有事情(我只是使用OpenGL!),我错过了什么?

谢谢(如果你做到了这一步!)。

这是显示异常的屏幕截图。网格的近右角刚好不在视野范围内。向下靠近网格左角的线段位于相机后面,因此被剪裁。端点经历了(错误的)正交投影并最终在左侧字段中退出。

我没有做任何视锥体剔除(还)。也许我应该?

enter image description here

最佳答案

您应该能够摆脱这些转换到屏幕空间之外的点,而无需查看您的视锥体体积。所以在你进行截锥剔除之前,你的屏幕空间裁剪算法是什么样的?看看这些算法:http://en.wikipedia.org/wiki/Line_clipping看看你是否能从中受益。

无论哪种方式,我认为您应该考虑使您的渲染器能够处理位于操作系统窗口之外的点。使用上述裁剪算法,您可以剔除完全落在窗口外的线段,并裁剪只有一个点在外面或两个点都在外面但线穿过屏幕空间的线段。

关于rendering - 我应该如何处理裁剪到观察平面的 3D 点的投影?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8530505/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com