2012-02-21 2 views
2

Я пытаюсь визуализировать геометрию САПР, где GL_QUADS используется для геометрии и glutBitmapCharacter, чтобы комментировать текст.OpenGL: GL_QUADS скрывает часть glutBitmapCharacter

GL_QUADS частично скрывает текст (например, 33,32, ... здесь) для некоторых ориентаций изображения (рисунок 1).

Picture 1: Obscured annotation

Если я использую glDisable (GL_DEPTH_TEST), чтобы получить текст, который отображается правильно, я получаю текст, который, как предполагается, аннотировать заднюю поверхность также отображается (рисунок 2).

Picture 2: Back surf annotation is shown

Моя цель состоит в том, чтобы комментировать видимые передние поверхности без затемняется, но имеющие аннотацию на задней поверхности не показаны.

(я могу решить эту проблему немного компенсировала аннотацию к нормальному четырехугольнику, но это вызывает у меня некоторые другие вопросы, в моей программе, так что я не предпочитаю это решение)

Может кто-нибудь предложить, пожалуйста я решение?

+0

Трудно получить такую ​​работу, которая отлично работает. Слегка компенсировать текст - это самый простой способ. Вы также можете отключить проверку глубины, как вы это делали, а затем выполнить собственные тесты на видимость лиц перед рисованием меток. –

ответ

1

Ну, как я ожидаю, вы уже знаете, похоже, что текст обрезается из-за того, как он позиционируется/ориентирован - он рисуется из точки и справа налево на экране.

Если вы не хотите его компенсировать (как вы уже упоминали, но я все же предлагаю, так как это простое решение), то одним из способов может быть поворот текста так же, как и поворот объекта. Это могло бы (я ожидаю) просто изменить ситуацию, когда вы нарисуете текст в том же месте, где вы рисуете каждый квадрат (таким образом, используя ту же матрицу). Конечно, тогда текст не будет столь разборчивым. Это решение также требует использования другого объекта для визуализации текста, например FreeType Fonts.

EDIT 2: другое решение будет texture-mapped text

+0

Спасибо за предложения, но glutBitmapCharacter просто визуализирует текст прямо вправо? можно ли его повернуть? –

+0

Извините, я также сделал предположение, что целью был текст, а не конкретный тип объекта. Такими примерами могут быть шрифты FreeType (http://nehe.gamedev.net/tutorial/freetype_fonts_in_opengl/24001/, или http://stackoverflow.com/questions/1085832). Еще одно интересное решение, опять же, если вы хотите использовать другие способы рендеринга текста, - использовать текст с текстурой. Эта статья выглядит как она охватывает некоторые из ваших проблем: ftp://ftp.sgi.com/opengl/contrib/mjk/tips/TexFont/TexFont.html – DRobinson

0

Может кто-нибудь пожалуйста, предложить мне решение?

Вам необходимо реализовать механизм обнаружения столкновений.

Если точка в трехмерном пространстве, на которой должна отображаться метка, не затенена, визуализируйте текст с тестом глубины. Это полностью устранит вашу проблему.

Насколько я могу судить, нет другого способа решить проблему, если вы хотите сохранить буквы, ориентированные на зрителя - независимо от того, что вы делаете, всегда будет хороший шанс, что они будут частично затенены чем-то другим ,

Поскольку вам нужно очень специфическое обнаружение столкновения (обнаружить видимость точки), вы можете попытаться решить эту проблему, используя select buffer. С другой стороны, обнаружение луча/треугольника (см.) столкновения не так сложно реализовать, хотя в сложных сценах вещи будут быстро усложняться, и вам понадобится реализовать график сцены и использовать алгоритмы, подобные октавам.

+0

Спасибо за предложение, я попытаюсь использовать буфер выбора. –