投影 - 将 3d 转换为 2d

2024-04-18

我有问题或者很好,我不知道如何将具有 x、y、z 值的 3d 点转换为 2d 点, 我必须绘制投影,其中我确实有点的 x、y、z 值,但我不知道如何将它们转换为 2d,以便我可以将它们移动到我的轴上。

我一直在浏览维基和谷歌,但是我不太确定应该使用哪种矩阵变换来获得想要的结果。


我们首先假设观察场景的摄像机以原点为中心,并且观察-z方向。 然后:

  • 透视投影由下式给出:
    x' = x/z
    y' = y/z

  • 正交投影由下式给出:
    x' = x
    y' = y
    (即,只需丢弃 z 分量)

现在您已经应用了上述步骤,您可能会获得一个点(x',y') = (-28.4, +134.5)。您现在需要根据您的屏幕分辨率和相机“缩放系数”和宽高比对它们进行缩放和居中:例如,您可能想要乘以Zoom并添加screen_center给你的x and y组件(注意:大多数图形渲染系统都有y方向朝下,因此您可能需要交换符号y成分)。您最终可能仍会得到坐标为负或坐标大于画布大小的像素。只需丢弃它们:这意味着它们位于您的视锥体之外。

最后,您可能想知道如果您的相机坏了该怎么办not指向-z或者不以原点为中心。对于后者,很简单:只需在执行其他操作之前将相机坐标减去所有 3D 点的分量即可。对于相机旋转,它实际上也很简单:您只需在执行其他操作之前以相机旋转的相反方式旋转点即可。这仅意味着您需要将所有 3D 坐标乘以相机旋转矩阵的转置。此步骤背后的想法是,移动相机与沿相反方向移动点完全相同(并且旋转矩阵的逆矩阵恰好是同一矩阵的转置)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

