체크 아웃 내가 당신을 위해 무엇을 찾고 있다고 생각이 좋은 후 다음을 얻기 위해
private boolean unProject(float winx, float winy, float winz,
float[] modelMatrix, int moffset,
float[] projMatrix, int poffset,
int[] viewport, int voffset,
float[] obj, int ooffset) {
float[] finalMatrix = new float[16];
float[] in = new float[4];
float[] out = new float[4];
Matrix.multiplyMM(finalMatrix, 0, projMatrix, poffset,
modelMatrix, moffset);
if (!Matrix.invertM(finalMatrix, 0, finalMatrix, 0))
return false;
in[0] = winx;
in[1] = winy;
in[2] = winz;
in[3] = 1.0f;
// Map x and y from window coordinates
in[0] = (in[0] - viewport[voffset])/viewport[voffset + 2];
in[1] = (in[1] - viewport[voffset + 1])/viewport[voffset + 3];
// Map to range -1 to 1
in[0] = in[0] * 2 - 1;
in[1] = in[1] * 2 - 1;
in[2] = in[2] * 2 - 1;
Matrix.multiplyMV(out, 0, finalMatrix, 0, in, 0);
if (out[3] == 0.0f)
return false;
out[0] /= out[3];
out[1] /= out[3];
out[2] /= out[3];
obj[ooffset] = out[0];
obj[ooffset + 1] = out[1];
obj[ooffset + 2] = out[2];
return true;
}
: 가까운 멀리 벡터를 계산 할 수 있습니다
사용자 정의 GLunproject을 화면상의 점 x/y에 대한 3D 좌표는 니어와 원 클리핑 평면이있는 각 교차점에 대해 한 번만 새 메서드를 호출하면됩니다.
// near clipping plane intersection
float[] objNear = new float[4];
unProject(screenX, screenY, 0.1f,
viewMatrix, 0, projectionMatrix, 0, view, 0, objNear, 0);
// far clipping plane intersection
float[] objFar = new float[4];
unProject(screenX, screenY, 1.0f,
viewMatrix, 0, projectionMatrix, 0, view, 0, objFar, 0);
그런 다음 차이 벡터 (objFar - objNear)를 계산하고 3D 공간에서 화면 이벤트에 해당하는 위치를 확인할 수 있습니다. 이것은 두 벡터 사이의 거리를 찾는 데 사용하는 간단한 함수입니다.
public float distanceBetweenVectors(float[] vec1, float[] vec2){
float distance = 0;
// Simple math
distance = (float) Math.sqrt(
Math.pow((vec1[0]-vec2[0]), 2) +
Math.pow((vec1[1]-vec2[1]), 2) +
Math.pow((vec1[2]-vec2[2]), 2) +
Math.pow((vec1[3]-vec2[3]), 2)
);
return distance;
}
Android에서는 OpenGL 1.0이 아니라 OpenGL ES 1.x를 사용합니다. –
무슨 뜻인가요? Android 1.5에서 ?? 좋아,하지만 여전히 같은 문제가있다 ... 어떻게 안드로이드 1.5 및 OpenGL ES 1.x에서 winZ 값을 얻을 수 있습니까? – NullPointerException
아무도 이것으로 나를 도울 수 없습니까? – NullPointerException