【问题标题】:Drawing a cube on the top right of a window opengl (and make it stay there)在 opengl 窗口的右上角绘制一个立方体(并让它呆在那里)
【发布时间】:2014-10-20 18:13:16
【问题描述】:

我想在opengl 中绘制一个立方体,当我们按下它的面时,我可以改变视图(例如在Unity3DAutocad),这是两个软件的一些图像:

这是我尝试过的:

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(这是我的相机的位移)和zoom 让它跟随相机。有了这个,立方体跟随我的相机并始终保持在同一位置(这是我们想要的,对吗?)当我们用height()width() 扩展窗口时,我也试图让它留在窗口内,但这并没有真正起作用,当我扩展窗口时它不会停留在某个地方(右上角)但这不是最大的问题,真正的问题是当我旋转我的相机时......

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

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

【问题讨论】:

  • 让它完全忽略相机并单独应用旋转可能更容易
  • 是的,但正如我所说,我不太擅长使用 View Matrix,如果你能解释我如何做到这一点,那将很有帮助

标签: c++ opengl


【解决方案1】:

你应该建立一个很好的、固定的坐标系,你可以通过相应地设置投影和模型视图来绘制你的立方体。例如,这可以在您的 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。您还应该在某处阅读有关模型视图和投影的信息。 (否则你可能会遇到更多麻烦;))

希望它有效。

【讨论】:

  • 感谢您的回复,但我实际上需要一个旋转相机时会旋转的立方体(看第一张图片)
  • 哦,现在我明白了;)
  • 不幸的是,这更复杂。如果您的立方体应该与全局坐标系对齐,我认为您需要建立一个矩阵,该矩阵表示与视图矩阵相同的旋转,但没有缩放或平移。也许您可以使用您的相机程序,只设置旋转,直到您在“主屏幕”中获得令人满意的立方体渲染。然后你只需要如图所示限制视口,应用这些设置并绘制立方体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 2014-07-25
相关资源
最近更新 更多