Open source 试图将openGL转换为MFC坐标,但遇到问题;gluProject“;
为了澄清问题,我正在尝试获取openGL坐标,并在mfc代码中对其进行操作。不获取openGL对象。我正在使用mfc控制openGL中对象的位置。 嗨,我正在网上寻找naswer,但找不到一个完整的解决方案,我可以使用,这将工作 我正在开发一个MFC项目,使用静态图片作为openGL类的画布,该类为我的游戏绘制图形 在moush-down中,我需要从openGL类中检索形状坐标 我正在寻找一种将openGL坐标转换为MFC坐标的方法,但无论我尝试了什么,在使用gluProject或gluUnProject后,我都会收到垃圾(我尝试了两种方法,但non正在工作) 这只是我尝试过的代码的一部分。当然不能同时使用gluProject和gluUnProject。我知道那里有很多垃圾,这是我的一些尝试 p、 我在网上尝试了更多的组合和示例,但在我的情况下似乎没有任何效果 有人能告诉我什么是正确的方式来进行转换吗Open source 试图将openGL转换为MFC坐标,但遇到问题;gluProject“;,open-source,opengl,mfc,Open Source,Opengl,Mfc,为了澄清问题,我正在尝试获取openGL坐标,并在mfc代码中对其进行操作。不获取openGL对象。我正在使用mfc控制openGL中对象的位置。 嗨,我正在网上寻找naswer,但找不到一个完整的解决方案,我可以使用,这将工作 我正在开发一个MFC项目,使用静态图片作为openGL类的画布,该类为我的游戏绘制图形 在moush-down中,我需要从openGL类中检索形状坐标 我正在寻找一种将openGL坐标转换为MFC坐标的方法,但无论我尝试了什么,在使用gluProject或gluUnPr
10x看起来您正试图检索位于特定点的对象。如果是这种情况,
gluProject
和/或glunproject
实际上不是一个非常适合该任务的工具。OpenGL有一个专门用于此类任务的选择模式
在典型使用中,您可以使用
glypickmatrix
在鼠标点击点周围指定一个小正方形(例如5x5像素),使用glRenderMode
设置选择模式,使用glsweectbuffer
设置缓冲区,然后绘制场景。绘图不会进入屏幕,而是通过指定区域内的绘图记录填充指定的缓冲区。MFC坐标与openGL坐标不同,MFC坐标从逻辑屏幕的左上角开始,openGL坐标从屏幕的中间开始。所以我需要一个系统从一个转换到另一个,这样我就可以在我的程序中使用它们。
GLdouble modelMatrix[16];
glGetDoublev(GL_MODELVIEW_MATRIX,modelMatrix);
GLdouble projMatrix[16];
glGetDoublev(GL_PROJECTION_MATRIX,projMatrix);
int viewport[4];
glGetIntegerv(GL_VIEWPORT,viewport);
POINT mouse; // Stores The X And Y Coords For The Current Mouse Position
GetCursorPos(&mouse); // Gets The Current Cursor Coordinates (Mouse Coordinates)
ScreenToClient(hWnd, &mouse);
GLdouble winX, winY, winZ; // Holds Our X, Y and Z Coordinates
winX; = (float)point.x; // Holds The Mouse X Coordinate
winY; = (float)point.y; // Holds The Mouse Y Coordinate
winY = (float)viewport[3] - winY;
glReadPixels(winX, winY, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);
GLdouble posX=s1->getPosX(), posY=s1->getPosY(), posZ=s1->getPosZ(); // Hold The Final Values
gluUnProject( winX, winY, winZ, modelMatrix, projMatrix, viewport, &posX, &posY, &posZ);
gluProject(posX, posY, posZ, modelMatrix, projMatrix, viewport, &winX, &winY, &winZ);