我正在尝试使用鼠标指针。所以基本上我需要将屏幕坐标转换为世界坐标。我已经看过很多关于这个的帖子,以及来自NeHe和其他地方的教程,但它们都没有适合我。几乎每一次,我都会遇到某种缩放问题,我将鼠标从窗口中心移开的距离越远,四边形从鼠标移动的距离就越大。
我目前正在尝试的代码来自 http://www.3dbuzz.com/forum/threads/191296-OpenGL-gluUnProject-ScreenCoords-to-WorldCoords-problem 但它仍然存在缩放问题,即使该链接中的人说该代码对他有效。
如何让四边形跟随鼠标?
继承代码(来自渲染帧功能):
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);
答案 0 :(得分:0)
编辑:我发现'glReadPixels'会略微降低FPS。我通过仅更新每个FPS / 60帧的四位置来修复此问题。