我想在opengl
中绘制一个多维数据集,当我们按下它时,我可以更改视图(如Unity3D
,Autocad
),这里有一些图像对于这两个软件:
这就是我的尝试:
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());
所以我把它描绘成一个普通的立方体,但是我正在使用depX
和depY
(这是我的相机的替代品)跟随相机,并使用{{1也是。这个立方体跟着我的相机并且总是停留在同一个位置(这就是我们想要的,对吧?)当我们用zoom
和{扩展窗口时,我也试图让它留在窗口内{1}},但这并没有真正起作用,当我延伸窗口时,它不会停留在某个地方(右上角),但这不是最大的问题,真正的问题是当我旋转相机时......
我认为我应该尝试使用我的视图中的矩阵进行绘制,这样我就可以让它保持在同一个地方,但我对opengl并不擅长...... 所以,如果有人对此事有任何了解,请告诉我。
PS:我现在只想绘制立方体,我会考虑如何按下它来改变视图。
答案 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。你也应该阅读有关模型视图和投影的内容。 (或者你可能会遇到更多麻烦;))
希望它有效。