投影矩阵指向球体表面

时间:2010-12-03 10:24:16

标签: math geometry 3d

我需要将一个3D物体投射到球体的表面上(嗯......就像投射阴影一样)。

AFAIR这应该可以使用投影矩阵。

如果“阴影接收器”是一个平面,那么我的投影矩阵将是3D到2D平面投影,但在这种情况下我的接收器是3D球面。

所以给定sphere1(中心点,半径),sphere2(othercenter,otherradius)和eyepoint我怎样才能计算出一个矩阵,它将所有点从sphere2投射到sphere1上(如投射阴影)。

3 个答案:

答案 0 :(得分:4)

您的意思是给定顶点v您需要以下投影:

v'= centerpoint + (v - centerpoint) * (radius / |v - centerpoint|)

使用投影矩阵无法做到这一点。你可以在着色器中轻松完成它。

答案 1 :(得分:2)

矩阵通常用于表示线性运算,例如投影到平面上。 在您的情况下,使用线性函数不会从输入推导出结果顶点,因此使用矩阵无法进行此投影。

答案 2 :(得分:2)

如果sphere1是球体((0,0,0),1),也就是半径为1的球体以原点为中心,那么你实际上是想要一种转换任何位置的方法(x, y,z)在3D中到单位球面上的相应位置(x',y',z')。这相当于向量重整化:(x',y',z')=(x,y,z)/ sqrt(x ^ 2 + y ^ 2 + z ^ 2)。

如果sphere1不是单位球体,而是球体((a,b,c),R)你可以做大部分相同的事情: (x',y',z')= R *(x-a,y-b,z-c)/ sqrt((x-a)^ 2 +(y-b)^ 2 +(z-c)^ 2)+(a,b,c)。这相当于改变坐标,因此第一个球体是单位球体,解决问题,然后改变坐标。

正如人们所指出的,这些函数是非线性的,因此投影不能称为“矩阵”。但如果您因某种原因首选投影矩阵,则可以首先从3D投影到平面,然后从平面投射到球体。我不确定那会不会更好。

最后,让我指出线性地图不会产生被零除错误,但如果仔细观察上面的公式,你会看到这张地图可以。几何上,这是因为很难将球体的中心点投射到其边界。