평면 3D 표면에서 마우스의 좌표를 찾으려고합니다. 약간의 인터넷 검색을 한 후, 나는 당신이 그렇게하기 위해 gluUnProject를 사용한다는 것을 알았다. 그래서 구현했습니다. 여기 내 코드는 (흥미하지 않은 부품에 촬영시) :gluUnProject()가 작동하지 않는 이유는 무엇입니까?
public class Input {
private FloatBuffer modelView = BufferUtils.createFloatBuffer(16);
private FloatBuffer projection = BufferUtils.createFloatBuffer(16);
private IntBuffer viewport = BufferUtils.createIntBuffer(16);
private FloatBuffer location = BufferUtils.createFloatBuffer(3);
private FloatBuffer winZ = BufferUtils.createFloatBuffer(1);
public float[] getMapCoords(int x, int y)
{
modelView.clear().rewind();
projection.clear().rewind();
viewport.clear().rewind();
location.clear().rewind();
winZ.clear().rewind();
glGetFloat(GL_MODELVIEW_MATRIX, modelView);
glGetFloat(GL_PROJECTION_MATRIX, projection);
glGetInteger(GL_VIEWPORT, viewport);
float winX = (float)x;
float winY = (float)viewport.get(3) - (float)y;
glReadPixels(x, (int)winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, winZ);
gluUnProject(winX, winY, winZ.get(0), modelView, projection, viewport, location);
return new float[] {location.get(0), location.get(1), location.get(2)};
}
}
나는 X에 전달이 함수를 호출하고 Y는 마우스 좌표, 나는 모든 100 증가 몇 가지 숫자를 얻을 수를 pixel 마우스로 움직입니다 (약 1이어야합니다). 다양한 변수에서 인쇄를 한 후 winZ 버퍼에 값 1.0이 있음을 알았습니다. 내 gluPerspective는 가까운 클리핑이 0.1에 해당하고 10000에 먼 지점을 가리키는 방식으로 설정되므로 숫자가 빠르게 증가하는 이유를 설명 할 수 있습니다. 그러나 OpenGl이이 거리를 찾기 위해 대신 내 평면을 사용하도록하는 방법을 알지 못합니다.
그래서 지금 궁금합니다. 이것이 3D 세계의 표면에서 마우스 좌표를 찾는 올바른/최선/가장 쉬운 방법이라면 무엇을 잘못 할 수 있습니까? 그것이 아니라면, 그것을하는 더 좋은 방법은 무엇입니까?
나는 그것을 꽤 오래 전에 실제로 풀었다. 어떻게 실제로 기억하지만, 어쨌든 몇 가지 명성을 가지고 :) – Bartvbl
감사합니다 :) 다음에 다른 사람들을위한 솔루션을 게시하려고합니다. 또한 귀하의 질문에 "대답 함"으로 표시하고 답변이없는 질문 목록에서 제거하는 것이 좋습니다. –