OpenGL旋转问题,控制模型根据手势移动
我在渲染的模型的时候定义了三个6个变量
float _rotationX;//旋转变量x
float _rotationZ;//旋转变量z
float _rotationY;//旋转变量y
float _lastRotationX;//最后一个旋转落点得x
float _lastRotationZ;//最后一个旋转落点得z
float _lastRotationY;//最后一个旋转落点的y
在update方法内有如下方法
GLKMatrix4 modelViewMatrix = GLKMatrix4Translate(GLKMatrix4Identity, 0.0f, 0.0f, 0.0f);
modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, _rotation, 0.0f, 0.0f, 1.0f); //旋转
modelViewMatrix = GLKMatrix4RotateX(modelViewMatrix, GLKMathDegreesToRadians(_rotationX));
modelViewMatrix = GLKMatrix4RotateZ(modelViewMatrix, GLKMathDegreesToRadians(_rotationZ));
modelViewMatrix = GLKMatrix4RotateY(modelViewMatrix, GLKMathDegreesToRadians(_rotationY));
然后我在手势的移动方法内事这样写的
#pragma mark 实现单指头拖拽旋转
UIGestureRecognizerState state = [sender state];
//判断当手指开始移动或者改变的时候
if (state == UIGestureRecognizerStateBegan || state == UIGestureRecognizerStateChanged)
{
//声明一个点为当前手指落在屏幕上的点
CGPoint translation = [sender translationInView:sender.view];
_rotationY = translation.x - _lastRotationX;
_rotationX = translation.y - _lastRotationY ;
}
if (state == UIGestureRecognizerStateEnded) {
//_lastRotationX,Y,Z为用户手指离开屏幕所记录的点
_lastRotationX = -_rotationY;
_lastRotationZ = _rotationZ;
_lastRotationY = -_rotationX;
NSLog(@"_rotationY = %f",_rotationY);
}
我现在的出现的问题是
第一:当模型被旋转颠倒后,在去旋转X轴方向就倒过来了(就是说一个小猫刚开始旋转左右旋转是正常的左右方向,如果你把她上下颠倒后,在旋转就是右左方向,反方向旋转了)
第二:我没有添加Z的旋转体系,所以模型的侧面怎么都旋转不到(我是不知道怎么添加。。。。)
求解惑
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我也不是很懂,提供一点想法:
1.第一个问题看起来像是以物体自身坐标来旋转了,所以会受自身方向干扰。应该是传入视角变换前的矩阵,也就是世界坐标系为标准的。
2.Z轴是面对屏幕的方向吧,按Z轴旋转应该是两个手指在屏幕上旋转的手势,用UIRotationGestureRecognizer这个手势吧