2010-06-01 60 views
1

爲了澄清事情,我想要做的是獲取openGL座標並在我的mfc代碼中操作它們。不要獲得一個openGL對象。我正在使用mfc來控制openGL中對象的位置。嘗試將openGL轉換爲MFC座標,並遇到與「gluProject」有關的問題

嗨,我試圖找到在網絡上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.我已經嘗試了許多更多的組合和Web上的例子,似乎沒有什麼在我的情況下工作....

任何人都可以告訴我什麼是正確的方式來進行轉換?

10X

+0

什麼是「MFC座標」? – genpfault 2010-06-01 14:17:31

+0

MFC座標與openGL座標不同,MFC座標從邏輯屏幕的左上角開始,openGL座標從screan的midle開始。所以我需要一個系統從一個轉換到另一個,所以我可以在我的程序中使用它們。 – Erez 2010-06-01 19:13:35

回答

2

它看起來像你想檢索對象(或對象)是/是在一個特定的點。如果是這種情況,gluProject和/或gluUnProject並不是真的非常適合該任務的工具。 OpenGL有一個專門用於這類任務的選擇模式。

在典型應用中,你指定一個小方(例如,5×5像素)周圍的鼠標點擊現貨gluPickMatrix,設定選擇模式glRenderMode,設置了緩衝區glSwelectBuffer,然後繪製場景。圖形不會進入屏幕,但會填充您指定的緩衝區,並記錄指定區域內繪製的內容。

相關問題