1
iOSの2D画面座標を使用して3D世界座標を検出するには、gluUnProjectポート以外に他の方法がありますか?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;
}
}
私のコードの良い塊があります。ええ、私は簡単に構造体を使用することができましたが、私はあまりにも精神的に太っていました。それは私が後で戻って修正できるものです。
私がgluUnProjectを使用した後にNSLogを使用してデバッガに出力すると、nearplaneとfarplaneの結果は正確に近いものになります。実際には、彼らは両方とも正確に同じ結果を中継します。言い換えれば、最初のクリックは常にx、yを再現します。&はすべて「nan」に等しくなります。
私はここで非常に重要な何かをスキップしていますか?
私は知っている、私はオンラインで見つけたいくつかのコードです。これは私に何をすべきかをわかりません。 'GL_PROJECTION_MATRIX'と' GL_MODELVIEW_MATRIX'の代わりに何を使うべきですか? – Fiattarone