我有这个函数可以在 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/