gpt4 book ai didi

java - JOGL 过剩文本不随窗口和基元调整大小

转载 作者:行者123 更新时间:2023-12-02 00:16:13 28 4
gpt4 key购买 nike

我目前正在通过使用 JOGL 库(openGL 的 java 包装器)来探索 opengl,我用它来创建 2d/3d 图形。目前,我对通过“glutBitmapString”方法渲染的文本遇到了一些问题,它没有根据窗口调整大小,如下面的屏幕截图所示。不幸的是,我得到的工作规范是这必须在 Java 中完成,因此我无法跳转到任何其他具有更好支持 openGL 版本的语言。

窗口中的其他所有内容都会正确调整大小,因此我假设问题出在我在下面发布的代码中,如果不是,那么我很乐意发布您认为与该问题相关的代码。

The default window size

The resized window

这是我用来渲染文本的代码片段

GL gl = drawable.getGL();
GLUT glut = new GLUT();

float textPosx = -0.4f;
float textPosy = -2.1f;

gl.glColor3f(1.0f, 0.0f, 0.0f);

// Move to rastering position
gl.glRasterPos2f(textPosx, textPosy);

// convert text to bitmap and tell what string to put
glut.glutBitmapString(GLUT.BITMAP_HELVETICA_12, "0");

textPosx = 1.75f;
textPosy = -2.15f;

// Move to rastering position
gl.glRasterPos2f(textPosx, textPosy);

// convert text to bitmap and tell what string to put
glut.glutBitmapString(GLUT.BITMAP_HELVETICA_18, "TIME");

textPosx = -1.0f;
textPosy = 1.0f;

gl.glColor3f(0.0f, 1.0f, 0.0f);

// Move to rastering position
gl.glRasterPos2f(textPosx, textPosy);

// convert text to bitmap and tell what string to put
glut.glutBitmapString(GLUT.BITMAP_HELVETICA_18, "ERRORS");

最佳答案

glutBitmapString 以 2D 形式绘制文本。 2D 文本大小基于字体大小。因此,如果您将字体大小设置为 18(如本例所示),那么无论您将窗口设置多大或放大到多大程度,屏幕上的字体大小都将是标准的 18 pt。 Java问题。 Java实际上并没有绘制任何东西。一切都是由 OpenGL native 库绘制的,这些库是用 C++ 编写的,因此 C++ 中的内容与 Java 中的完全相同。

有两种方法可以解决这个问题。一种是在放大或缩小时更改文本的字体大小。这会有点尴尬,而且可能很难做到正确。在我看来,更好的选择是简单地使用 3D 文本。在 JOGL 中,您使用 TextRenderer 对象来绘制 3D 文本。

在你的 init 方法中创建一个全局变量,如下所示:

textr = new TextRenderer(new Font("SansSerif", Font.PLAIN, 18));

显然,将字体设置更改为您喜欢的任何内容。然后在你的显示循环中:

textr.setColor(Color.GREEN);
textr.begin3DRendering();
textr.draw3D("ERRORS", xLocation, yLocation, zLocation, scale);
textr.end3DRendering();

就我个人而言,我更喜欢使用大字体,然后将其缩小一些,这样,当您放大时,它就不会出现像素化。

此外,与 2D 文本不同,3D 文本不会始终面向屏幕。您必须手动执行此操作。这取决于相机的设置方式,但如果您使用基本旋转来移动相机,通常您只需取消 3D 文本对象上的这些旋转即可使其面向相机。

对于 x、y 和 z 位置,这些位置是当前对象内的位置(局部坐标)。将 beginRendering() 到 endRendering() 视为具有自己的本地坐标系的一个对象。通常,我更喜欢在 0, 0, 0 局部坐标处绘制文本,然后将整个对象移动到正确的位置。这样旋转就更容易理解。

关于java - JOGL 过剩文本不随窗口和基元调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11862729/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com