android-使用OpenGl和触摸屏功能在视觉上纠正旋转

android-使用OpenGl和触摸屏功能在视觉上纠正旋转,第1张

概述我一直在尝试为Android做魔方.我有一个关于轮换的问题.我想旋转一个外观正确的图形.这意味着如果用户触摸屏,并且在将手指向右移动之后,图形将从观察点的一侧向右旋转.但是当我旋转一些时,图形开始朝不正确的方向移动.我了解,这取决于轴是否改变了他们的状况.但是我尝试使用逆模型

我一直在尝试为Android做魔方.我有一个关于轮换的问题.我想旋转一个外观正确的图形.这意味着如果用户触摸屏,并且在将手指向右移动之后,图形将从观察点的一侧向右旋转.但是当我旋转一些时,图形开始朝不正确的方向移动.我了解,这取决于轴是否改变了他们的状况.但是我尝试使用逆模型矩阵来获取必要的坐标,但尚未得到结果.有人可以在鼠标或触摸屏的帮助下给我示例或视觉上正确旋转3D图形的链接吗?

   //get vector 3D of touch   Vector3f touchVector = getRubiksystemCoordinates(mtouchX,mtouchY,square.rubikRotationMatrix);   //Get vector 3D of move        Vector3f moveVector = getRubiksystemCoordinates(mMoveX,mMoveY,square.rubikRotationMatrix);        //get direction of motion        float direction = touchVector.substractFrom(moveVector);         //get axis for rotation        Vector3f axis = touchVector.vectorProductTo(moveVector);        //normalize axis        axis.normalize();        //get angle of rotation        float angle = direction.length;        //make IDentity Quad        Quaternion quad = new Quaternion();        //make rotation quad        quad.makeRotationKvaternion(angle,axis);        //from quad recIEve matrix        Matrix4f matrix = quad.toMatrix();        //multiply to current modelvIEw matrix        gl.glMultMatrixf(matrix.returnArray(),0);        //save rotation matrix        square.rotationMatrix = square.rotationMatrix.multiply(matrix);        //save modelVIEw matrix        square.saveModelVIEw(square.initMatrix.returnArray());       // touch coords to current modelVIEw coords      private Vector3f getRubiksystemCoordinates(float x, float y, Matrix4f matrix){       // touch coords to normal coords of screen        Vector2f normalCoords = (new Vector2f(x,y)).tonormalScreenCoordinates(Settings.vIEwPort[2],Settings.vIEwPort[3]);        // to sphere coords in 3D        Vector3f sphereVector = new Vector3f(normalCoords.x,normalCoords.y, floatMath.sqrt(2-normalCoords.x*normalCoords.x-normalCoords.y*normalCoords.y));        //Get inverse matrix from ModelVIEw Matrix        Matrix4f m = matrix.inverseMatrix();        //Get vector for current modelVIEw 3D coords        Vector3f vector = m.multiplyToVector(vector);        // make normalize vector        vector.normalize();        return vector;        }

解决方法:

您要寻找的是名为arcball rotation.您将在互联网上的Java周围找到大量资源.

总结

以上是内存溢出为你收集整理的android-使用OpenGl和触摸屏功能在视觉上纠正旋转全部内容,希望文章能够帮你解决android-使用OpenGl和触摸屏功能在视觉上纠正旋转所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1093575.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存