2012-02-15 9 views
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」に等しくなります。

私はここで非常に重要な何かをスキップしていますか?

答えて

0

ES2.0にはgluUnProject機能はありません。使用しているポートは何ですか?また、GL_MODELVIEW_MATRIXまたはGL_PROJECTION_MATRIXがありません。これはおそらく問題です。

+0

私は知っている、私はオンラインで見つけたいくつかのコードです。これは私に何をすべきかをわかりません。 'GL_PROJECTION_MATRIX'と' GL_MODELVIEW_MATRIX'の代わりに何を使うべきですか? – Fiattarone

関連する問題