在窗口opengl的右上角绘制一个立方体(并使其保持在那里)

时间:2014-08-27 08:32:06

标签: c++ opengl

我想在opengl中绘制一个多维数据集,当我们按下它时,我可以更改视图(如Unity3DAutocad),这里有一些图像对于这两个软件:

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(这是我的相机的替代品)跟随相机,并使用{{1也是。这个立方体跟着我的相机并且总是停留在同一个位置(这就是我们想要的,对吧?)当我们用zoom和{扩展窗口时,我也试图让它留在窗口内{1}},但这并没有真正起作用,当我延伸窗口时,它不会停留在某个地方(右上角),但这不是最大的问题,真正的问题是当我旋转相机时......

我认为我应该尝试使用我的视图中的矩阵进行绘制,这样我就可以让它保持在同一个地方,但我对opengl并不擅长...... 所以,如果有人对此事有任何了解,请告诉我。

PS:我现在只想绘制立方体,我会考虑如何按下它来改变视图。

1 个答案:

答案 0 :(得分: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。你也应该阅读有关模型视图和投影的内容。 (或者你可能会遇到更多麻烦;))

希望它有效。