适用于iOS的GluUnProject

时间:2012-02-15 04:42:05

标签: objective-c ios matrix touch opengl-es-2.0

要通过iOS的2D屏幕坐标检测3D世界坐标,除了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;
}
}

我的代码有很多。是的,我可以很容易地使用一个结构,但我当时太精神不胖了。这是我可以回去修理的东西。

Anywho,关键在于当我使用gluUnProject后使用NSLog输出到调试器时,近平面和远端平面的中继结果甚至接近准确。实际上,他们都传达了完全相同的结果,更不用说,第一次点击总是重现x,y和&amp; z全部等于“nan”。

我是否跳过了一些非常重要的东西?

1 个答案:

答案 0 :(得分:0)

ES2.0中没有gluUnProject功能,您使用的是什么端口?此外,没有GL_MODELVIEW_MATRIXGL_PROJECTION_MATRIX,这很可能是您的问题。