2014-07-14 77 views
0

©有一個3d對象。GLKit對象不能正常旋轉

我與這樣的觸摸旋轉它:

-(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

矩陣乘法的工作方式是考慮對象基向量。你可以把它想象成一個第一人稱視角(從對象/模型來看)。如果你先移動物體(平移),然後旋轉物體仍然處於相同的位置,但面對不同的旋轉,這意味着它不會模擬軌道。如果您將操作更改爲先旋轉,然後移動它將模擬繞軌道(但也旋轉)。例如,如果您將模型旋轉到正確的位置,而不是向前翻譯,則看起來好像會翻譯成正確的。所以真正的軌道運動首先由一定角度旋轉,然後由半徑平移,然後以相同的負角旋轉。再次嘗試從模型的角度來看。

我希望這可以幫助你,因爲你沒有解釋你到底需要完成什麼。