有一个3d对象。
我正在旋转它,如下所示:
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:self.view];
CGPoint lastLoc = [touch previousLocationInView:self.view];
CGPoint diff = CGPointMake(lastLoc.x - location.x, lastLoc.y - location.y);
float rotX = -1 * GLKMathDegreesToRadians( diff.y / 2.0 );
float rotY = GLKMathDegreesToRadians( diff.x / 3.0 );
GLKVector3 yAxis = GLKMatrix4MultiplyAndProjectVector3(GLKMatrix4Invert(_rotMatrix, &isInvertible), GLKVector3Make(0, 0, 1) );
_rotMatrix = GLKMatrix4Rotate(_rotMatrix, rotY, yAxis.x, yAxis.y, yAxis.z);
GLKVector3 xAxis = GLKVector3Make(1, 0, 0);
_rotMatrix = GLKMatrix4Rotate(_rotMatrix, rotX, xAxis.x, xAxis.y, xAxis.z);
}
并设置这样的矩阵:
_modelViewMatrix = GLKMatrix4Identity;
_modelViewMatrix = GLKMatrix4Translate(_modelViewMatrix, 0.0f, 0.0f, -60.0f);
_modelViewMatrix = GLKMatrix4Translate(_modelViewMatrix, 0.0f, 5.5f, -4.0f);
// i know i can to this by one code
//çevirme işlemleri ilki klimanın kameraya doğru bakması için
//ikincisi parmak hareketlerinden gelen transform matrisi
// 90 derece döndermeyi kapatıyorum
_modelViewMatrix = GLKMatrix4RotateX(_modelViewMatrix, GLKMathDegreesToRadians(90.0f));
_modelViewMatrix = GLKMatrix4Multiply(_modelViewMatrix, _rotMatrix);
_modelViewMatrix = GLKMatrix4Translate(_modelViewMatrix, 0.0f, -5.5f, +4.0f);
self.reflectionMapEffect.transform.modelviewMatrix = _modelViewMatrix;
我正在将modelViewMatrix转换为对象中心。旋转它。而不是翻译。比在z上翻译-65。但每次我都试着这样做。它像在同一个向量上一样旋转。我认为对象有它自己的中心。并旋转它自己的中心和场景的中心。
如何使用代码更改对象的中心或如何正确旋转此对象?
答案 0 :(得分:0)
矩阵乘法的工作方式是考虑对象基矢量。您可以将其视为第一人称视角(来自对象/模型)。如果您首先移动对象(平移)然后旋转对象仍将处于相同位置但面向不同的旋转,这意味着它将不会模拟轨道运行。如果您将操作更改为先旋转然后移动它将模拟轨道运行(但也会旋转)。例如,如果您将模型旋转到面向右侧而不是向前平移,则看起来好像已转换为您的右侧。因此,真正的轨道运行包括首先旋转一定角度,然后通过半径平移然后旋转相同的负角度。再次,尝试从模型角度看。
我希望这会有所帮助,因为你没有解释你想要/需要完成什么。