我的项目。 如果我点击这个开放式物体,我会随意移动。 i 需要获得该物体的中心位置。 这里是我的法典。
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
if (objShowing == YES) {
NSLog(@"touch count %d",[touches count]);
UITouch *touchA,*touchB;
CGPoint pointA, pointB;
if ([touches count] == 1)
{
touchA = [[touches allObjects] objectAtIndex:0];
pointA = [touchA locationInView:self];
pointB = [touchA previousLocationInView:self];
float yDistance = pointA.y - pointB.y;
float xDistance = pointA.x - pointB.x;
GLfloat totalRotation = sqrt(xDistance*xDistance + yDistance*yDistance);
CATransform3D temporaryMatrix = CATransform3DRotate(currentCalculatedMatrix, totalRotation * M_PI / 180.0,
((xDistance/totalRotation) * currentCalculatedMatrix.m11 + (yDistance/totalRotation) * currentCalculatedMatrix.m12),
((xDistance/totalRotation) * currentCalculatedMatrix.m21 + (yDistance/totalRotation) * currentCalculatedMatrix.m22),
((xDistance/totalRotation) * currentCalculatedMatrix.m31 + (yDistance/totalRotation) * currentCalculatedMatrix.m32));
if ((temporaryMatrix.m11 >= -50.0) && (temporaryMatrix.m11 <= 50.0))
currentCalculatedMatrix = temporaryMatrix;
else
{
}
[self convert3DTransform:¤tCalculatedMatrix toMatrix:matrix];
[self adjustView];
}
}
}
-(void)adjustView{
NSLog(@"adjusting View");
[EAGLContext setCurrentContext:context];
glMatrixMode(GL_MODELVIEW);
glEnable(GL_NORMALIZE);
glLoadIdentity();
glScalef(_scale, _scale, 1.0f);
glRotatef(-90, 0.0f, 0.0f, 1.0f);
glRotatef(180, 0, 1, 0);
glClearColor(0.0f, 0.0f, 0.0f, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
//Finally load matrix
glMultMatrixf(matrix);
glRotatef(0, 0, 0, 1);
glRotatef(-90, 1, 0, 0);
drawTeapot(codesiz);
glPopMatrix();
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}