javascript - 应用透视矩阵顺序

标签 javascript css matrix 3d three.js

我实际上正在编写一个脚本domvertices,它计算任何 DOM 元素的 4 个顶点 3d 坐标:http://bl.ocks.org/abernier/97a5fb8c1bebacd1958e

var el = document.getElementById('foo');
var vertices = domvertices(el);
console.log(vertices);

输出:

{
  a: {x: , y: , z: },
  b: {x: , y: , z: },
  c: {x: , y: , z: },
  d: {x: , y: , z: }
}

为了实现这一点,我向上遍历 dom,并为每个元素存储应用于它的矩阵(参见 1)。

最后,我以相反的顺序将矩阵应用回目标元素。

--

实际上效果很好!

我唯一的问题是关于透视...目前,在计算元素的矩阵时,我不考虑perspectiveperspective-origin

因此,不考虑透视变形(作为绘制顶点时的解决方法,我将它们附加到受透视影响的元素中,以便它们正确定位)。

我想在计算元素矩阵时采用perspectiveperspective-origin

我可以轻松制作透视矩阵,我的问题是何时将 perspectiveperspectiveOrigin 矩阵应用到 1 ?

嵌套多视角怎么样?

1:元素矩阵的组成如下(从右到左阅读):

transformOrigin^-1 * transform * transformOrigin * relativePosition * Identity

感谢任何帮助。

最佳答案

您的透视矩阵需要相当于应用矩阵序列中最左边的矩阵。

例如取自几乎所有 WebGL 片段着色器

gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);

投影矩阵位于左侧。

关于javascript - 应用透视矩阵顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28518722/

相关文章:

javascript - typescript:如何扩展现有模块定义?

javascript - 检查 typescript 类是否有 setter/getter

寻找共现矩阵的算法

javascript - Google 应用程序脚本中的 __proto__?

javascript - 如何使用 javascript 以 Rails 形式获取本地时间?

html - 在单独的行上获取 div 中的链接

c# - :active pseudoclass with animations sometimes prevents postbacks in Chrome and IE

javascript - document.createElement ('div' ) 有一个类

java - 从矩阵中获得最高总和的最佳方法(使用 Java 但算法是这里的问题)

arrays - 如何合并两个元胞数组的数据?