试图将openGL转换为MFC坐标并遇到“gluProject”问题

时间:2010-06-01 06:12:44

标签: open-source opengl mfc

为了澄清事情,我想要做的是获取openGL坐标并在我的mfc代码中操作它们。不要获得openGL对象。我正在使用mfc来控制openGL中对象的位置。

嗨,我正在尝试在网上找到naswer并找不到我可以使用的完整解决方案,这将有效......

我正在开发一个带静态图片的MFC项目作为openGL类的画布,为我的游戏绘制格式。

在moush down中,我需要从openGL类中检索一个形状坐标。

我正在寻找一种方法将openGL坐标转换为MFC坐标,但无论我尝试使用gluProject或gluUnProject后我尝试使用垃圾(我试过两种方式但非工作方式)

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);

这只是我尝试过的代码的一部分。当然不是gluProject和gluUnProject在一起。只是让他们在这里展示.....我知道那里有很多垃圾,它来自我的一些尝试......

P.S。我已经尝试了很多来自网络的组合和示例,在我的情况下似乎没有任何作用....

任何人都可以告诉我进行转换的正确方法是什么?

10倍

1 个答案:

答案 0 :(得分:2)

看起来您正在尝试检索特定点处的对象(或多个对象)。如果是这种情况,gluProject和/或gluUnProject实际上不是一个非常适合该任务的工具。 OpenGL具有专门用于此类任务的选择模式。

在典型使用中,您使用gluPickMatrix在鼠标点击位置周围指定一个小方块(例如,5x5像素),使用glRenderMode设置选择模式,使用glSwelectBuffer设置缓冲区,然后绘制你的场景。图形不会进入屏幕,但会填充您指定的缓冲区,并记录在指定区域内绘制的内容。