将3D点映射到2D上下文

索鲁什·法拉哈蒂(Soroush falahati)

我已经读过一些文章,甚至在堆栈溢出中也有问题。我没有找到想要的东西。我可能没有仔细看过,因此,如果您知道我的观点,请指出我纠正的文章/问题。

无论如何,我想做的很清楚。我知道相机的位置(x',y',z'),并且具有相机旋转矩阵(Matrix3)。我也有相机的宽高比(W / H)和输出尺寸(W,H)。我的POINT位于(x,y,z),我想要一个代码或(一个算法,因此我可以编写代码)来计算其在屏幕上的位置(屏幕的大小与相机输出的大小相同)为(x'',y ”)。

您知道任何有用的文章吗?对于支持相机旋转矩阵的文章或算法,我很重要。

谢谢你们。

光谱

好,您需要先指定投影类型(正交,透视...?)

  1. 将任何点转换(x,y,z)为相机空间

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

  2. 应用投影

    正交投影只是比例矩阵。透视投影更为复杂,因此请使用google搜索。这是应用纵横比以及FOV(视野)视角的地方。

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

    现在您已经拥有x,y,z了预计的相机空间。要实际获取具有透视图的屏幕坐标,您必须除以zw坐标(取决于所使用的数学和投影),因此对于3x3矩阵

        xscr=x/z;
        yscr=y/z;
    

    这就是为什么z-near的投影必须是> 0(否则可能导致被零除)

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

有关更多信息,请参见:数学计算简单的图形管道

[笔记]

如果您查看OpenGL教程/参考或任何用于渲染的3D矢量数学,您会发现很多东西。Google均匀变换矩阵或均匀坐标。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将3D点映射到2D上下文

来自分类Dev

将共面3D点映射到其平面2D坐标

来自分类Dev

将SpriteKit SKScene overlaySKScene中的2D点映射到SceneKit SCNScene中的3D点

来自分类Dev

Three.js使用正交相机将2D映射到3D

来自分类Dev

将2D图像映射到3D纹理

来自分类Dev

根据值将标量映射到数组:2D到3D图像处理-NumPy / Python

来自分类Dev

如何访问Sprite 2D上下文?

来自分类Dev

在 QML Canvas 中转换 2D 上下文

来自分类Dev

将顶点0-7映射到3D点?

来自分类Dev

Java LWJGL OpenGL 3将3d点转换为2d点

来自分类Dev

Java LWJGL OpenGL将3d点转换为2d点

来自分类Dev

Java LWJGL OpenGL将3d点转换为2d点

来自分类Dev

<canvas>:从内存中删除2d上下文,而不从内存中删除webgl上下文

来自分类Dev

如果在画布上调用 2d 上下文,则 Webgl 上下文为空

来自分类Dev

将 2D 矢量映射到矩形

来自分类Dev

从子上下文(例如计时器)中选择d3节点

来自分类Dev

将3D点投影到2D屏幕坐标

来自分类Dev

将3D点投影到2D屏幕坐标

来自分类Dev

将2D点转换为3D位置

来自分类Dev

如何使用 OpenCV 将点从 2D 投影到 3D?

来自分类Dev

如何使用流利的API将表映射到上下文?

来自分类Dev

如何将右Alt映射到上下文菜单键

来自分类Dev

映射到与流2D阵列

来自分类Dev

如何获取画布上下文(2D)的当前模式对象内容?

来自分类Dev

向2D上下文添加像旗一样挥手

来自分类Dev

为什么webgl canvas上下文比2d canvas使用更多的内存?

来自分类Dev

从HTML Canvas 2D上下文获取内部图像

来自分类Dev

WPF 2D数组绑定和上下文菜单

来自分类Dev

如何使用javascript和Canvas 2D上下文注释线?