마우스 포인터를 따라 쿼드를 가져 오려고합니다. 그래서 기본적으로 화면 좌표를 세계 좌표로 변환해야합니다. 나는 이것에 대한 많은 글과 NeHe와 다른 장소의 튜토리얼을 보았지만 그 중 아무 것도 나를 위해 제대로 작동하지는 않는다. 거의 모든 시간에 스케일링 문제가 발생합니다. 마우스 중심에서 마우스를 멀리 떨어 뜨릴수록 쿼드는 마우스에서 더 많이 벗어납니다.C++ OpenGL Quad가 마우스 포인터를 따라 가십시오. (Glut없이)
코드에서 현재 시도하고있는 코드는 http://www.3dbuzz.com/forum/threads/191296-OpenGL-gluUnProject-ScreenCoords-to-WorldCoords-problem 입니다. 링크에있는 사람이 코드가 작동한다고하더라도 확장 성 문제는 여전히 남아 있습니다.
쿼드는 마우스를 따라갈 수 있습니까?
는 Heres는 (렌더링 프레임 기능에서) 코드 :
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f,0.0f,-5.0f);
POINT mouse;
GetCursorPos(&mouse);
ScreenToClient(WindowHandle, &mouse);
GLdouble
posX1,
posY1,
posZ1,
posX2,
posY2,
posZ2,
modelview[16],
projection[16];
GLint
viewport[4];
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glGetIntegerv(GL_VIEWPORT, viewport);
gluUnProject(mouse.x, viewport[1] + viewport[3] - mouse.y, 0, modelview, projection, viewport, &posX1, &posY1, &posZ1);
gluUnProject(mouse.x, viewport[1] + viewport[3] - mouse.y, 1, modelview, projection, viewport, &posX2, &posY2, &posZ2);
GLfloat t = (posZ1 - 0)/(posZ1 - posZ2);
GLfloat
fX = posX1 + (posX2 - posX1) * t,
fY = posY1 + (posY2 - posY1) * t;
OutputDebugFloat(fX);
OutputDebugString(", ");
OutputDebugFloat(fY);
OutputDebugString("\n");
glTranslatef(fX, fY, 0);
DrawTile(test.Tex()); // Draws the quad with the specified texture
SwapBuffers(hDC);