Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在libgdx3d中获得骰子的顶部?_Java_Math_Libgdx_Bullet - Fatal编程技术网

Java 如何在libgdx3d中获得骰子的顶部?

Java 如何在libgdx3d中获得骰子的顶部?,java,math,libgdx,bullet,Java,Math,Libgdx,Bullet,我有一些掷骰子的动画,我最初是用javascript使用THREE&CANNON完成的,我想在libgdx中重新实现它 动画部分已经完成,但我还没有弄清楚如何识别骰子的顶部 我知道至少有3种不同的方法可以做到这一点,所以我不确定哪种方法可以用libgdx/bullet实现 (我对此感到困惑,其他方法听起来更容易) 一,。 通过使用骰子的旋转,以数学的方式进行操作。 我现在通过四元数计算骰子的椭圆旋转, 我可以在掷完骰子后得到骰子的四元数 我还知道一些旋转的四元数(至少在某种程度上,因为演员阵容并

我有一些掷骰子的动画,我最初是用javascript使用THREE&CANNON完成的,我想在libgdx中重新实现它

动画部分已经完成,但我还没有弄清楚如何识别骰子的顶部

我知道至少有3种不同的方法可以做到这一点,所以我不确定哪种方法可以用libgdx/bullet实现

(我对此感到困惑,其他方法听起来更容易)

一,。 通过使用骰子的旋转,以数学的方式进行操作。

我现在通过四元数计算骰子的椭圆旋转, 我可以在掷完骰子后得到骰子的四元数

我还知道一些旋转的四元数(至少在某种程度上,因为演员阵容并不完美)


编辑3: 目前,在总共64个可能的旋转中,我计算了34个单体(1:4x,2:6x;3:5x,4:7x,5:7x,6:5x)

但似乎还有更多。。。 我使用三个轴计算64,并以90°的步长在0和270°之间旋转每个轴

例如,以下四元数的值为

( 0.5f,-0.5f, 0.5f,-0.5f)  -> which should be 4
(-0.5f,-0.5f, 0.5f,-0.5f)  -> which should be 5
这种方法不包括这些问题

现在使用每个坐标之间的最小距离似乎效果更好


数学方法(大部分)是有效的,如果其他两个选项可以在libgdx中实现,我仍然希望得到一些反馈。

其他选择:


二,。 使用光线投射获得骰子顶部

在javasript中,光线投射方法将相交的网格对象传递给我,它们具有一个属性,让我可以识别它的哪一侧。我还没有在libgdx中看到任何类似的东西

function identifyDiceTop(position) {

    var raycaster = new THREE.Raycaster();

    var vec = new THREE.Vector3(position.x, position.y, 5); 
    raycaster.set( vec, new THREE.Vector3(0, 0, -1));

    var intersects = raycaster.intersectObjects( scene.children, true );

    if (intersects.length > 0 && intersects[ 0 ].face != null) {
        switch (intersects[ 0 ].face.materialIndex) {
           // see which value is top
        }
    }

三,。 通过查找骰子对象网格的最高y坐标来获取骰子的顶面。甚至比上面更简单,但我还能以某种方式访问网格吗

我正在使用下面的代码来创建骰子。但这里我不直接使用任何网格,所以我可能需要一种不同的构造方法

MeshPartBuilder MeshPartBuilder=
modelBuilder.part(
“盒子”,
GL20.GL_三角形,
attr,
新材料(
TextureAttribute.createDiffuse(
区域
)
)
);
meshPartBuilder.setUVRange(骰子边5);
rect(-size,-size,-size,-size,size,-size,size,-size,size,size,-size,size,-size,-size,size,0,0,-1);
meshPartBuilder.setUVRange(骰子侧2);
rect(-size,size,size,-size,-size,size,size,size,-size,size,size,size,size,size,size,0,0,1);
meshPartBuilder.setUVRange(骰子边6);
rect(-size,-size,size,-size,-size,-size,-size,size,-size,-size,-size,size,-size,size,-size,size,size,0,-1,0);
meshPartBuilder.setUVRange(骰子侧1);
rect(-size,size,-size,-size,size,size,size,size,size,size,size,size,size,-size,0,1,0);
meshPartBuilder.setUVRange(骰子侧4);
rect(-size、-size、size、-size、size、size、size、-size、size、-size、-size、-size、-size、-size、-size、-size、-size、-1,0,0);
meshPartBuilder.setUVRange(骰子侧3);
rect(大小,-大小,-大小,大小,大小,-大小,大小,大小,大小,大小,大小,大小,-大小,大小,1,0,0);
我希望有人能给我指点