2014-08-27 92 views
0

我想在opengl中繪製一個立方體,這將允許我在按下它的面時更改視圖(如在Unity3D,Autocad ),這裏是兩個軟件的一些圖片:在窗口opengl的右上角繪製一個立方體(並使其停留在那裏)

enter image description here

Unity3D

這是我的嘗試:

void GLWidget::drawViewCube(float x, float y, float z, float t, float posX, float posY){ 
    glBegin(GL_QUADS); 
    //std::cout << " x : " << x << ", y : " << y << ", z : " << z; 
    glVertex3f(x+posX+t,y+posY-t,z+t); 
    glVertex3f(x+posX-t,y+posY-t,z+t); 
    glVertex3f(x+posX-t,y+posY+t,z+t); 
    glVertex3f(x+posX+t,y+posY+t,z+t); 

    glVertex3f(x+posX+t,y+posY+t,z+t); 
    . 
    . 
    . 
    // Just drawing a cube 

} 

這是我怎樣,我稱之爲:

drawViewCube(-depX,-depY,-zoom-590, 0.5, -0.03 * height(), 0.03 * width()); 

所以我畫它像一個正常的立方體,但我做它遵循相機depXdepY(這是的deplacements我相機),並與zoom也。與此相關立方體是跟隨我的相機,並始終停留在相同的位置(這是我們想要的,對吧?)我也試圖讓它留在窗口內,當我們延長窗口height()width(),但這是沒有真正的工作,當我擴大窗口它不停留在某個地方(右上),但這不是最大的問題,真正的問題是當我旋轉我的相機...

我認爲我應該嘗試使用我的視圖的矩陣,所以我可以讓它留在同一個地方,但我不擅長opengl ...所以如果任何人有任何關於這件事的想法,請讓我知道。 PS:我現在只想繪製立方體,我會考慮如何在它上面按下以後再改變視圖。

+0

它可能更容易讓它完全忽略相機,並分別應用旋轉 – 2014-08-27 08:34:47

+0

是的,但正如我所說,我不是很擅長使用視矩陣,如果你能解釋我該怎麼做,它會有幫助 – 2014-08-27 08:37:01

回答

0

您應該建立一個很好的固定座標系,您可以通過相應地設置投影和模型視圖來繪製立方體。這可以在drawViewCube方法中按如下方式完成:

//store current projection matrix, load orthographic projection 
glMatrixMode(GL_PROJECTION); 
glPushMatrix(); 
glLoadIdentity(); 
glOrtho(0.0, 1.0, 1.0, 0.0, -1.0, 1.0); // (0,0) set to upper left corner 

//store current modelview and load identity transform 
glMatrixMode(GL_MODELVIEW); 
glPushMatrix(); 
glLoadIdentity(); 

//disable depth testing so the quad is always on top 
glDisable(GL_DEPTH_TEST); 

//draw quad in coordinate system (0,0)->(1,1) at z=0 
glColor3f(1.0,1.0,1.0); 
glBegin(GL_QUADS); 
glVertex3f(0.1,0.1,0.0); 
glVertex3f(0.2,0.1,0.0); 
glVertex3f(0.2,0.2,0.0); 
glVertex3f(0.1,0.2,0.0); 
glEnd(); 

//re-enable depth testing 
glEnable(GL_DEPTH_TEST); 

//restore modelview and projection to previous state 
glPopMatrix(); 
glMatrixMode(GL_PROJECTION); 
glPopMatrix(); 
glMatrixMode(GL_MODELVIEW); 

請注意,這假定矩陣模式最初是GL_MODELVIEW。你也應該閱讀關於modelview和投影的地方。 (或者你可能會遇到更多的麻煩;))

希望它有效。

+0

謝謝你的回覆,但我實際上需要一個立方體,當我旋轉相機時會旋轉(看第一張圖片) – 2014-08-27 12:08:37

+0

哦,現在我明白了;) – Thomas 2014-08-27 17:50:08

+0

不幸的是這更復雜。 如果你的立方體應該與全局座標系對齊,我認爲你需要建立一個代表與視圖矩陣相同旋轉的矩陣,但是沒有縮放或平移。也許你可以玩你的相機例程,只需設置旋轉角度,直到你在「主屏幕」中獲得令人滿意的立方體渲染效果。然後,您只需要如圖所示限制視口,應用這些設置並繪製立方體。 – Thomas 2014-08-27 18:03:17

相關問題