将屏幕坐标转换为模型坐标

2023-12-01

我有一些新手问题。

在我的应用程序(processingjs)中,我使用scale()和translate()来允许用户缩放和滚动场景。只要我将比例设置为 1.0,就没有问题。但每当我使用比例(即比例(0.5))时,我都会迷失......

我需要将 mouseX 和 mouseY 转换为场景坐标,用它来确定在场景上绘制的对象的 mouseOver 状态。

有人能帮我翻译这些坐标吗? 提前致谢! /理查德


不幸的是,对我来说这需要修改代码。我会考虑在某个时候将其提交到Processing.JS 代码存储库,但这就是我所做的。

首先,您需要使用模型 X() 和模型 Y() 来获取鼠标在世界视图中的坐标。看起来像这样:

float model_x = modelX(mouseX, mouseY);
float model_y = modelY(mouseX, mouseY);

不幸的是,Processing.JS 似乎无法在 2D 环境中正确计算 modelX() 和 modelY() 值。为了纠正这个问题,我将函数更改如下。请注意 mv.length == 16 的测试以及 2D 末尾的部分:

p.modelX = function(x, y, z) {
  var mv = modelView.array();
  if (mv.length == 16) {
    var ci = cameraInv.array();
    var ax = mv[0] * x + mv[1] * y + mv[2] * z + mv[3];
    var ay = mv[4] * x + mv[5] * y + mv[6] * z + mv[7];
    var az = mv[8] * x + mv[9] * y + mv[10] * z + mv[11];
    var aw = mv[12] * x + mv[13] * y + mv[14] * z + mv[15];
    var ox = 0, ow = 0;
    var ox = ci[0] * ax + ci[1] * ay + ci[2] * az + ci[3] * aw;
    var ow = ci[12] * ax + ci[13] * ay + ci[14] * az + ci[15] * aw;
    return ow !== 0 ? ox / ow : ox
  }
  // We assume that we're in 2D
  var mvi = modelView.get();
  // NOTE that the modelViewInv doesn't seem to be correct in this case, so
  // having to re-derive the inverse
  mvi.invert();
  return mvi.multX(x, y);
};
p.modelY = function(x, y, z) {
  var mv = modelView.array();
  if (mv.length == 16) {
    var ci = cameraInv.array();
    var ax = mv[0] * x + mv[1] * y + mv[2] * z + mv[3];
    var ay = mv[4] * x + mv[5] * y + mv[6] * z + mv[7];
    var az = mv[8] * x + mv[9] * y + mv[10] * z + mv[11];
    var aw = mv[12] * x + mv[13] * y + mv[14] * z + mv[15];
    var oy = ci[4] * ax + ci[5] * ay + ci[6] * az + ci[7] * aw;
    var ow = ci[12] * ax + ci[13] * ay + ci[14] * az + ci[15] * aw;
    return ow !== 0 ? oy / ow : oy
  }
  // We assume that we're in 2D
  var mvi = modelView.get();
  // NOTE that the modelViewInv doesn't seem to be correct in this case, so
  // having to re-derive the inverse
  mvi.invert();
  return mvi.multY(x, y);
};

我希望这可以帮助其他遇到此问题的人。

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

