2009-07-06 9 views
0

Hey, Voici mon scénario: utilisant Visual Studio 2008. projet est en C# Utiliser cadre Tao ainsi que ISE.FreeType pour rendre le texte. La police est déjà chargé et converti en bitmap de texture:texte rendu avec openGL: Ne peut pas faire pivoter le texte, le positionnement ne fonctionne pas correctement

//Creamos la fuente 
      fuenteActual = new FTFont(fuentes.FontMap[fuente], out ultimoError); 
      //Convierte la fuente a textura. Estos valores se usan en el ejemplo, creo que tiene que ver con la calidad/eficiencia. 
      fuenteActual.ftRenderToTexture(64, 96); 
      //Ponemos la alineacion por defecto como centrada. 
      fuenteActual.FT_ALIGN = FTFontAlign.FT_ALIGN_CENTERED; 

Pour obtenir directement au point, ceci est mon code pour rendre un texte.

Gl.glLoadIdentity(); 
    float tamaño = texto.Tamaño; 
    double tan = texto.Orientacion.Y/texto.Orientacion.X; 
    float angulo = (float)Math.Atan(tan); 

    Gl.glColor3f(texto.getRFloat(), texto.getGFloat(), texto.getBFloat()); 
    Gl.glScalef(tamaño, tamaño, tamaño); 
    Gl.glTranslatef((float)texto.Posicion.X, (float)texto.Posicion.Y, (float)texto.Posicion.Z); 
    Gl.glRotatef(angulo,0,1,0); 
    if (texto.Alineacion == Align.left) 
     fuenteActual.FT_ALIGN = FTFontAlign.FT_ALIGN_LEFT; 
    if (texto.Alineacion == Align.center) 
     fuenteActual.FT_ALIGN = FTFontAlign.FT_ALIGN_CENTERED; 
    if (texto.Alineacion == Align.right) 
     fuenteActual.FT_ALIGN = FTFontAlign.FT_ALIGN_RIGHT; 

    fuenteActual.ftBeginFont(); 
    fuenteActual.ftWrite(texto.Text); 
    fuenteActual.ftEndFont(); 

1) La première fois que la commande tire le texte, la position est détectée correctement La deuxième fois que le redraws de commande, la position X est ingored et le texte centré horizontalement. Seule la hauteur (position Y) fonctionne.

2) La rotation ne fonctionne pas. Le texte est toujours affiché horizontalement malgré la rotation de la matrice modelview. Pourquoi est-ce? Je pensais que les polices de texture étaient traitées comme n'importe quelle autre primitive OpenGL.

Répondre

1

Se pourrait-il que vous tourniez autour de l'axe Y au lieu de l'axe Z?

Gl.glRotatef(angulo,0,1,0); 

Aussi je ne suis pas familier avec l'interface C#, mais les angles en OpenGL sont normalement spécifié en degrés, mais vous passez un retour de valeur de Math.Atan2, qui est en radians.

Cela ressemble aussi mal:

Gl.glScalef(tamaño, tamaño, tamaño); 
Gl.glTranslatef((float)texto.Posicion.X, (float)texto.Posicion.Y, (float)texto.Posicion.Z); 

Il est habituel de faire la traduire d'abord, puis l'échelle. Si vous mettez d'abord à l'échelle, la mise à l'échelle sera appliquée à vos décalages X et Y ainsi qu'à la texture. Essayez de les échanger.

+0

Malheureusement, ce ne marchait pas des travaux que ... je l'ai essayé tous les axes lol ... ne sais pas ce qui est mal !! :( –

+0

OMG Man u dieu ... c'était la chose radian ... je pensais que la convention était d'utiliser des radians pas des degrés ... merci l'homme U sais pourquoi le problème de positionnement x tho? –

0

essayez d'utiliser les versions de fonction "3F", par exemple: glTranslate3f glScale3f

et faire attention à l'ordre, comme finw dit.

Cordialement

Questions connexes