我想知道如何围绕Y轴旋转物体。
例如,我想将Google示例应用程序hello_ar_java https://github.com/google-ar/arcore-android-sdk/tree/master/samples/hello_ar_java的机器人机器人围绕其Y轴旋转角度为alpha。
答案 0 :(得分:2)
只是以一种简单的方式进行了工作,尽管它不能正确处理帧速率增量,但这可能是一个有用的启动器。在扩展AnchorNode的类中,我在该类中定义了我的新Node,因此它的可用方式如下:
private Node myNode = null;
然后按如下方式覆盖onUpdate:
@Override
public void onUpdate(FrameTime frameTime) {
super.onUpdate(frameTime);
if (myNode!=null){
Quaternion q1 = myNode.getLocalRotation();
Quaternion q2 = Quaternion.axisAngle(new Vector3(0, 1f, 0f), .2f);
myNode.setLocalRotation(Quaternion.multiply(q1, q2));
}
}
答案 1 :(得分:1)
我最近不得不做类似的事情。在对象渲染器的绘制方法中,您可以添加:
Matrix.translateM(mModelMatrix, 0, x, y, z);
Matrix.rotateM(mModelMatrix, 0, rotationAngle, 0f, 1f, 0f);
Matrix.translateM(mModelMatrix, 0, -x, -y, -z);
答案 2 :(得分:0)
这不是ARCore问题,而是OpenGL ES问题。但要实现您想要的功能,您必须将旋转添加到ObjectRenderer.updateModelMatrix(float [] modelMatrix,float scaleFactor)中的模型矩阵中。例如,解释如何进行旋转在这里:http://www.learnopengles.com/tag/rotation/
答案 3 :(得分:0)
我用Kotlin作答。
使用Quaternions
进行旋转以避免Gimbal Lock。常见的四元数规则是浮点数x
,y
,z
和w
的平方的平方根应始终等于1
。
sqrt((x * x) + (y * y) + (z * z) + (w * w)) = 1
要围绕
Y
旋转立方体,请使用以下代码:
var value: Float = 5.0
override fun onLeft(value: Float) {
cubeNode.apply {
Log.d("left", value.toString())
localRotationCCW = Quaternion.axisAngle(Vector3(0.0f, 1.0f, 0.0f), value)
}
}
要围绕
Y
旋转立方体,请使用以下代码:
var value: Float = 5.0
override fun onRight(value: Float) {
cubeNode.apply {
Log.d("right", value.toString())
localRotationCW = Quaternion.axisAngle(Vector3(0.0f, 1.0f, 0.0f), -value)
}
}
希望这会有所帮助。