从屏幕坐标查找世界坐标

2023-12-14

这个问题有很多答案,但我不确定它们都适用于 XTK,例如在 Three.JS 中看到了多个答案,但显然 XTK 和 Three.JS 没有相同的 API。使用射线和Matrix似乎与其他框架的许多其他解决方案非常相似,但我仍然没有掌握可能的解决方案。现在只需找到坐标 X、Y 和 Z 并将它们记录到Console.Log很好,后来我希望创建一个标题/工具提示来显示信息,但还有其他方式来显示它。但有人至少可以告诉我是否可以使用射线与物体碰撞吗?我不确定 XTK 中的碰撞如何与网格或任何其他文件一起工作。现在任何提示都会很棒!


这是我在 xtk 中取消投影的函数。如果您发现错误,请告诉我。现在有了结果点和相机位置,我应该能够找到我的交点。为了使下一步的计算更快,我将在拾取事件中调用它,因此我只需尝试与给定对象的交集。如果我有时间,我也会尝试测试边界框。

注意:最后几行不是必需的,我可以处理射线而不是点。

X.camera3D.prototype.unproject = function (x,y) {

  // get the 4x4 model-view matrix
  var mvMatrix = this._view;

  // create the 4x4 projection matrix from the flatten gl version
  var pMatrix = new X.matrix(4,4);
  for (var i=0 ; i<16 ; i++) {
    pMatrix.setValueAt(i - 4*Math.floor(i/4), Math.floor(i/4), this._perspective[i]);
  }
  // compute the product and inverse it
  var mvpMatrxix = pMatrix.multiply(mwMatrix); /** Edit : wrong product corrected **/
  var inverse_mvpMatrix = mvpMatrxix.getInverse();
  if (!goog.isDefAndNotNull(inverse_mvpMatrix)) throw new Error("Could not inverse the transformation matrix.");

  // check if x & y are map in [-1,1] interval (required for the computations)
  if (x<-1 || x>1 || y<-1 || y>1) throw new Error("Invalid x or y coordinate, it must be between -1 and 1");

  // fill the 4x1 normalized (in [-1,1]⁴) vector of the point of the screen in word camera world's basis
  var point4f = new X.matrix(4,1);
  point4f.setValueAt(0, 0, x);
  point4f.setValueAt(1, 0, y);
  point4f.setValueAt(2, 0, -1.0); // 2*?-1, with ?=0 for near plan and ?=1 for far plan
  point4f.setValueAt(3, 0, 1.0); // homogeneous coordinate arbitrary set at 1

  // compute the picked ray in the world's basis in homogeneous coordinates
  var ray4f = inverse_mvpMatrix.multiply(point4f);
  if (ray4f.getValueAt(3,0)==0) throw new Error("Ray is not valid.");
  // return in not-homogeneous coordinates to compute the 3D direction vector
  var point3f = new X.matrix(3,1);
  point3f.setValueAt(0, 0, ray4f.getValueAt(0, 0) / ray4f.getValueAt(3, 0) );
  point3f.setValueAt(1, 0, ray4f.getValueAt(1, 0) / ray4f.getValueAt(3, 0) );
  point3f.setValueAt(2, 0, ray4f.getValueAt(2, 0) / ray4f.getValueAt(3, 0) );
  return point3f;
};

Edit

Here,在我的存储库中,您可以在camera3D.js和renderer3D.js中找到用于在xtk中进行高效3D拾取的函数。

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

