Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将三维点映射到二维上下文_C#_Algorithm_3d_2d - Fatal编程技术网

C# 将三维点映射到二维上下文

C# 将三维点映射到二维上下文,c#,algorithm,3d,2d,C#,Algorithm,3d,2d,我已经在stack overflow中阅读了一些文章甚至问题。我没有找到我想要的。我可能没有仔细看,所以如果你知道的话,请给我指出正确的文章/问题 无论如何,我想做的很清楚。我知道摄像机的位置(x',y',z'),我有摄像机旋转矩阵(Matrix3)。我还有相机纵横比(W/H)和输出大小(W,H)。我的点在(x,y,z),我需要一个代码或(一个算法,这样我可以编写代码)来计算它在屏幕上的位置(屏幕的大小与相机输出的大小相同),如(x'',y'') 你知道什么有用的文章吗?我是重要的文章或算法,以

我已经在stack overflow中阅读了一些文章甚至问题。我没有找到我想要的。我可能没有仔细看,所以如果你知道的话,请给我指出正确的文章/问题

无论如何,我想做的很清楚。我知道摄像机的位置(x',y',z'),我有摄像机旋转矩阵(Matrix3)。我还有相机纵横比(W/H)和输出大小(W,H)。我的点在(x,y,z),我需要一个代码或(一个算法,这样我可以编写代码)来计算它在屏幕上的位置(屏幕的大小与相机输出的大小相同),如(x'',y'')

你知道什么有用的文章吗?我是重要的文章或算法,以支持摄像机的旋转矩阵


谢谢大家。

我不完全确定您试图实现的目标,但我认为您正试图使一个平面(屏幕)的表面与另一个平面的相对尺寸对齐。要计算这个比率,你应该研究一下。还有很多三角。希望这有帮助。

我认为您没有足够的信息来执行计算

你可以把你的相机想象成针孔相机。它由一个像平面和一个点组成,所有照射到像平面的光线都通过该点。通常,图像平面是矩形的,所有入射光通过的点位于图像平面的法线上,从图像平面的中心开始

有了这些限制,您需要: -摄像机的中心位置 -定义图像平面大小和姿态的两个向量(相互垂直) -点到相机平面的距离(这可以称为焦距,尽管严格来说不是一回事)

(实际上有几种方式来表示这些量,例如,)

如果只有图像平面的位置和大小(以像素和摄影机旋转为单位),则缺少比例因子。在现实世界中,这相当于知道您将相机放在何处以及相机指向何处,但不知道焦距(缩放设置)

有很多可用的文献,这一篇首先通过搜索弹出:


也许这有助于您找到正确的搜索词。

您需要首先指定投影类型(或正交、透视…?)

  • 将任意点
    (x,y,z)
    变换到相机空间

    减去相机位置,然后应用相机方向(坐标系)矩阵的倒数
    Z
    摄像机的轴通常是观看方向。如果您使用4x4同质矩阵,则减法已在其中,因此不要重复

  • 应用投影

    正交投影就是尺度矩阵。透视投影更为复杂,所以谷歌为其提供了支持。这是应用纵横比和视野(视野)视角的地方

  • 剪辑到屏幕和Z缓冲区空间

    现在,在投影的摄影机空间中有
    x,y,z
    。要用透视图实际获得屏幕坐标,您必须除以
    z
    w
    坐标(取决于使用的数学和投影),因此对于3x3矩阵

        xscr=x/z;
        yscr=y/z;
    
    这就是为什么投影的z-near必须为
    >0
    !(否则可能导致除零)

  • 渲染或处理像素
    (x,y)

  • 有关更多信息,请参阅:

    [Notes]

    如果你查看OpenGL教程/参考资料或任何3D矢量数学渲染,你会发现很多东西。谷歌同质变换矩阵或同质坐标