我如何获得opengl对象iphone的中心位置?

时间:2011-06-24 12:17:33

标签: iphone opengl-es touch center point

在我的项目中..我随机移动opengl对象..如果我点击那个opengl对象..我需要获得该对象的中心位置..这是我的代码..

- (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:&currentCalculatedMatrix 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];


}

1 个答案:

答案 0 :(得分:2)

OpenGL没有“持久性”。事情被吸引,事情被遗忘。基本上,OpenGL只是用于在一些名为“framebuffer”的纸上绘制的笔。仅此而已。因此,OpenGL本身无法满足您的要求。

您需要做的是自己跟踪您在单独结构中绘制的所有内容,并在您维护的此结构上进行此类测试和查询,例如您所询问的那些。