OpenGL: GL_QUADS скрывает часть glutBitmapCharacter - PullRequest
2 голосов
/ 21 февраля 2012

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

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

Picture 1: Obscured annotation

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

Picture 2: Back surf annotation is shown

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

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

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

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

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

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

РЕДАКТИРОВАТЬ 2: другое решение будет текст с отображением текстуры

0 голосов
/ 22 февраля 2012

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

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

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

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

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

...