投影 - 将 3d 转换为 2d 的相关文章

  • 证明:为什么 java.lang.String.hashCode() 的实现与其文档相符?

    JDK 文档为java lang String hashCode http java sun com javase 6 docs api java lang String html hashCode famously https stack
  • 有效地将相似的数字分组在一起[重复]

    这个问题在这里已经有答案了 可能的重复 一维数数组聚类 https stackoverflow com questions 11513484 1d number array clustering 我有一个数字数组 例如 1 20 300 4
  • CSS Hex 到速记十六进制转换

    将十六进制转换为速记十六进制的正确算法是什么 例如 996633很容易被转换为 963 但如果是这样怎么办 F362C3 我的第一个猜测是我只取每种颜色的第一个值并使用它 所以 F362C3变成 F6C 但我不知道如何从数学上证明这种方法的
  • PHP 矩阵的逆矩阵

    I saw 这个问题 https stackoverflow com questions 211160 python inverse of a matrix 并弹出这个想法 PHP 有没有一种有效的方法来做到这一点 EDIT 最好有演示 你
  • ZedGraph 垂直线与 LineObj 问题

    我有一个 ZedGraphControl 里面有几条曲线 我想在一些固定的 x 位置添加垂直线 当然 这些线只能位于实际图形区域内 我尝试以下 LineObj line new LineObj Color Black xPos myPane
  • 投影 3D 网格的 2D 轮廓算法

    给定 一个 3D 网格 由一组顶点和三角形定义 并用这些点构建网格 问题 找到任意平面上投影的任意旋转网格的二维轮廓 投影很容易 挑战在于找到平面中投影三角形边的 外壳 我需要一些有关研究该算法的输入 指针的帮助 为简单起见 我们可以假设
  • 在二维空间中从 A 点前往 B 点?

    我正在开发一个项目 需要我计算从可变点 A 到可变点 B 的 0 360 度航向 以使 A 点的物体面向 B 点 现在 我不确定如何实现这一目标 我用谷歌搜索但没有找到任何好的解决方案 在任何情况下 如何计算二维空间中从 A 点到 B 点的
  • 为什么 float() 会截掉尾随零?

    该代码成功地将一个包含许多数字的大文件裁剪为几个包含数字的较小文本文件 但它产生了一个有趣的怪癖 所有数字都应精确到小数点后四位 例如 2 7400 但它们打印为 2 74 这是文件的片段 0 96 0 53 0 70 0 53 0 88
  • 计算标签云中标签字体大小的公式是什么?

    我有一个标签云 我需要知道如何更改最常用标签的字体大小 我需要设置最小字体大小和最大字体大小 您可以使用线性或对数评估与某个标签相对于最大标签关联的项目数量 将其乘以最小和最大字体大小之间的差值 然后将其添加到最小字体大小 例如 伪代码中的
  • 如何检查一个盒子是否适合另一个盒子(允许任何旋转)

    假设我有两个盒子 每个盒子都是一个长方体 http en wikipedia org wiki Rectangular cuboid aka长方体 我需要编写一个函数来决定盒子是否具有尺寸 一 二 三 可以装入具有尺寸的盒子中 甲 乙 丙
  • LibGDX - 正确使用 Polygon 类

    我创造了Polygon包裹我的飞机的物体 飞机的大小TextureRegion是 256x74 但在游戏中这个尺寸是 70x20 所以 TextureRegion texRegsAirplane TextureRegion split te
  • 在二维平面中找到距离 P 点最近的 K 个点

    资料来源 亚马逊面试问题 解决方案1制作大小为 K 的堆并按最小距离收集点O NLogK 复杂 解决方案2 取大小为 N 的数组并按距离排序 应该使用QuickSort 霍尔修改 取前 K 点作为答案 这太复杂了 NlogN 但可以优化到近
  • Python:球体的交集

    我对编程非常陌生 但我决定承担一个有趣的项目 因为我最近学会了如何以参数形式表示球体 当三个球体相交时 有两个不同的交点 除非它们仅在一个奇点处重叠 球体的参数表示 我的代码是根据答案修改的Python matplotlib 绘制 3d 立
  • R 忽略空值的矩阵列的成对比较

    我有一个数组 我想获取它之间的相似度的度量values在每一列中 我的意思是我希望比较数组的成对列之间的行 并在它们的值匹配时增加一个度量 对于两列来说 所得的测量值最大值将完全相同 本质上我的问题与这里讨论的相同 R 两两比较矩阵中的所有
  • 确定范围是否重叠

    给定两个具有整数开始时间和结束时间的事件 E1 s1 e1 E2 s2 e2 实现快速布尔检查以查看事件是否重叠 我有解决方案 但我很想看看其他人想出了什么 编辑 好的 这是我的解决方案 e1 gt s2 s1 gt s2 e2 lt s1
  • 四舍五入到 25、50、75、100

    我不是一个数学爱好者 所以我很难想出一个将小数四舍五入到 25 50 75 和 100 的计算方法 这不会是典型的四舍五入 因为小数不会减少但只增加了 Example 如果 11 12 则舍入为 11 25 如果为 11 34 则舍入为 1
  • 用圆形雷达数学方法表示点

    我正在编写一个简单的应用程序 它可以向您显示您周围的朋友 但不是在法线地图中 而是在像 UI 这样的真正圆形雷达上 https i stack imgur com Au3IP png https i stack imgur com Au3I
  • 使用 OpenGL 着色器进行数学计算 (C++)

    我有一个矩阵 例如 100x100 尺寸 我需要对每个元素进行计算 matrix i j tt 8 5例如 我有一个巨大的矩阵 我想使用 OpenGL 着色器来实现该算法 我想使用着色器 例如 uniform float val unifo
  • 参数映射不能用于 MERGE 模式

    我收到错误参数映射不能在合并模式中使用 我如何解决此错误 我正在使用下面的代码 我非常感谢任何帮助 提前致谢 MERGE u Person names RETURN u and data2 names name Keanu Reeves1
  • 为什么在 Windows 上安装预编译版本的 LAPACK 时出现错误?

    我正在尝试使用犰狳矩阵库进行矩阵计算 它需要 BLAS 和 LAPACK Armadillo 文档建议从以下位置获取预编译版本http www stanford edu vkl code libs html http www stanfor

