Я пытаюсь повернуть объект OpenGL в iOS с помощью touch, но у меня проблемы. Я захватывая прикосновения пользователя здесь:Вращение объекта OpenGL ES с GLKit
- (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 всегда вращается вокруг источника, если вы не сдвигаете его туда, ваш объект «вращает» начало координат, но не вращается, как ожидалось, сам по себе. – dan