터치를 사용하여 iOS에서 OpenGL 개체를 회전하려고하는데 문제가 있습니다. 여기에 사용자를 붙잡고 있습니다 :GLKit을 사용하여 OpenGL ES 개체 회전
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
startPoint = [touch locationInView:self.view];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
{
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self.view];
dx = point.y - startPoint.y;
dy = point.x - startPoint.x;
startPoint = point;
}
로테이션을 수행하기 위해 내 업데이트 기능에 사용하고 있습니다. 지금은 왼쪽에서 오른쪽으로 회전하려고 할 때 왼쪽에서 오른쪽으로 회전하려고합니다. 나는 이상한 조합 회전을 얻는다.
- (void)update
{
float aspect = fabsf(self.view.bounds.size.width/self.view.bounds.size.height);
GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(65.0f), aspect, 0.1f, 100.0f);
self.effect.transform.projectionMatrix = projectionMatrix;
GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, -3.5f);
modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, -1, startPoint.x, startPoint.y, 0.0f);
dx = dy =0;
self.effect.transform.modelviewMatrix = modelViewMatrix;
}
GLK로하는 방법을 모르지만 회전하기 전에 원점으로 변환 하시겠습니까? – dan
아니, 나는 그렇게 생각하지 않는다. 객체가 화면 밖으로 벗어나지 않고, 회전하고 있습니다. 원하는 방식이 아닙니다. 내가 그 일을해야합니까? – Adam
OpenGL에서 객체를 원점 (0,0,0)으로 먼저 변환 (= 슬라이드) 한 다음 회전시킨 다음 다시 원래 위치로 변환합니다. OpenGL은 항상 원점을 회전시킵니다. 슬라이드를 그곳으로 미끄러 뜨리면 객체가 원점을 "궤도에 띄우지 만"예상 된 arround만큼 회전하지 않습니다. – dan