OpenGL:GL_QUADS隐藏了glutBitmapCharacter的一部分

时间:2012-02-21 14:21:27

标签: opengl text graphics 3d geometry

我正在尝试可视化CAD几何体,其中GL_QUADS用于几何体,而glutBitmapCharacter用文本注释。

对于某些视图方向(图片1),GL_QUADS部分隐藏文本(例如33,32,... here)。

Picture 1: Obscured annotation

如果我使用glDisable(GL_DEPTH_TEST)来正确显示文本,我会得到应该注释背面的文本(图2)。

Picture 2: Back surf annotation is shown

我的目标是注释可见的前表面而不会被遮挡,但背面上的注释未显示。

(我能够通过略微偏移四边形的注释来解决这个问题,但这会在我的程序中引起一些其他问题,所以我不喜欢这个解决方案)

有人可以建议我一个解决方案吗?

2 个答案:

答案 0 :(得分:1)

好吧,正如我所期待你已经知道的那样,看起来文字因为它的定位/定向方式而被切断 - 它是从屏幕上的一个点和从右到左绘制的。

如果您不想要抵消它(正如您已经提到的那样,但我仍然建议这是简单的解决方案),那么一种方法可能是旋转文本的方式与旋转对象的方式相同。这(我希望)只是将您绘制文本的位置更改为绘制每个四边形的相同位置(因此使用相同的矩阵)。当然,文本不会那么清晰。此解决方案还需要使用不同的对象来呈现文本,例如FreeType Fonts.

编辑2:另一种解决方案是texture-mapped text

答案 1 :(得分:0)

  

有人可以建议我一个解决方案吗?

您需要实施碰撞检测引擎。

如果3d空间中必须显示标签的点未被遮挡,则禁用深度测试的渲染文本。这将完全解决您的问题。

据我所知,如果你想让信件面向观众,没有其他方法可以解决问题 - 无论你做什么,总会有很好的机会让他们被其他东西部分遮挡。

由于您需要非常特殊的碰撞检测(检测点的可见性),您可以尝试使用select buffer来解决此问题。另一方面,检测光线/三角形(见gluUnProject / gluProject)碰撞并不难实现,虽然在复杂的场景中,事情会很快变得复杂,你需要实现场景图并使用类似于八叉树的算法。