随机推荐

  • gulp compass 创建一个不需要的文件而不是仅使用流

    这是我的应用程序指南针吞咽任务 var compass require gulp compass var autoprefixer require gulp autoprefixer gulp task app compass functi
  • 更改不同值的单元格颜色 - Gridview

    我需要区分两个连续的单元格 一行中的每个值 如果它们具有不同的值 则在将值绑定到网格视图时 因此 如果在第 1 行中我有单元格 ABC 在第 2 行中我有单元格 CBA 我需要用不同的颜色为每个单元格着色 最好的方法是什么 这称为条件格式
  • 什么是渐进增强?

    Jeff 在谈论使用 JQuery 编写 stackoverflow 时提到了 渐进增强 的概念 经过快速谷歌之后 我发现了一些关于它的高层讨论 谁能推荐一个作为程序员开始的好地方 具体来说 我一直在用 PHP 编写 Web 应用程序 并希
  • 如何解锁 Eclipse 4.2 (Juno) 中的工具栏

    我从 Eclipse Indigo 3 7 迁移到 Juno 4 2 在 Juno 中 所有工具栏似乎都被永久锁定 有没有办法解锁它们以便可以移动或重新排列它们 尝试 Windows 首选项 外观 看打印 然后在搜索框中输入 主题 或转到
  • 使用 R 代码的移动平均线

    我需要 R 代码的第一部分是 编写一个执行以下操作的 R 函数 给定一个序列 xN x1 x2 xN of N 观察 该函数返回一个移动平均值向量 其中计算每个平均值 k 个连续观察值 将函数命名为 ma 其参数为 向量 xN 和 k 到目
  • 基于文件类型的应用程序选择对话框

    我正在尝试创建一个对话框 它将显示打开给定文件类型的可用应用程序列表 我一直在 stackoverflow 上查看一些解决相同问题的问题 但由于缺乏答案而迷失了方向 我特别关注这个问题 在 Android 中 如何根据文件类型显示应用程序选
  • 使用 jquery post for mvc 3 在部署时不起作用

    所以我有这个 MVC 3 应用程序 它有一个下拉列表 我用它通过 jquery 填充 div 它在本地工作正常 但当我将其部署到服务器时 它重定向不正确 这是我的 jquery ddlCategoryMain change function
  • 将 mm/dd/yyyy 转换为 yyyymmdd (VB.NET)

    有什么方法可以将日期格式 dd mm yyyy 转换为 yyyymmdd 格式吗 例如从 25 07 2011 到 20110725 在 VB NET 中 日期本身不have固有的格式 您可以将字符串解析为DateTime通过解析它dd M
  • 如何在bash函数中显示数字到小数点后两位

    我应该如何获取以百分之秒为单位的数字并将其以秒为单位显示到小数点后两位 我不确定遵循 dTime 函数的伪代码 但我认为您会得到我的目标 function time echo date N 10000000 function dTime e
  • 用于存储用户位置历史记录的 MongoDB 架构

    我想使用 MongoDB 来存储我的用户位置历史记录 当然要征得他们的同意 我看到以下三个选项 为所有用户创建一个位置集合 每个文档都有一个 userId 字段和一个时间字段 这两个字段都将被索引 该集合中的行数可能会增长到超过 1 亿行
  • 绑定到 Date() 对象时如何格式化 input[time] 的值

    我将变量绑定到时间类型的输入字段 但显示的格式错误 它显示时间如下 08 54 30 088我真正需要的是这样的格式 08 54 我尝试使用过滤器设置输入字段的值 value datetime date date HH mm 但我的编辑说我
  • 为什么Windows和Linux的标准库函数名称不同?

    我正在将 Windows 库移植到 Android 使用 GNU 标准 C 库选项 libstdc v3 VC 和 GNU 库之间似乎存在许多命名差异 例如 stricmp叫做strcasecmp instead unlink叫做unlin
  • 使用 Sharepoint 事件接​​收器在文档库中创建文件夹

    我使用以下代码在文档库中创建一个文件夹 该事件被触发并执行到我的代码的最后一行 没有任何问题 但是 该文件夹未在我的文档库中创建或列出 public override void ItemAdded SPItemEventProperties
  • 如何在javascript中处理(® ´ © ¿ ¡ ° À ) 特殊字符?

    我需要开发一个 javascript 函数 不允许字符串中出现特殊字符 问题是IE8无法识别字符串中的特殊字符 并且在使用indexOf 方法时返回 1 处理这些特殊字符的正确方法是什么 只要您的所有编码都是正确的 您是否将文件另存为 UT
  • numpy 的花式索引是如何实现的?

    我正在对 2D 列表和 numpy 数组进行一些实验 由此 我提出了三个我很想知道答案的问题 首先 我初始化了一个 2D python 列表 gt gt gt my list 1 2 3 4 5 6 7 8 9 然后我尝试用元组索引列表 g
  • 收到错误:WebSphere MQ 原因代码 2538?

    我在 Linux 上安装了 WebSphere MQ 和 WebSphere Message Broker 当我执行mqsicreateexecutiongroup我收到一条错误消息 BIP1046E 无法连接到队列管理器 无法连接到队列管
  • Laravel 5 强制使用 HTTPS 登录路由到 HTTP 的问题

    Laravel 版本 Laravel 5 4 30 我遇到一个问题 我的生产代码托管在通过 HTTPS 提供服务的负载均衡器后面的 AWS Elastic Beanstalk 上 当使用内置的 auth 特征和 make auth 控制器来
  • 在 Android 上将游戏资源下载到 SD 卡

    我正在开发一个安卓游戏必须下载一些assets to the SD card使应用程序的大小尽可能小 我正在考虑使用未压缩的zip文件来捆绑所有资产 客户的一个要求是protect尽可能多地使用这些资产 作为 apk 的一部分被认为是足够的
  • Android Twilio 视频通话,唤醒应用程序并带到前台

    我正在尝试使用 Twilio Video Call 提供本机视频通话体验 这是场景 人 AAA 称人 BBB BBB 没有打开应用程序 在后台或前台 应用程序处于终止状态 手机甚至可能被锁定 当来自 AAA 的电话到达时 应用程序将打开 并
  • 投影 - 将 3d 转换为 2d

    我有问题或者很好 我不知道如何将具有 x y z 值的 3d 点转换为 2d 点 我必须绘制投影 其中我确实有点的 x y z 值 但我不知道如何将它们转换为 2d 以便我可以将它们移动到我的轴上 我一直在浏览维基和谷歌 但是我不太确定应该