问题标签 [physijs]

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 回答
2415 浏览

javascript - PhysiJS:如何在旋转物体的给定点获得线速度

给定对象的线速度和角速度,如何在 PhysiJS 中查询对象点的线速度(相对于世界空间)?

为此,我正在考虑在对象上创建一个不可见的顶点,但我认为 API 甚至没有提供这种功能。我需要根据物体的平移和旋转速度自己计算吗?(如果是这样,THREE.js 或 PhysiJS 是否提供了一种直接的方式来做到这一点?)

从第一原则:

  • 给定object.position(1)
  • 给定点在世界空间中的位置object.localToWorld(point)(2)
  • 给定object.getLinearVelocity()(3)
  • 给定object.getAngularVelocity()(4)

所以我需要:

  • 从 (2) 中减去 (1) 以给出点在世界空间 (5) 中的偏移量
  • 使用 (4) 和 (5) 获得点相对于对象 (6) 的线速度
  • 将(6)和(3)相加得到点的总线速度

对于第一步和第三步,我可以使用 Three.js 的 Vector3.sub(Vector3).add(Vector3)方法,但是中间操作让我望而却步,尽管我猜想是一种乘法。鉴于 (4) 可以是欧拉角或四元数,我应该使用哪种操作?

我对矩阵的了解非常有限(而且生疏!)并且不存在四元数。

Three.js 的 API 文档在这里

谢谢

0 投票
0 回答
959 浏览

three.js - 在没有 FPS 下降的情况下有效地生成块/体素地形?

我在使用 Three.JS 生成/显示地形时遇到了一点问题,而没有主要的 FPS 下降。这是我为创建每个块并设置正确位置而编写的代码:

基本上,它创建每个块,设置位置并将它们合并在一起THREE.GeometryUtils.merge以构成“块”(矩形)MineCraft 样式。

我很确定构成每个块的大量单个块导致低 FPS。只有 10 个块,FPS 很好。如果我再添加,FPS 会急剧下降。

我的一个想法是使用 WebWorker 进行处理,但由于我无法添加块甚至在其中使用 Three.JS,这是不可能的。这也只会有助于加载时间,而不是我遇到的 FPS 问题。

如果有人对我将如何解决此问题有任何想法,我将不胜感激。:) 也许可以隐藏相机看不到的块?或者我可能只是完全以错误的方式做事。谢谢!

0 投票
1 回答
138 浏览

javascript - 如何使用physijs和threejs从场景模拟中获取数据

