J'ai le code suivant pour rendre le texte dans mon application, d'abord je reçois les coordonnées de la souris dans le monde, puis utiliser ces coordonnées pour placer mon texte dans le monde, il suivra ma position de la souris:Déplacement d'objets à l'écran par pixel avec glRasterPos()
Edit: ajouté la fonction buildfont() dans l'exemple de code:
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();
Mais je veux rendre textes multilignes, ou des textes avec des "frontières" (comme dans le code ci-dessus j'ai essayé) ou texte avec le fond (ainsi je pourrais les distinguer mieux de l'arrière - plan) So ho w je fais ça? J'ai juste besoin de savoir comment je peux le déplacer en pixels, donc je pourrais modifier précisément la position sur mon écran SANS utiliser la projection 2d sur ma projection de rendu 3D ... Je veux juste le rendre aussi simple possible.
J'ai essayé de dessiner un quad sous le texte, mais bien sûr cela ne fonctionne pas car il utilise toujours les coordonnées du monde ... alors quand je tourne mon appareil photo le texte ne bouge pas sur le fond du texte ... crains que la seule solution est de créer une autre projection sur le dessus de la projection 3D ...
Ce qui est dans la liste d'affichage, je comprends que c'est une sorte de glyphes, mais comment la liste est-elle générée? –
oh attends, j'ai édité maintenant mon premier post. Je ne pense pas que cela importe, puisque je veux dessiner des quads, etc, pas seulement la police ... –