OpenGL 모델의 3D 좌표를 얻으려고합니다. 이 코드는 포럼에서 발견되었지만 충돌이 어떻게 감지되는지 이해할 수 없습니다.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;
}
}
내 의견으로는 중단 조건이 없습니다. 언제 collisionPoint를 찾을 수 있습니까? 또 다른 질문은 다음과 같습니다. 이 충돌 지점에서 텍스처를 어떻게 조작합니까? 나는 해당 버텍스가 필요하다고 생각한다!?
안부
GluUnproject는 화면 좌표를 가져 와서 현재 ModelView 행렬을 사용하여 화면에 비확산하는 데 사용됩니다. 그래서 그것은 현재의 변환 행렬이 주어진다면, 화면상의 특정 x와 y 위치에 대한 좌표를 세계에 제공합니다. 물리 계산을 수행하기 위해 어떻게 사용하려고하는지 잘 모르겠습니다. – Bartvbl
충돌 알고리즘을 광선 추적이라고합니다. 객체의 해당 3D 픽셀을 2D 터치 위치로 가져 오려고합니다. – Philsen