繁体   English   中英

如何在同一屏幕上绘制2d对象和3d对象

[英]How to draw 2d object and 3d object on the same screen

我试图绘制一个按钮,以便以后可以单击它。 但是我遇到了一些问题,即当我在Draw2d函数中取消注释选定的零件时,屏幕变黑,而我的3d对象消失了。 任何想法为什么以及如何解决这个问题? 我想添加带有注释部分的按钮,该按钮显示在不同的区域(左,顶部屏幕),如果我像在此处对其进行注释,则其显示在我的3d对象的中心,并且没有边框。 只有标签。

void Draw2D()
{
   glPushMatrix();
   glDisable(GL_DEPTH_TEST);
   //glMatrixMode(GL_PROJECTION);
   //glLoadIdentity();
   glOrtho(0, winw, winh, 0, -1, 1);
   //glMatrixMode(GL_MODELVIEW);
   //   glLoadIdentity();
   ButtonDraw(&MyButton);
   glPopMatrix();
   glEnable(GL_DEPTH_TEST);
}

这是我的源代码: Source.cpp

我还要问是否有人知道如何创建输入字段? 因为我还在学习,所以很容易获得赞赏。

目前尚不清楚绘制循环的外观,以及在其中设置矩阵,绘制3d材质和绘制2d材质的位置。 但是从到目前为止显示的代码中,我仍然可以解释为什么会产生影响: 每种矩阵类型 (模型视图,投影,纹理)都有一个矩阵堆栈。

您的代码要做的是将当前选定的矩阵推入堆栈(可能是GL_MODELVIEW )。 然后,您对其应用正交矩阵。 由于矩阵在此处不太可能是恒等式,因此正交将无法获得您期望的结果,并且图像是错误的。 同样,旧的投影矩阵仍保持不变,这将进一步影响变换。 然后,您可以还原原始矩阵,并且渲染保持不变。

如果取消注释代码,则先切换按钮,然后切换,将正交矩阵设置为投影,并设置模型视图的标识-但仅要还原模型视图矩阵,并且投影矩阵仍将具有正交集合。

您真正需要做的是:

glMatrixMode(GL_PROJECTION);
glPushMatrix(); // save current projection matrix 
glLoadIdentity();
glOrtho(0, winw, winh, 0, -1, 1);
glMatrixMode(GL_MODELVIEW);
glPushMatrix(); // save current modelview matrix
glLoadIdentity();
// ... draw
glMatrixMode(GL_PROJECTION);
glPopMatrix(); // restore PUSHed projection matrix
glMatrixMode(GL_MODELVIEW);
glPopMatrix(); // restore PUSHed modelview matrix

假定glMatrixMode(GL_MODELVIEW)调用此glMatrixMode(GL_MODELVIEW)时,设置了glMatrixMode(GL_MODELVIEW) ,并将其还原到此状态。 这也可以优化为

// assume `GL_MODELVIEW` is the current matrix mode
glPushMatrix(); // save current modelview matrix
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glPushMatrix(); // save current projection matrix
glLoadIdentity();
glOrtho(0, winw, winh, 0, -1, 1);
// ... draw
glPopMatrix(); // restore PUSHed projection matrix
glMatrixMode(GL_MODELVIEW);
glPopMatrix(); // restore PUSHed modelview matrix
// now `GL_MODELVIEW` is selected again

这稍微减少了调用开销,但不如初始变体那么清晰。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM