如何在OpenGL和pygame中绘制3D网格后的2D图像?

时间:2017-06-09 17:37:26

标签: python opengl 3d pygame

在pygame中我创建了带有3个按钮的主菜单,前两个按钮用于绘制2D图形,如果我按下"退格"或"逃避"它使用三个按钮返回主菜单。最后(第三个)按钮,从STL文件绘制3D网格。 [1]

问题:我可以很容易地在第一个和第二个按钮之间导航,但如果我至少绘制一次3D网格,那么我可以按第一个和第二个按钮。

绘制3D网格的代码(不幸的是,由于私人数据,我不允许上传整个代码。)

我对这个问题的想法:我认为在我的应用程序中渲染多边形时,由于启用了深度测试和混合,我遇到了问题。 我试图禁用深度测试和混合。

1 个答案:

答案 0 :(得分:1)

看起来按钮A和按钮B触发调用以在屏幕平面中渲染绘图(这是需要进行orphographic投影的2D渲染)。根据您的代码,按钮C触发调用以使用透视视图矩阵渲染3D模型。

在渲染调用之间切换时,需要确保适当地重置视图矩阵(在调用按钮A / B渲染代码之前设置一个orphographic投影矩阵)。看起来您可能忘记在按钮A / B触发渲染代码之前将视图矩阵设置为orphographic投影。因此,当您在按钮C的结果之后按下按钮A和按钮B时,它会尝试使用先前设置的透视投影矩阵进行渲染,从而产生奇怪的结果。

您必须创建正交投影矩阵并在2D渲染之前加载它。您可以在2D代码段中设置矩阵模式后调用gluOrtho2D来设置此项,类似于您在3D代码段中对gluPerspective的调用。 This page describes in great detail如何创建所需的拼写矩阵(导航到投影矩阵(GL_PROJECTION)部分以获取详细说明和示例代码)。