从屏幕坐标查找世界坐标 的相关文章

  • Java 转义 HTML - 字符串替换慢?

    我有一个 Java 应用程序 它大量使用大文件来读取 处理并传递给 SolrEmbeddedServer http lucene apache org solr 其中一个函数执行基本的 HTML 转义 private String html
  • Autodesk Forge:工作项因 AppPackage 问题而失败

    我的 AppPackage 无法加载 并且我无法在文档或错误消息 代码中找到确切的答案 我通过将其解压缩到本地计算机上的 C Program Files Autodesk ApplicationPlugins 中来测试该捆绑包 并且它按预期
  • 如何取消引用哈希引用

    更新 我所知道的关于引用 取消引用的一切都来自这里 http www thegeekstuff com 2010 06 perl array reference examples 我正在使用一个库 来自库文档 Returns a refer
  • 如何在 Eclipse 3.8 中安装 Perforce 插件

    如何在 Eclipse 3 8 中安装 Perforce 插件 P4Eclipse 必然插件和集成页面仅列出 Eclipse 4 2 到 4 4 Eclipse 3 8 是 Ubuntu 14 04 存储库中提供的版本 最新版本的 P4Ec
  • 如何使用 VaultCustomQuery 查询父状态的嵌套集合中的字段

    我有一个一对多的关系 我试图在我的状态中添加对象 类的列表 IE 我的合同状态包含附件列表List
  • ca65 汇编器和 ld65 链接器

    我开始在 WIndows 上使用 ca65 汇编器和 ld65 链接器来为 Commodore C64 计算机创建二进制代码 并在 VICE 模拟器上运行 我在文件 basic2 s 上写了这个小的 hello world 源代码 obje
  • Kindle fire 上安装错误:INSTALL_FAILED_MISSING_SHARED_LIBRARY

    我正在尝试运行附带的演示 android 地图项目 MapsDemo Android SDK Google API 10 在我的 Kindle Fire 上 但在安装应用程序时它会抛出此异常 2012 01 31 23 01 15 Maps
  • 从 Json 数据文件中解析值

    我需要将 JSON 文件加载到 powershell 中 然后处理 JSon 文件中的各个节点 该文件是从现有的 Json 文件加载的 JSONContent Get Content Path C JsonFile json Raw Con
  • 我直接从“Java all in one for Dummies”中取出这段代码......为什么它不起作用?

    import javax swing ImageIcon import javax swing JFrame import javax swing JLabel import javax swing JPanel SuppressWarni
  • re.search 和 re.match 有什么区别?

    两者有什么区别search and match Python 中的函数re module 我读过Python 2 文档 Python 3 文档 但我似乎从来不记得它 re match锚定在字符串的开头 这与换行符无关 所以它与使用不同 在模
  • Windows 服务器上的任务自动化软件[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 目前 我们的 Java 程序可以在 Windows 服务器上运行大量任务 出于效率和可维护性的原因 我们计划将其替换为开源任务自动化软件 以下是我们
  • 如何在AWS S3管理控制台上设置缓存控制标头

    我在 Internet Explorer 上渲染图像时遇到一些问题 我相信这可能是因为没有设置缓存控制标头 如何在 s3 Web 管理控制台上将缓存控制标头设置为单个文件 加载 S3 对象的属性面板后 展开元数据并添加 Cache Cont
  • 将字典写入文本文件?

    我有一本字典 正在尝试将其写入文件 exDict 1 1 2 2 3 3 with open file txt r as file file write exDict 然后我有错误 file write exDict TypeError m
  • 如何从文件中读取浮点数?

    当文件为字符串格式时 如何在 Python 中打开文件并读取文件中的浮点数 我还想更改每个浮点数的值并用新值重写文件 假设每行有一个浮点数 with open myfile as f floats map float f change fl
  • 如何抑制 StyleCop 警告?

    我正在使用 StyleCop 想要抑制一些不适合我的风格的警告 我更喜欢有解决方案 1 内联代码抑制2 全局设置抑制 我在网上搜索过但是仍然不确定如何进行压制 对于方法 1 他们说要添加以下行 程序集 SuppressMessage Mic
  • 表单提交后如何保留级联下拉列表选定的项目?

    当页面加载时 一切正常 但是 当我提交表单时 页面刷新后我的下拉列表会丢失以前选定的项目 如何修改我的函数以初始化下拉列表并保留先前选定的项目 在两个项目上 如果存在 这是我使用初始化下拉列表的 javascript 的视图 model M
  • 对 ArrayList 进行分页

    我正在尝试为中保存的值创建一个简单的分页例程ArrayList 基本上我想做的是渲染中的前五个元素ArrayList一开始去 然后当用户点击Next increment by another 5 and Previous decrease
  • 隐藏选择控件内的文本

    如何隐藏写在里面的文本部分option 我尝试过以下方法
  • MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)

    我在脚本中使用 Microsoft Edge Webdriver Chromium 和 Python3 webdriver配置如下 driveroptions Options driveroptions add argument inpri

