opengl - JOGL/OpenGL : "\n" (newline) does not working for text rendering

标签 opengl newline glut jogl

我有这个函数可以在 Canvas 上渲染文本:

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

有什么想法吗?

附注制表符 (\t) 无法正常工作。

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

最佳答案

看起来是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 移位绘制每个部分,并用一些额外的 x 替换 \t偏移量。

关于opengl - JOGL/OpenGL : "\n" (newline) does not working for text rendering,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10145701/

相关文章:

c - 我必须在 GL/glew.h 之后包含 SDL_opengl.h 吗?

c - 在 Windows 和 Linux 中使用 fscanf 时行尾的字符不同

c++ - Opengl 使用鼠标旋转对象 (C++)

c - 使用不同颜色的三角形镶嵌球体

java - 从顶点着色器传递到片段着色器

file-io - 使用 '\n' 将多行写入文本文件

syntax - 如何在ColdFusion中的字符串中编写换行符?

c++ - 在 Mac OS X 上使用 CGL 设置 OpenGL 上下文

c - OpenGL:响应键盘问题

尝试 glUseProgram 时出现 Opengl 错误 1281