将屏幕坐标转换为模型坐标 的相关文章

  • 将数据从 C# 传递到 jQuery

    我是一名独立程序员 正在寻求如何最好地处理以下情况的建议 我目前正在开发一个 C Winforms 应用程序 我正在编写的新功能允许用户创建Processing js 草图以进行数据分析 我构建了一个Processing js IDE 正在
  • 变换:缩放 - 处理初始大小的剩余“边距”

    我使用 iframe 元素作为混合视频和图像内容的预览窗口 缩小的 iframe 效果很好 因为它允许我们的客户查看与电视屏幕上显示的图像接近的图像 我想在 iframe 下方添加一些按钮 但是该按钮显示在 iframe 下方 符合 ifr
  • 处理中点/笔划的景深着色器

    最近我一直在使用下面的景深着色器 最初来自ofx后处理 https github com neilmendoza ofxPostProcessing blob master src DofPass cppOpenFrameworks 库 用
  • 使用负数缩放值范围

    如果一组值包含负数 如何缩放它们以适应新的范围 例如 我有一组数字 10 9 1 4 10 它们必须缩放到范围 0 1 这样 10 映射到 0 10 映射到 1 任意数字 x 的常规方法是 x from min to max to min
  • 旋转、缩放和平移 2D 坐标?

    我目前正在开发一个项目 尝试使用 Python 成像库创建希尔伯特曲线 我创建了一个函数 它将通过每次迭代生成曲线的新坐标 并将它们放入各种列表中 然后我希望能够移动 旋转和缩放 我想知道是否有人可以给我一些提示或方法来做到这一点 因为我完
  • 处理 float() 函数

    首先 是这个功能 https processing org reference floatconvert html特殊处理还是默认存在于java中 当我在处理下面的行时编码时 println float 88 t float 88 n t
  • 放大后删除绘制的矩形缩放框

    我正在尝试编写一个透明的可拖动矩形缩放框 一旦鼠标再次抬起 它就会放大该区域并删除绘制的矩形 我已经可以进行缩放并绘制矩形 但是我不能 1 弄清楚如何使其透明 和 2 弄清楚如何在放大后删除矩形 一旦单击鼠标在放大的图像上绘制另一个缩放框
  • Java中如何设置鼠标的位置?

    我正在使用 Java 进行一些 Swing GUI 工作 我认为我的问题相当简单 如何设置鼠标的位置 正如其他人所说 这可以通过使用来实现Robot mouseMove x y http java sun com javase 6 docs
  • 如何使用 Twitter4j 检索超过 100 个结果

    我正在使用 Twitter4j 库来检索推文 但我得到的信息还不足以满足我的目的 目前 我从一页最多获取 100 个 如何在处理中的以下代码中实现 maxId 和sinceId 以便从 Twitter 搜索 API 检索超过 100 个结果
  • 量角器 - 有人知道如何用鼠标右键单击元素吗?

    我知道量角器默认用鼠标左键单击元素 如何用鼠标右键单击 el click RIGHT 我会这样做 browser actions mouseMove el find perform browser actions click protrac
  • 鼠标左键弹起事件和openfiledialog

    我的网格中只有很少的图像 然后当我单击按钮时 会出现 打开文件对话框 当然 在图像上方 Microsoft Win32 OpenFileDialog dlgOpenFiles new Microsoft Win32 OpenFileDial
  • Unity3D本地尺度问题

    下面的代码 Debug LogWarning updating scale fix scalefactor scaleFactor Current scale is cell transform localScale x cell tran
  • 检测画布内的鼠标单击位置

    我在尝试定义一个单击空白区域的函数时遇到了一个真正的问题 到目前为止 我已经成功地定义了单击一个对象的位置 其中有 10 个 但现在我需要一个单独的函数 以便在不单击任何对象时使用 总体思路可以在以下位置找到 http deciballs
  • 从 X 和 Y 坐标获取纬度和经度

    看起来从经度和纬度到X和Y坐标的转换有丰富的知识 但反过来却没有 这是我根据 Kavrayskiy 的数学计算得出的函数 float xp kavraX radians pv x radians pv y FACTOR float yp k
  • 如何存储(和使用)当前鼠标位置?

    存储当前鼠标位置 系统范围 然后 稍后 将鼠标放在该存储点的最佳方法是什么 NSEvent mouseLocation http developer apple com mac library documentation Cocoa Ref
  • R 使用值列表作为色标

    我想将变量的值表示为 R 中散点中的点的颜色 x lt rnorm 100 5 y lt rnorm 100 5 plot x y 在这里 我想使用一个变量作为着色的输入 但如果我尝试 plot x y col x 我得到了一些奇怪的东西
  • 使用圆点填充圆,使用圆边缘的偏置

    这就是我想要实现的目标 到目前为止 我对我拥有的代码感到满意 这是从 Wolfram 和另一个数学来源借来的 但我不知道如何整合一些偏差计算 或者只是一种分配随机但有组织的内容的方法 有人能指出我正确的方向吗 这是我的代码 它将使用 P5
  • 如何在 CSS 中正确定位和缩放这些元素?

    我已经能够使用 html 和 css 正确定位和缩放网页中的一些元素 但是由于定位规则 我陷入了如何使用另外两个元素继续此操作的困境 图片中的 V 形图标必须位于标题为 向下滚动 的最后一段下方 我也希望它能够随屏幕尺寸缩放 正如我已经成功
  • WPF 应用程序在每个系统规模上具有相同的大小(与规模无关)

    有没有办法让 WPF 应用程序在每个系统规模上获得相同的大小 当我改变时更改文本 应用程序和其他项目的大小在windows系统设置中125 推荐 to 100 在全高清屏幕中 我的 WPF 应用程序变得太小 为了实现独立的系统缩放应用程序
  • 如何在控制台程序中获取鼠标位置?

    如何在 Windows 控制台程序中用 C 获取鼠标单击位置 点击时返回鼠标位置的变量 我想用简单的文本命令绘制一个菜单 这样当有人点击时 游戏就会注册它并知道位置 我知道如何做我需要做的一切 除了单击时获取鼠标位置 您需要使用 Conso

