У меня есть следующий код для визуализации текста в моем приложении, сначала я получаю координаты мыши в мире, а затем использую эти координаты, чтобы разместить текст в мире, чтобы он следовал моему положению мыши:
Редактировать: добавлена функция buildfont () в примере кода:
GLvoid BuildFont(GLvoid) // Build Our Bitmap Font
{
HFONT font; // Windows Font ID
HFONT oldfont; // Used For Good House Keeping
base = glGenLists(96); // Storage For 96 Characters
font = CreateFont( -12, // Height Of Font
0, // Width Of Font
0, // Angle Of Escapement
0, // Orientation Angle
FW_NORMAL, // Font Weight
FALSE, // Italic
FALSE, // Underline
FALSE, // Strikeout
ANSI_CHARSET, // Character Set Identifier
OUT_TT_PRECIS, // Output Precision
CLIP_DEFAULT_PRECIS, // Clipping Precision
ANTIALIASED_QUALITY, // Output Quality
FF_DONTCARE|DEFAULT_PITCH, // Family And Pitch
"Verdana"); // Font Name (if not found, its using some other font)
oldfont = (HFONT)SelectObject(hDC, font); // Selects The Font We Want
wglUseFontBitmaps(hDC, 32, 96, base); // Builds 96 Characters Starting At Character 32
SelectObject(hDC, oldfont); // Selects The Font We Want
DeleteObject(font); // Delete The Font
}
GLvoid glPrint(const char *fmt, ...){
char text[256];
va_list ap;
if (fmt == NULL) return;
va_start(ap, fmt);
vsprintf(text, fmt, ap);
va_end(ap);
glPushAttrib(GL_LIST_BIT);
glListBase(base - 32);
glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);
glPopAttrib();
}
...
glPushMatrix();
glColor4f(0,0,0,1);
// X-1 wont work because these are the world coordinates:
glRasterPos2d(MousePosX-1, MousePosY);
glPrint("TEST");
glColor4f(1,1,0,1);
glRasterPos2d(MousePosX, MousePosY);
glPrint("TEST");
glPopMatrix();
Но я хочу визуализировать многострочные тексты или тексты с «границами» (как в приведенном выше коде, который я пробовал) или текст с фоном (чтобы я мог лучше отличить их от фона)
Так как мне это сделать?
Мне просто нужно знать, как я могу переместить его в пикселях, чтобы я мог точно изменить положение на моем экране БЕЗ использования 2-мерного проекции поверх моей 3D-визуализации ... Я просто хочу сделать это так просто, как возможно.
Я пытался нарисовать квадрат под текстом, но, конечно, он не работает, поскольку он все еще использует мировые координаты ... поэтому, когда я поворачиваю камеру, текст не перемещается по фону текста ... я боюсь, единственное решение - создать еще одну проекцию поверх трехмерной проекции ...