2

キャンバスにテキストをレンダリングするための次の関数があります。

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

次のようにレンダリングされます:

blabla

何か案は?

PSタブ(\ t)も機能していません。

PPS glutBitmapString、glutBitmapCharacter、glutStrokeCharacterと同じ問題。

4

1 に答える 1

3

実装されていないようです(例でこのコードが実行されている場合...)。翻訳は常にシフトしますが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で置き換えることができます。\tx

于 2012-04-13T21:02:27.753 に答える