我正在做一个演示,它与此页面中的一个示例非常相似(http://chandlerprall.github.io/Physijs/examples/body.html)。只是一个盒子掉下来了。但我想计算从盒子开始下落到落地所用的时间,这样我就可以计算速度。有没有办法做到这一点??请帮忙。

0 投票
1 回答
1060 浏览

javascript - 使用 Physi.js 的玩家运动/物理

我正在使用 Three.js 作为渲染器和 Physijs 作为物理引擎创建一个简单的游戏,尽管这个问题可以很容易地推广到整个游戏。

在游戏中,玩家的物理/运动通常看起来与其所在的物理引擎是分开的。它们以瞬间加速移动并立即停止。但是,根据物理引擎的规则,玩家可以从高处坠落并与其他物体(或玩家)发生碰撞。

请注意,就我的问题而言,玩家有一个不受物理约束的相机对象,尽管它可以很容易地连接到物理对象。

达到这种效果的最佳方法是什么?我想到了一些解决方案,但似乎没有一个完全足够:

  1. 没有物理附件,翻译玩家的相机。然而,这将忽略碰撞,绕过物理引擎。

  2. 物理附着,并对物理对象施加力。然而,这涉及到摩擦力,并将玩家的运动置于物理引擎的支配之下。

想法?(有一个类似的问题“ https://stackoverflow.com/questions/15822168/how-to-make-a-walk-though-like-fps-tps-games-with-three-js-and-physics-engine ",虽然它没有收到任何答复)

0 投票
1 回答
1511 浏览

three.js - How to draw the trajectory of a mesh with threejs

I'm trying to draw the trajectory of a projectile motion with threejs. Which is the best way to do that? Here is an example of it: http://www.physgl.org/index.php/welcome/logout Try the projectile motion demo and click run.

I thought of drawing a second mesh that follows the previous movement by obtaining the position of the mesh as it's moving, but that did not work. This is what I tried (this code) to get the position of the object moving:

box.geometry.computeBoundingBox();

Please Help. Thanks.

0 投票
0 回答
526 浏览

javascript - 未定义 physijs 对象材质的three.js

在使用三个.js 创建一个小场景后,我尝试实现 Physi.js。

我被困在第一个对象上,一个立方体,我尝试更改为 Physi.js。Firefox 控制台告诉我,Physi.js 第 899 行的“object.material 未定义”。

我尝试了以下方法:

还有这个:

还有这个:

所有都会导致相同的错误,使用 chandlerprall-Physijs-1558502。

请告诉我,我在这里缺少什么。

提前致谢。

0 投票
0 回答
199 浏览

three.js - 让 Physijs 考虑顶点着色器位移

我不确定标题是否最好,但我会尝试解释我的问题是什么。我正在使用 Three.js 和 Physijs 制作一个简单的游戏,让玩家可以在场地上四处走动。我使用平面几何作为地面,并想使用置换贴图来改变它的形状。我之前直接操作顶点(仅使用一些数学公式来置换顶点)并使用 HeightfieldMap 进行碰撞检测,效果很好,但现在我通过顶点着色器实现了置换映射,Physijs 将地面视为平面对象。我猜测着色器中顶点的操作发生在 Physijs 模拟之后,但是有没有办法让 Physijs 在进行碰撞检测时考虑到着色器中的顶点位移?或者,

0 投票
1 回答
3502 浏览

three.js - Threejs/Physijs 游戏 MMO 角色控件

我正在为我正在开发的游戏开发第三人称角色控制。到目前为止,我对结果感到满意。角色控件有很多简洁的功能,例如:如果一个物体在相机前面,它会向前移动,所以你仍然可以看到角色,但是当我将它旋转到一边然后将我的玩家转开时,相机会严重卡顿从中。我在 JSFiddle 上上传了一个测试:http: //jsfiddle.net/nA8SV/我只在 chrome 中测试过这个,由于某种原因,结果部分没有得到按键,直到你点击与画布相邻的空白区域框架。

[我也开始使用“--disable-web-security”来忽略跨源]

但是,一旦您单击页面,按键就会起作用。控件是轨道控件的修改版本。因此,您可以左键单击并旋转视图。此外,您可以使用 wasd 键四处移动,当您移动/旋转时,相机视图应返回到玩家身后。

对于在 JSFiddle 上工作非常困难的问题,我深表歉意。(但旋转错误正在发生,所以它至少重现了这一点。)

基本上我试图让我的相机旋转回到我的角色后面,所以我有一些代码可以修复第 250 行的旋转,但是当角色移动时相机会卡住。

以下是我的理论,我认为相机的整体抖动与玩家轻微反弹的物理模拟有关,但我不确定如何解决这个问题,任何帮助将不胜感激。

这是完整的代码,但我会推荐 JSFiddle 链接,我更容易看到它工作。

谢谢!!!

0 投票
0 回答
1391 浏览

three.js - Physijs 加载模型three.js 碰撞不起作用

当我使用 JSONLoader 加载我的模型(地图)时,我遇到了碰撞问题。如果我使用 BoxMesh 加载它可以工作,但几何碰撞就像一个立方体,而且我的模型不是立方体,我的模型中间是空的。我将另一个对象(立方体)放在我的地图顶部,该对象停在这张地图的顶部而不是里面。

搜索后,我用凸面加载了我的模型,顶部的对象落在我的地图平面上,但我认为大小(40)加载不正确,因为如果我将对象移动得很少,他就会落在空间中.

我像这样加载我的模型:

不知道是不是很容易理解这个问题。

BoxMesh:这里的对象是停止的。 无滴度3

凸:不检测碰撞 无滴度

我上传了我的测试,我想也许更好理解: http ://www.hebergeurfichier.com/download/a97e3ae31c36dfe98525213cde90165f.html

PS:我用搅拌机创建我的模型并在三个.js 扩展中导出。

0 投票
0 回答
1153 浏览

three.js - Physijs 对象通过 concaveMesh

我有一个似乎众所周知的问题:我的“边界”对象没有与“地板”凹面网格碰撞。

我已经读到这个问题可能是由于将 concaveMesh 与模型一起缩放时出错引起的,所以我导出了我需要的按比例缩放的地板模型,并且在我应用了 concaveMesh 之后(如下所示)但它不起作用。

我把这个红了:https ://github.com/chandlerprall/Physijs/issues/102和很多关于这个主题的其他事情(Physijs Load model three.js 碰撞不起作用和类似的),我做了以下代码但无事可做:(

我真的不明白为什么“边界”会穿过地板。

这是我的代码:

我也在 render() 函数中尝试了这个:

在控制台中,我可以读取“边界”和“地板”之间的距离。这应该意味着地板作为对撞机存在,但它不会阻止边界下落。为什么?