JOGL / OpenGL:“\ n”(换行符)不适用于文本呈现

时间:2012-04-13 17:44:46

标签: opengl newline glut jogl

我有这个功能在画布上渲染文字:

public void renderString(String s, int x, int y){
        gl.glMatrixMode(GL.GL_PROJECTION);
        gl.glPushMatrix();
        gl.glLoadIdentity();
        gl.glOrtho(0,WIDTH,0,HEIGHT,-1, 1);
        gl.glMatrixMode(GL.GL_MODELVIEW);
        gl.glPushMatrix();
            gl.glLoadIdentity();
            gl.glTranslatef(x,y,0);
            gl.glScalef(textScalingFactor, textScalingFactor, 1f);
            glut.glutStrokeString(GLUT.STROKE_ROMAN, s);
            gl.glMatrixMode(GL.GL_PROJECTION);
            gl.glPopMatrix();
        gl.glMatrixMode(GL.GL_MODELVIEW);
        gl.glPopMatrix();
}

问题是,换行符(\ n)不起作用以及所有以下字符串:

String s1 = "bla"+"\n"+"bla";
String s2 = "bla\nbla";

char newLine = new char(10);
String s3 = "bla"+newLine+"bla";

呈现为:

  

布拉布拉

有什么想法吗?

P.S。标签(\ t)也不起作用。

P.P.S。与glutBitmapString,glutBitmapCharacter,glutStrokeCharacter相同的问题。

1 个答案:

答案 0 :(得分:3)

看起来是just not implemented鉴于您的示例运行此代码...... )翻译始终会x,而不是y。我稍微缩短了以下代码。

public void glutStrokeString(int font, String string) {
    /* setup */
    for (int pos = 0; pos < len; pos++) {
        /* single char setup */
        StrokeCharRec ch = fontinfo.ch[c];
        if (ch != null) {            
            /* draw strokes */
        }
        gl.glTranslatef(ch.right, 0.0f, 0.0f);
    }
}

其他方法很可能共享相同的问题。

无论如何,您可以自己拆分字符串,使每个部分的y移位增加,并将\t替换为额外的x偏移量。