gpt4 book ai didi

javascript - Cannon.js:使用四元数查找骰子的侧面

转载 作者:行者123 更新时间:2023-11-28 15:15:41 28 4
gpt4 key购买 nike

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的球体的顶部、底部、右部、左部、前部和后部切片内。请参见图中的灰色区域下面。

The "up" regions to compare against.

关于javascript - Cannon.js:使用四元数查找骰子的侧面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34073405/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com