使用openGL进行文本渲染:无法旋转文本,定位无法正常工作

时间:2009-07-06 07:37:07

标签: c# opengl text fonts

嘿,这是我的情景: 使用visual studio 2008。 项目在c# 使用Tao框架和ISE.FreeType来呈现文本。 字体已加载并转换为纹理位图:

//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;

为了直截了当,这是我的代码,用于呈现一些文本。

    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) 控件第一次绘制文本时,会正确检测位置 第二次控件重绘时,X位置被插入并且文本水平居中。只有高度(Y位置)正常工作。

2) 旋转不起作用。尽管模型视图矩阵已旋转,但文本始终水平显示。为什么是这样?我认为纹理字体被视为与任何其他OpenGL原语一样。

2 个答案:

答案 0 :(得分:1)

你是围绕Y轴而不是绕Z轴旋转吗?

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

我也不熟悉C#界面,但OpenGL中的角度通常以度数指定,但是您传递的值为Math.Atan2,以弧度为单位。

这看起来也错了:

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

通常首先进行翻译,然后进行比例。如果先缩放,则缩放将应用于X和Y偏移以及纹理。尝试交换这些。

答案 1 :(得分:0)

尝试使用“3f”功能版本,例如: glTranslate3f glScale3f

请小心订单,正如Finw所说。

此致