- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Here is a fiddle以及我正在使用的一些代码。
我正在掷骰子,还不是随机的,但稍后会添加。但现在我很难找出骰子落在哪一边。
在 JS 的第 352 行,tick 函数内部是我试图找出骰子落在哪一边的地方。我尝试了多种方法来查看四元数,但它从未给我带来预期的结果。我确信这是因为我不了解四元数。因此,任何帮助将不胜感激。
function tick() {
world.step(timeStep);
drawScene();
if(cubeBody.velocity.norm() < 0.001) {
var direction = cubeBody.quaternion.toAxisAngle()[0];
console.log(direction);
if (direction.x < 0.1 && direction.x > -0.1 &&
direction.y < 0.1 && direction.y > -0.1) {
console.log("side 1 or 6");
} else if (direction.y > 0.1 &&
direction.z < 0.1 && direction.z > -0.1) {
console.log("side 2");
} else if (direction.y < -0.1 &&
direction.z < 0.1 && direction.z > -0.1) {
console.log("side 5");
} else if (direction.x > 0.1 &&
direction.z < 0.1 && direction.z > -0.1) {
console.log("side 3");
} else if (direction.x > 0.1 &&
direction.z < 0.1 && direction.z > -0.1) {
console.log("side 4");
} else {
console.log("we got trouble");
}
} else {
requestAnimationFrame(tick);
}
}
此代码稍后可能最终会使用开关或对象键,但现在为了帮助我“可视化”它,我将其作为一个可怕的 if 语句。对此感到抱歉。
最佳答案
您可以使用立方体的六个局部轴(+x、-x、+y、-y、+z、-z)并使用 body.quaternion
将它们转换为世界空间,并检查其中哪个向量“指向最上方”。
但是,如果将世界向上向量转换为局部 body 空间,并检查该向量在局部指向哪个方向,您将获得更好的性能。
在游戏循环之前:
var localUp = new CANNON.Vec3();
var inverseBodyOrientation = new CANNON.Quaternion();
var limit = Math.sin(Math.PI/4);
在你的游戏循环中:
// Transform the world up vector to local body space
localUp.set(0,1,0);
body.quaternion.inverse(inverseBodyOrientation);
inverseBodyOrientation.vmult(localUp, localUp);
// Check which side is up
if(localUp.x > limit){
// Positive x is up
} else if(localUp.x < -limit){
// Negative x is up
} else if(localUp.y > limit){
// Positive y is up
} else if(localUp.y < -limit){
// Negative y is up
} else if(localUp.z > limit){
// Positive z is up
} else if(localUp.z < -limit){
// Negative z is up
} else {
// The box is not resting flat on the ground plane
}
选择限制
,以便局部向上向量必须位于半径为1的球体的顶部、底部、右部、左部、前部和后部切片内。请参见图中的灰色区域下面。
关于javascript - Cannon.js:使用四元数查找骰子的侧面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34073405/
我尝试实现 Cannon 的矩阵乘法算法。我阅读了关于 wikipedia 的描述提供下一个伪代码: row i of matrix a is circularly shifted by i e
我需要知道如何利用 Cannon.js 物理学生成复杂的形状以集成到我的 Three.js 场景中。 我从这个例子开始:http://schteppe.github.io/cannon.js/demo
我正在尝试使用 Three.js 和 cannon.js,但我一直坚持能够让墙壁变得坚固,或者任何不会移动并阻碍玩家前进的固体。 http://www.trepaning.com/3js/SEA3d/
我正在寻找一种适当的方法来对单个对象应用(或禁用)重力(不会丢失碰撞事件或旋转速度) 我读过这个issue但正在寻找更完整的答案。 在我的例子中,我希望玩家在奖金盒不受重力影响但仍会触发 onColl
我正在使用 cannon.js 创建简单的汽车游戏,但我正在努力解决这个问题。 我想做什么: 当我开车撞到另一个物体(例如球体)时,我想知道它。 例如增加分数或其他任何东西,但不对两个对象施加力。 我
Here is a fiddle以及我正在使用的一些代码。 我正在掷骰子,还不是随机的,但稍后会添加。但现在我很难找出骰子落在哪一边。 在 JS 的第 352 行,tick 函数内部是我试图找出骰子落
背景 我必须执行 Cannon's Algorithm这是一种并行算法,用于乘以维度为正方形的矩阵,维度可以被处理器数量的平方根整除。我写的这段代码运行得很好,但在生活中运行而不会崩溃只是故事的一半。
我有一个 THREE.js 场景,其中对象使用 CANNON.js 应用了物理学。 RigidBody 像这样初始化: let shape = new CANNON.Box(new CANNON.Ve
我正在使用一个简单的设置 Cannon.js,遵循在线示例,但是当我在构造函数中设置任何属性时,位置和 Angular 速度 x、y 和 z 都是 NaN。 这有效,但不会移动,因为 body 没有质
我正在将 Threejs 和 CannonJS 与 collada 模型一起使用 我收到此错误,但是收集每帧的物理量(即控制台计算每帧的每个物理运动)。 Uncaught TypeError: Obj
我正在尝试制作一个类似绳索的约束,其中的约束就像一个弹回的 Spring 。 我正在尝试使用约束组件: 但它似乎适用于固定距离。我怎样才能制作 Spring ? 最佳答案 大炮.js Canno
我有两个 Cannon.js 对象,并已将“碰撞”事件监听器附加到两者。 carBody.addEventListener("collide",function(e){ }); 我希望能够根据碰撞产生
以前很少有人帮助我解决这个问题,但旋转仍然很困惑我的大炮不会向玩家旋转,很好,它们都不合适我真的需要帮助解决这个问题,这是我第一次尝试让某些东西向玩家旋转 我试图让我的炮口向玩家旋转,但是 the r
我希望能够使用 cannon.js 设置铰链约束的旋转限制 我到处寻找示例,但找不到任何东西。 最佳答案 Cannon.js 中的 HingeConstraint 尚不支持旋转限制。 关于javasc
我正在通过 Deitel 进行编码:Android 如何编程示例,在其中两个示例中,我的 Android Studio 在匿名内部类上给出了警告/错误。它声明 fragment 应该是静态的。 完成此
我正在尝试使用 MPI 实现 Cannons 算法,我正在使用此示例代码: http://siber.cankaya.edu.tr/ozdogan/GraduateParallelComputing.
我有一堆飞机,它们组合在一起形成地形。每个单独的飞机都有自己的 cannon.js 主体(我使用 Three.js 来渲染视觉效果)以进行碰撞。由于内存限制,当玩家移动到远离对象时,我会取消渲染每个对
我将 Cannon.js 与 Three.js 结合使用。我设置了一个场景,其中有 5 列,每列 4 个 block 相互堆叠。 我希望它们能够与我计划添加到场景中的其他对象进行交互。然而,列中的 b
我正在使用 three.js 做一些事情,我需要一种方法来非常普遍地处理对象之间的碰撞。我正在考虑使用 cannon.js,因为它支持我需要的原语,但我并不总是特别需要/想要任何物理开销(比如检测子弹
我刚刚开始使用 Three.js 和 cannon.js,一段时间以来我一直在尝试创建一个简单的房间,但没有成功。我正在处理 this example我一直在尝试添加墙壁和天花板。最简单的方法是什么?
我是一名优秀的程序员,十分优秀!