随机推荐

  • 如何在 $.ajax 请求上设置超时并在花费太长时间时重做?

    有人可以向我展示一个为 ajax 请求设置超时的实际示例 并在第一个请求超时时重做整个请求 我已阅读文档但没有得到它 我将不胜感激任何帮助 这是我的 ajax 请求 ajax url ajax product php type get da
  • 计算 Perl 或 Ruby 中重叠的正则表达式匹配数

    这是后续那个问题 我了解到 在 Python 中查找重叠的正则表达式匹配并不简单 因此决定进行额外的查询 看看 Perl 和 Ruby 如何完成这项任务 我想count正则表达式与某个字符串的所有可能匹配的数量 我所说的 全部 是指结果应该
  • 在文本组件上绘制轮廓边框

    我正在尝试画一个边界Text在SWT 这就是我现在得到的 公共类 BorderedText 扩展 Text public BorderedText Composite parent int style super parent style
  • 如何反转 css 过渡属性宽度?

    所以我想制作一个CSS动画属性 其中宽度向左延伸但总是向右延伸 我试图弄清楚如何使宽度向左延伸而不是默认的向右延伸 我应该如何解决这个问题 下面是 JsFiddle Jsfiddle Html div div Css div positio
  • Angular Material 找不到 Angular Material 核心主题

    在我的 Angular2 项目中 我安装了最新的材质插件https material angular io guide getting started 接下来我添加 import angular material prebuilt them
  • 文件上传的严格标准错误

    我写了一个PHP脚本来上传文件 但是当我按下提交按钮时 它给出了一条错误消息 Strict Standards Only variables should be passed by reference in H xampp htdocs p
  • 动态创建变量(对于列表)

    我知道这可能是一个坏主意 但似乎是在创建所有可能的选项并忽略未使用的结果之外执行此操作的 最佳 方法 我有一个源文件 其中包含 12 个潜在值 我已经在列表中拥有所有必需的字符串 但是我的目标是使每个字符串成为列表本身的开头 如果这有意义的
  • 用 PHP 制作可分发的独立程序

    我决定用 PHP 编写一些应用程序 这些应用程序应该在用户的计算机上离线运行 但是 我似乎找不到用户友好的安装向导来创建运行脚本的本地服务器 有任何想法吗 PS 这是我想要的一个例子 http www nolapro com 您可以走老路并
  • 我如何阅读这个 Swift 语法? [复制]

    这个问题在这里已经有答案了 我在用Vapor第一件事是使用 get 方法 如下所示 drop get hello request in return Hello world 现在我的理解是闭包就像类型函数的变量 正确的 在这里我看到我们调用
  • Bookdown PDF 输出中目录之前的章节

    我希望一章出现在目录之前 但在标题页之后 pdf book的输出Bookdown 一种方法是将章节添加到 tex文件并使用链接它before body 然而 这意味着该章节不会出现在gitbook 我也需要 我不想同时保留 tex and
  • GAE:最终一致性需要等待多长时间?

    我有一个应用程序 我正在其中创建大量实体 我不想将它们放在同一个实体组中 因为我可能会在短时间内创建很多它们 比如说 24 小时内创建 100 万个 在某些时候 我想通过如下查询获取所有这些实体 Foo all 创建最后一个 Foo 实体后
  • valueChangeListener 没有从位于 一侧的 调用

    我遇到 h selectOneRadio 的 valueChangeListener user loadYesNo 问题 我在 Tomcat 7 上使用 Mojarra 2 0 8 如果我删除包含 h selectOneRadio 的 pa
  • 我应该在哪里存储 java 应用程序访问第三方服务的凭据?

    我应该在哪里存储 java 应用程序访问第三方服务的凭据 我的应用程序中的凭据不是特定于每个用户的 它们用于访问我的应用程序正在使用的 Web 服务 我知道不要将它们硬编码到我的应用程序中 但是在哪里以及如何存储它们 我还假设它们需要加密
  • 如何使 JWT 令牌无效 PHP

    我正在尝试使令牌无效 或删除 JWT但我无法做到这一点 首先我做了类似这个答案所说的事情Laravel JWT auth 身份验证的注销问题 JWTAuth invalidate JWTAuth getToken 但我收到这个错误 非静态方
  • 具有自定义日期时间/时间戳值的 Bokeh FixTicker

    目标 我只想在 2017 10 2 和 2017 10 5 的 x 轴上有刻度线 一个限制是我的时间不能保证均匀分开 因此转换为字符串并执行分类轴是不可能的 它们需要是数字 日期时间 问题 我不确定如何正确设置所需日期的格式 以便 Boke
  • AsyncTask get() 方法无法正常工作

    我正在使用以下代码 translationTextView setText Searching for translation translationTextView setVisibility View VISIBLE myAsyncTa
  • && 和 || 如何在 NEST 中构建查询?

    根据http nest azurewebsites net concepts writing queries html 和 运算符可用于使用 NEST 库组合两个查询 以与 Elastic Search 进行通信 我设置了以下查询 var
  • Linux x86-64 Hello World 和寄存器参数用法

    我发现这个页面有一个 Linux 上 x86 64 的 Hello World 示例 http blog markloiseau com 2012 05 64 bit hello world in linux assembly nasm 6
  • python AES加密 java 解密

    我有超过 1000 个图像和视频需要加密 没有什么比这更简单的了 我正在考虑使用 AES 但我不知道如何在我的计算机上加密 然后解密设备上的项目 我将使用 python 来加密我计算机上的所有项目 然后以按需方式使用 java Androi
  • 将屏幕坐标转换为模型坐标

    我有一些新手问题 在我的应用程序 processingjs 中 我使用scale 和translate 来允许用户缩放和滚动场景 只要我将比例设置为 1 0 就没有问题 但每当我使用比例 即比例 0 5 时 我都会迷失 我需要将 mouse