Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.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 如何使用四元数控制摄影机_Java_Android_Opengl Es_Libgdx - Fatal编程技术网

Java 如何使用四元数控制摄影机

Java 如何使用四元数控制摄影机,java,android,opengl-es,libgdx,Java,Android,Opengl Es,Libgdx,我试图允许相机在3D场景中围绕球体旋转。我决定走四元数的路线。但是我在理解从哪里开始有点困难。我不知道如何正确设置它们,以及如何将其应用于我的相机。在那之后,我不知道如何用屏幕上的虚拟操纵杆来控制摄像机。我读过很多关于四元数的书,但大多数例子都没有给出如何在3D编程中使用四元数的例子。有什么想法吗?为了给你一个快速的答案,你最终需要将四元数转换成一个矩阵,这样你就可以在OpenGL ES中使用它了。使用四元数存储旋转,链接它们,当准备渲染场景时,从四元数中获取“编码”旋转(作为矩阵),并将其作为

我试图允许相机在3D场景中围绕球体旋转。我决定走四元数的路线。但是我在理解从哪里开始有点困难。我不知道如何正确设置它们,以及如何将其应用于我的相机。在那之后,我不知道如何用屏幕上的虚拟操纵杆来控制摄像机。我读过很多关于四元数的书,但大多数例子都没有给出如何在3D编程中使用四元数的例子。有什么想法吗?

为了给你一个快速的答案,你最终需要将四元数转换成一个矩阵,这样你就可以在OpenGL ES中使用它了。使用四元数存储旋转,链接它们,当准备渲染场景时,从四元数中获取“编码”旋转(作为矩阵),并将其作为视图矩阵传递给管道

检查此源代码,以获得android ready的快速四元数类(为了方便起见,它有一个toMatrix方法):

例如:

Quaternion camera_quat = new Quanternion(); // This creates an identity quaternion
camera_quat.setRotation(new Vector3(0.f, 1.f, 0.f), PI/2); // generate a 90 degrees    rotation around the given vector

float [] matrix = camera_quat.toMatrix().getAsArray();
此时,可以使用旋转矩阵作为视图矩阵

编辑:您的目标是OpengGL ES 1.x还是2.0?我可以根据您的目标版本为您提供如何处理该矩阵的指导。您还可以查看ShadingZen repo以了解有关OpenGL 2.0(org.traxnet.ShadingZen.core.Camera类)的更多信息


EDIT2:四元数的一大优点是,您可以轻松地绕任意轴旋转。我上面的代码围绕(0,1,0)旋转。您可以利用这个想法:定义两个四元数,一个用于一个操纵杆轴,另一个用于另一个轴。将两个四元数相乘,就有了两个旋转。转换为矩阵和中提琴!希望有帮助

谢谢你的帮助!我目前的目标是OpenGL ES 1.0。然后是使用类似于glMatrixMode(GL_MODELVIEW)->glLoadMatrixf(您的四元数矩阵)->glTranslatef()的东西将矩阵加载到固定管道中。好的,我明白您的意思。我正在使用位于。。。我会更新视图矩阵,然后更新相机吗?我想这和你提到的一样,只是封装了opengl调用?还有一件事。我用一个2D虚拟操纵杆来控制摄像机。如何使用操纵杆更新四元数?很难理解如何将两者联系起来。再次感谢你的帮助!查看libgdx相机的apply方法中的代码,加载矩阵。你应该做一些类似的事情,但你的矩阵。