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

我一直在尝试为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-es,rubiks-cube

来源: https://codeday.me/bug/20191013/1904622.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值