问题标签 [homogenous-transformation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
609 浏览

javascript - 在两个旋转矩阵之间进行插值

目前我正在处理以下问题。我正在使用 javascript,我不能(也不想)使用任何第三方 .js 库。

我正在编写一个函数,我在输入上有两个标准转换矩阵 - A 和 B:

以及介于或等于 0 和 1 之间的 theta 值 T。数字 a、b、c、d 对应于旋转和缩放,而 e 和 f 等于 x 和 y 位置。

我需要在这两个矩阵之间进行插值,我想知道,什么是最好的方法(性能方面),因为这个函数会经常被调用。我已经使用 lerp 整理了 x 和 y 部分。现在我想知道什么是最不密集的方法来做到这一点。这些是我到目前为止找到的选项:

  • 第一个选项 - 使用四元数和 slerp - 从我在网上找到并从我的同事那里听到的信息,这个选项涉及大量计算。我对这种方法也不是很熟悉,也不知道如何实现它以适应这种情况。
  • 第二个选项 - 分解这两个矩阵,获取 A 和 B 的平移、旋转和缩放值并存储它们,然后通过 T 处理这些并计算结果矩阵。

有没有其他方法可以减少我错过的 CPU 密集度?

0 投票
2 回答
566 浏览

opencv - 已知单位的opencv翻译向量

有没有办法使用相应的特征点来计算两个平面对象之间的已知单位(如“mm”或“cm”)的平移向量。如果是,请让我知道我该怎么做。

到目前为止,我已经尝试过基本矩阵计算(对于非平面对象)并且没有将它们放在一个已知的单元中。

提前谢谢你!

0 投票
1 回答
1555 浏览

camera - 具有基本矩阵变换 (WebGL) 的类似 FPS 的相机移动

我在 WebGL 中有一个简单的场景,我将每个转换(用于相机和模型)存储在单个模型/视图矩阵中,并通过旋转和移动所述矩阵来设置它们。

我想要的是,能够旋转相机,当我“向前”移动到相机指向的地方时。

到目前为止,我已将此代码修改为:

因为它没有按原样工作并且它有点工作,直到你进行极端旋转(超过 90 度)。

这不是我正在做的事情的破坏者,但我想知道。这是我能得到的最好的,而无需像这样计算相机方向吗?

0 投票
1 回答
1035 浏览

c++ - gluPerspective()/glm::perspective() 中的近/远剪裁平面如何工作?

我有一个关于标准透视投影矩阵如何工作的问题,你从gluPerspective()或得到的那个glm::perspective()。具体来说,我想知道近/远剪裁平面。

我的印象是,在用透视矩​​阵变换一个点后,近裁剪平面上的对象映射到 -1 的 Z 值,而远裁剪平面附近的对象映射到 1 的 Z 值。

例如,假设您有一个位于原点的相机,朝 Z 轴正方向看,近剪裁平面设置为 1.0,远剪裁平面设置为 2.0。然后,我希望“世界”Z 坐标在 1.0 和 2.0 之间的事物将被转换为投影坐标在 -1.0 和 1.0 之间。

换句话说,我希望这个 C++ 代码:

打印出这个

但事实并非如此。它打印出这个:

我不明白为什么。近剪辑平面像我预期的那样投影,但是在投影时,两个平面之间的正中间点更靠近后部,而远剪辑平面上的一个点完全在 [-1,1] 范围之外。

我想我只是缺少一些基本的数学知识,所以这就是为什么我要问你们这些好人。

(顺便说一句,我正在做的事情实际上是用 Rust 编写的,而不是 C++,但我切换到 C++ 进行这个测试,只是为了确保 Rust 实现中没有错误或其他东西。)

0 投票
2 回答
325 浏览

opengl - 验证顶点着色器中变换矩阵的使用。正确性或法线变换

我需要能够根据变换矩阵相应地修改顶点坐标,但我有逐顶点光照,所以我不确定我的方法是否适用于法线:

我在第 8-9 行执行所有转换。您能否评论它是否正确?

0 投票
1 回答
408 浏览

javascript - 将变换矩阵从着色器移动到 Javascript 应用程序

我必须解决家庭作业的许多任务。我必须构建一个带有一些按钮的旋转立方体来应用更改和转换。有一项任务要求我“将转换矩阵从着色器移动到 js 应用程序”。我知道如何在着色器中构建旋转、平移和缩放矩阵,但是在 js 应用程序中移动它们意味着什么。我用来在 html 文件中指定着色器。

这是我的代码:

HTML

JS

0 投票
1 回答
1173 浏览

computer-vision - 从 Roll、Yaw、Pitch 和 GPS+Altitude 到 ECEF 转换矩阵的图像

我正在尝试使用 EXIF 元数据估计相对于 ECEF 系统的初始相机姿势。我有 DJI 无人机的云台滚动、俯仰和偏航读数以及纬度、经度和高度。假设这些值相当准确,我希望获得从 Image 到 ECEF 的转换矩阵,以找到位于特定图像中的所有对象(从已知位置和高度的对象集合中)及其像素坐标,然后在稍后阶段改进位姿估计。我尝试了 Pix4d 的方式,将滚动、偏航和俯仰转换为 omega、phi 和 kappa,然后找到从 PATB 坐标系到 ECEF 坐标的旋转矩阵。我什至不确定获得的 Omega、Phi 和 Kappa 的值是否正确,但假设它们是正确的,我从它们获得的旋转矩阵是正交的,

这是 Pix4D 文章的链接 - https://support.pix4d.com/hc/en-us/articles/205678146-How-to-convert-Yaw-Pitch-Roll-to-Omega-Phi-Kappa-

请帮助我,我已经在网站和论文中搜索了一周以找到解决方案,但无济于事。

0 投票
1 回答
199 浏览

math - DirectX 负 W

我真的试图在这个非常基本的(乍一看)问题上找到答案。

为简单起见,在进一步讨论期间禁用深度测试(没什么大不了的)。

例如,我们有带有下一个 float4 坐标的三角形(转换后)。

顶部中心点:(0.0f,+0.6f,0.6f,1f)

基本点1:(+0.4f,-0.4f,0.4f,1f),

基本点2:(-0.4f,-0.4f,0.4f,1f),

我正在发送 float4 作为输入并使用直接的 VertexShader(没有转换),所以我确定输入。我们的结果是合理的:

图像

但是,如果我们开始将 CenterPoint 移动到相机位置点,我们将会得到什么。在我们的例子中,我们没有相机,所以将这个点移动到负无穷大。只要 w (with z) 为正,我就会得到相当合理的结果。例如,(0.0f, +0.006f, 0.006f, .01f) – 看起来一样。

但是如果我使用下一个坐标(0.0f,-0.6f,-1f,-1f)呢?(注意:我们必须切换点或更改光栅化器以防止剔除)。

根据大量资源,我将进行如下测试:-w < z < w,因此 GPU 应该减少这一点。是的,原则上,我不明白这一点。但三角形仍然可见!好的,根据大量其他资源(以及我个人的理解),我们将有像(x/w, y/w, z/w)这样的除法,所以结果应该是 (0, 0.6, 1)。但我越来越

图像

即使这个结果有一定的意义(一个点在某个地方很远),在这种情况下(在无限点和负 W 的情况下)DirectX(我认为它是相当 GPU)是如何工作的?

似乎我不知道一些非常基本的东西,但似乎没有人知道。

[添加]:我想指出点 w < 0 - 不是真正的输入。在现实生活中,这些点是矩阵转换的结果,并且根据数学(在标准 Direct sdk 和其他地方使用的数学)对应于出现在相机位置后面的点。是的,那个点被剪掉了,但问题是关于包含这个点的奇怪三角形。

[简要回答]:剪辑本质上不仅仅是 z/w 检查和除法(请参阅下面的详细信息)。

0 投票
3 回答
743 浏览

swift - SceneKit – SCNMatrix4 中的最低行元素是做什么用的?

SCNMatrix4struct 中,最后一个m44元素用于齐次坐标。

我想知道SCNMatrix4中的m41,m42​​ 和元素是什么?m43我究竟可以使用这三个元素做什么?

在此处输入图像描述

0 投票
1 回答
1450 浏览

python-3.x - 如何在 python 中计算图像的 4 X 4 齐次变换矩阵

我有一个图像,我想在 python 中获得该图像的齐次变换矩阵。图像。有人可以帮帮我吗?

非常感谢。