随机推荐

  • 如何重置 CSS 网格中项目的宽度?

    我们有一个使用 Flexbox 完成的平铺项目的遗留部分 物品的容器是ul ul icon grid display flex flex wrap wrap list style none padding left 0 然后里面的物品是li
  • Laravel 复选框过滤器 ajax

    我需要实现一个基于ajax的空缺复选框过滤器 因此 我在页面上有一些类别 当用户标记某些复选框时 结果块仅显示所选类别中的空缺 如果没有选中复选框 页面将显示所有类别中的所有职位空缺 现在我有了当前的变体 但它不适用于复选框值数组 并且每次
  • 如何静态断言函数末尾无法到达

    我有一个相当复杂的match语句 带有嵌套ifs 等 位于函数末尾 每个分支都应该显式地从函数返回 或者调用一些 gt 函数 例如process exit 为了与其他程序员进行通信 并保护自己免受自己的伤害 我想告诉编译器断言此后的任何内容
  • Cassandra - 重叠数据范围

    我在 Cassandra 中有以下 任务 表 Task ID UUID 分区键 Starts On TIMESTAMP 聚类列 Ends On TIMESTAMP 聚类列 我想运行 CQL 查询来获取给定日期范围内的重叠任务 例如 如果我传
  • 在 Powershell 中,如何将消息框带到前台,并将焦点更改为消息框中的按钮

    在我的脚本中 当我打开消息框时 消息框始终在后台打开 位于运行的所有其他应用程序和窗口之后 我正在尝试做两件事 如果它们应该是两个问题 我很抱歉 但我认为密切相关 1 我希望消息框在需要呈现时显示在所有应用程序的前面 2 我想要将焦点更改为
  • 特征名称后面的特征是什么意思?

    我在阅读 Rust 时遇到了这个特征定义 trait Enchanter std fmt Debug 由此我了解到该特征的名称是Enchanter 但我不明白什么std Format Debug部分暗示 因为它也是一种特质 我认为 这是宣告
  • Jsoup div[class=] 语法有效,而 div.class 语法无效 - 为什么?

    对于以下 HTML 片段 div class class one class two class three classfour classfive classsix some inner content div 以下 Jsoup 选择器w
  • 为什么10000000*1000在java中给出141006540​​8? [复制]

    这个问题在这里已经有答案了 class a public static void main String arg int a 10000000 int b 1000 int c a b System out println c 输出是 14
  • windows:获取监视器的数量,包括禁用的监视器

    EnumDisplayMonitors列出当前激活的所有监视器 但是 它似乎不会返回禁用的 即未选中 将我的桌面扩展到此显示器 的那些 我如何获得包括残疾人在内的计数 好的 首先您必须创建一个设备上下文 http msdn microsof
  • Windows 任务计划程序的问题

    我在使用 Windows 任务管理器时遇到两个问题 一 我有一个 Python 脚本 可以在运行结束时通过 gmail 发送电子邮件通知 当我运行脚本本身时 这工作正常 但是当我通过 Windows 任务计划程序运行脚本时 脚本运行良好 但
  • Struts 2 jQuery 网格从 JSON 字符串加载数据

    我发现我们可以加载jqGird与 JSON 字符串 请参阅将 JSON 数据映射到 jqGrid 是否可以使用此功能sjg grid tag 我查看标签属性 只发现可以从 URL 加载数据 该 URL 将调用 Struts 操作 并且该操作
  • 在 Android 中以编程方式切换到开发者模式

    我想创建一个工具 允许在 Android 版本低于 4 2 的 Android 设备上切换到开发人员模式 我想创建一个 apk 来激活和停用开发者模式 这可能吗 如何 开发人员 模式是一种系统设置 因此只能从系统应用程序进行修改 即使用制造
  • 为什么当我转换为“long”时会调用“operator bool()”?

    我有以下课程 class MyClass public MyClass char what controlled what MyClass delete controlled operator char const return contr
  • 如何在渲染时为 React 组件设置动画?

    我正在尝试为包含从其他地方获取的数据的 React 组件设置动画 将其放置在ReactCSSTransitionGroup工作得很好 也就是说 直到我改变了组件的render 返回方法false直到数据被获取 到防止在没有数据的情况下渲染它
  • 如何从 C# 显示文件的“属性”对话框?

    如何打开文件的特性通过按钮进行对话框 private void button Click object sender EventArgs e string path C Users test Documents tes text how t
  • Java 9、10、11、12...等中的 javax.smartcardio

    从 Java 9 开始 javax smartcardio 库发生了什么 有替代方法或某种方式在 JAR 中获取它吗 在网上搜索了几个小时后 感谢上面的答案 据我了解 Java 9 及更高版本是模块化的 这是几年前计划的语言改进 此外 在新
  • 将两个导航控制器添加到一个选项卡栏项目

    我希望将 2 个导航控制器附加到一个选项卡栏项目 基本上 这个想法是在单个选项卡项上有 2 个视图 并且应该有一个导航栏来推动和弹出屏幕 与 iPad 中的设置应用程序相同 已编辑 看起来左侧有一个带有自己的导航控制器的视图 而右侧有另一个
  • 如何在 Swift 中增加 plus 设备上的字体和大小?

    我观察了一些流行的应用程序 当我们比较 iPhone Plus 设备和普通设备时 字体和图像是不同的 iPhone Plus 设备中稍大一些 我们如何在 iOS 应用程序中实现同样的目标 我已经使用过闪屏了 但字体仍然是相同的 在 plus
  • 为IE6中新打开的窗口设置OnLoad事件

    我需要为新弹出的窗口设置 onload 属性 以下代码适用于 Firefox a href www google com 但是 当我在 IE 中尝试此操作时 出现错误 printwindow document body null 或未定义
  • 从屏幕坐标查找世界坐标

    这个问题有很多答案 但我不确定它们都适用于 XTK 例如在 Three JS 中看到了多个答案 但显然 XTK 和 Three JS 没有相同的 API 使用射线和Matrix似乎与其他框架的许多其他解决方案非常相似 但我仍然没有掌握可能的