【问题标题】:OpenGL : GL_QUADS hides part of glutBitmapCharacterOpenGL:GL_QUADS 隐藏部分 glutBitmapCharacter
【发布时间】:2012-02-22 22:29:17
【问题描述】:

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

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

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

我的目标是在不被遮挡的情况下对可见的正面进行注释,但在背面没有显示注释。

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

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

【问题讨论】:

  • 要让这种事情完美运行是很棘手的。稍微偏移文本几乎是最简单的方法。您也可以像以前一样关闭深度测试,然后在绘制标签之前对人脸的可见性进行自己的测试。

标签: opengl text graphics 3d geometry


【解决方案1】:

好吧,正如我希望您已经知道的那样,由于文本的定位/定向方式,它看起来好像被截断了 - 它是从屏幕上的一个点从右到左绘制的。

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

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

【讨论】:

【解决方案2】:

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

你需要实现碰撞检测引擎。

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

据我所知,如果您想让字母面向查看者,则没有其他方法可以解决该问题 - 无论您做什么,它们总是很有可能被其他东西部分遮挡。

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

【讨论】:

  • 感谢您的建议,我会尝试使用选择缓冲区。
猜你喜欢
  • 1970-01-01
  • 2016-01-10
  • 2021-05-19
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多