2011-03-30 5 views
4

저는 2 주 동안 Android 용 OpenGl es에서 시작했고 3D 예제를 시도한 후에는 감지 탐지에 갇혀 있습니다. 기본적으로 화면의 x, y 좌표를 3D 공간의 x, y, z로 매핑하고 그 반대로 매핑합니다. 어떻게 OpenGL 안드로이드에서 객체 감지합니까?

내가 건너 온 :

GLU.gluProject (objX, objY, objZ, 모델, modelOffset는, 프로젝트, projectOffset는,보기, viewOffset는, 승리 winOffset);

GLU.gluUnProject (winX, winY, winZ, model, modelOffset, project, projectOffset, view, viewOffset, obj, objOffset);

그러나 나는 그 것을 이해하지 못했습니다. 어떻게 정확히을 사용합니까?

적절한 예를 들어 설명해 주시면 미리 감사드립니다. :) 준비가 당신의 행렬이있는 경우

답변

2

글쎄, 당신은이 작업을 수행 할 수 있습니다

float[] modelView = float[16]; 
float[] projection = float[16]; 
float[] view = {0, 0, 640, 480}; // viewport 
float x = mouseX, y = mouseY, z = -1; 
// those are the inputs 

float[] pos = new float[4]; 

GLU.gluUnProject(x, y, z, 
       modelView, 0, 
       projection, 0, 
       world.view().get_size(), 0, 
       pos, 0); 

System.out.println("position of mouse in 3D is (" + pos[0] + ", " + pos[1] + ", " + pos[2] + ")"); 

당신이, 당신은 = 한 번에 z, 두 번) gluUnProject을 (전화 -1 번과 개체를 선택하려면 z = 1로 설정하면 가까운면과 먼면에서 마우스 위치를 지정할 수 있습니다. 그것들을 빼서 뷰 방향을 얻고 첫 번째를 원점으로 사용하면 멋진 광선 추적 작업 (객체 선택)을 얻게됩니다.

+0

이전 답변이지만 여전히 프로젝션 및 다른 회전/변환 변환을 적용했을 때 현재 모델 뷰 매트릭스를 얻을 수있는 방법을 알려주시겠습니까? –

+0

@AbhishekBansal 내가 아는 한, ES 2에서는 OpenGL에서 행렬을 얻는 방법이 없습니다. 행렬 스택이 사용되지 않으므로 더 이상 "현재"행렬이 없습니다. 그러나 프로그래머로서 당신은 쉐이더에 그 매트릭스를 유니폼으로 지정할 필요가 있습니다. 그래서 여러분은 이미이 행렬을 이미 가지고 있습니다. MVP를 모델 뷰 및 프로젝션으로 분해하는 방법에 대한 질문은 "당신이하지 못합니다"입니다. 하나의 행렬 (모델 뷰)에서 모든 선형 변환을 적용하고 다른 행렬 (투영법)에서 투영 트롬 밍을 적용하면됩니다. MVP는 그들의 제품입니다. –

+0

흠 그래, 나는 그것을 고맙게 여기고 혼란스러워했다. :) –

관련 문제