Java 如何在libgdx3d中获得骰子的顶部?
我有一些掷骰子的动画,我最初是用javascript使用THREE&CANNON完成的,我想在libgdx中重新实现它 动画部分已经完成,但我还没有弄清楚如何识别骰子的顶部 我知道至少有3种不同的方法可以做到这一点,所以我不确定哪种方法可以用libgdx/bullet实现 (我对此感到困惑,其他方法听起来更容易) 一,。 通过使用骰子的旋转,以数学的方式进行操作。Java 如何在libgdx3d中获得骰子的顶部?,java,math,libgdx,bullet,Java,Math,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);
我希望有人能给我指点