GluUnProject для iOS - PullRequest
       26

GluUnProject для iOS

1 голос
/ 15 февраля 2012

Для определения координат трехмерного мира через 2D-координаты экрана iOS, есть ли другой возможный способ, кроме порта gluUnProject?

Я возился с этими днями подряд, и, похоже, я не могу понять суть этого.

-(void)receivePoint:(CGPoint)loke
{

GLfloat projectionF[16];
GLfloat modelViewF[16];
GLint viewportI[4];

glGetFloatv(GL_MODELVIEW_MATRIX, modelViewF);
glGetFloatv(GL_PROJECTION_MATRIX, projectionF);
glGetIntegerv(GL_VIEWPORT, viewportI);

loke.y = (float) viewportI[3] - loke.y;

float nearPlanex, nearPlaney, nearPlanez, farPlanex, farPlaney, farPlanez;

gluUnProject(loke.x, loke.y, 0, modelViewF, projectionF, viewportI, &nearPlanex, &nearPlaney, &nearPlanez);
gluUnProject(loke.x, loke.y, 1, modelViewF, projectionF, viewportI, &farPlanex, &farPlaney, &farPlanez);

float rayx = farPlanex - nearPlanex;
float rayy = farPlaney - nearPlaney;
float rayz = farPlanez - nearPlanez;

float rayLength = sqrtf((rayx*rayx)+(rayy*rayy)+(rayz*rayz));

//normalizing rayVector

rayx /= rayLength;
rayy /= rayLength;
rayz /= rayLength;

float collisionPointx, collisionPointy, collisionPointz;

for (int i = 0; i < 50; i++) 
{
    collisionPointx = rayx * rayLength/i*50;
    collisionPointy = rayy * rayLength/i*50;
    collisionPointz = rayz * rayLength/i*50;
}
}

Есть хороший кусок моего кода. Да, я мог бы легко использовать структуру, но я был слишком жирным, чтобы делать это в то время. Это то, что я мог бы вернуться и исправить позже.

В любом случае, дело в том, что когда я вывожу в отладчик с помощью NSLog после того, как использую gluUnProject, результаты ближней и дальней плоскости не передают результаты, даже близкие к точным. На самом деле, они оба передают одинаковые результаты, не говоря уже о том, что первый щелчок всегда воспроизводит x, y, & z, все равные «nan».

Я пропускаю что-то необычайно важное здесь?

1 Ответ

0 голосов
/ 22 марта 2012

В ES2.0 нет функции gluUnProject, какой порт вы используете? Также нет GL_MODELVIEW_MATRIX или GL_PROJECTION_MATRIX, что, скорее всего, ваша проблема.

...