Как я могу получить центральную позицию OpenGL объекта Iphone? - PullRequest
0 голосов
/ 24 июня 2011

В моем проекте .. Я перемещаю объект 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 Ответ

2 голосов
/ 24 июня 2011

OpenGL не имеет «постоянства». Вещи нарисованы, вещи забыты. В основном OpenGL - это просто перья, используемые для рисования на бумаге, называемой «framebuffer». Больше ничего Из-за этого то, что вы спрашиваете, невозможно с самим OpenGL.

Что вам нужно сделать, так это самостоятельно отслеживать все вещи, которые вы рисуете в отдельной структуре, и выполнять такие тесты и запросы, как тот, о котором вы спрашиваете, для этой структуры, которую вы поддерживаете.

...