单点透视和负深度点

时间:2019-06-12 10:17:46

标签: math rendering perspective

我正在尝试使用单点视角创建游戏。一切对于视图中的点都可以正常工作,但负深度会出错。我了解下图(source)所示的透视图。

enter image description here

通常,我沿着较低的水平线在距框架右垂直边缘的左侧一定距离处取一个点(在这种情况下为5个点),将其与O'点(线H'O' ),并且该线与垂直线(在点H'处)相交的深度线(在这种情况下为5)。即使对于负深度,此效果也很好(因为线H'O'与视点下方的垂直线相交)。但是,如果深度大于O'的距离(这意味着该点将在O'的右侧),则直线翻转且H'终止于视点上方(尽管应终止于下方)

我应该如何纠正它,以便正确地将负深度的点正确转换(从3D空间到2D空间)?


编辑 该图像可能更好。

enter image description here

我的问题是如何处理负深度(应该在屏幕下方)的点,该点的深度大于横向距离。

enter image description here

1 个答案:

答案 0 :(得分:0)

沿着框架下边缘所确定的线,点O'右边的点与观察者后方的点相对应,因此从技术上讲,观察者无法看到它们。要查看背后的点,这意味着您必须转身,因此需要更改屏幕的位置。在点O'的右边绘制一个黑色正方形框架的副本,以便新正方形是原始框架正方形相对于与水平线正交并穿过点O'的线的镜像对称图像。

编辑:应该将点O'(即位于观察者后方的点)右侧负深度的点映射到水平蓝线上方。这是正确的方法。

我假设您的三维坐标系的原点位于图片上方形框的右下角。 x轴(我认为您如何测量宽度)沿框架的较低horizo​​ntl边缘延伸,而y轴(称为高度)沿框架的右侧垂直边缘延伸。深度轴为三维,并且垂直于方形框架的平面(因此,它平行于地面)。它从框架正方形的右下角开始。假定点O'与正方形的右垂直边的距离为S,并且点C的坐标为{C1, C2}(C1是点C与右边的距离垂直边缘,C2是C与正方形下水平边缘的距离)。

给出一个点在三个维度上的坐标{w, h, d}(w-宽度,h-高度,d-深度),它在两个二维正方形屏幕上的表示形式如下:

x = (S*w + C1*d)/(S+d)
y = (S*h + C2*d)/(S+d)

因此,您在注释中作为示例给出的要点是 P1 = {h = 5, w = 5, d = 5}P2 = {h = 5, w = 5, d = -10} 它们在屏幕上的表示是

P1_screen = {(S*5 + C1*5)/(S+5), (S*5 + C2*5)/(S+5)}
P2_screen = {(S*5 - C1*10)/(S-10), (S*5 - C2*10)/(S-10)}

无论您的参数S, C1 and C2是什么。连接点P1和P2的(无限)线的表示形式在屏幕上表示为连接点P1_screen和P2_screen的(无限)线。但是,如果您想要连接P1和P2的段的可见部分的2D表示,则必须在P1_screen和P2_screen之间绘制(无限)线,并排除 >以下两个细分:细分[P1_screen, P2_screen]和细分from P2_screen along the line up towards the upper top edge。您只需要在屏幕上绘制连接P1_screen和P2_screen的无穷远段,该段从P1_Screen开始并向下延伸到屏幕的较低水平边缘。