- 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/
我刚刚向自己介绍了 WebGL 和 Threejs,作为开始,我正在尝试创建一个 3D 骰子。我已经到了创建立方体的地步,但我真的不知道如何在立方体的面上放置数字,我能找到的只是如何更改颜色。我已经查
这就是我现在得到的...... var max = 7; var min = 1; $('#dice').click(function() { random = Math.floor(Math.r
我是 Unity 的新手,一直在尝试掷骰子。我遇到了一组教程,它们允许我创建一个 3d 模具(模具使用 Rigidbody 和 Mesh Collider)并编写脚本使其在空格键上滚动,如下所示: 骰
我是 JavaScript 新手,我需要一些想法/帮助来了解如何使我的脚本正常工作。所以我们的想法是,你掷两个骰子,通过按下“掷骰子”按钮然后按下重置按钮来重置整个 HTML 中的所有内容。 所以事情
我正在尝试构建一个掷骰子游戏,如果计算机自动掷出一对骰子,并且如果 cpu 掷出 7 或 11,则用户获胜。然而,如果用户掷出 2、3 或 12,他们将自动失败。如果用户滚动任何其他数字(4、5、6、
背景 如此处所述http://www.ericharshbarger.org/dice/#gofirst_4d12 , “先走”骰子是一组四个骰子,每个都有唯一的编号,因此: 任何两个或更多骰子都不会
我是一名优秀的程序员,十分优秀!