2

目前,我正在开发一个 OpenGL 项目,这是我所做的屏幕截图

在此处输入图像描述

问题是,我想将文本(度数)添加到指南针,并希望使用纯 OpenGl 方法来做到这一点。但是,我发现TextRenderer类无法下载并使用它。如何在我的 Java 项目中使用 TextRenderer 类?如果除了 TextRenderer 之外还有其他添加文本的方法,我很想听听。

我的第二个也是最重要的问题是关于将 swing/awt 方法与 OpenGL 合并并使用多个对象。我只使用一个 GL2 对象编写了程序并且运行良好,在同一帧上使用多个 openGL 对象是否明智?此外,一起使用swing方法和openGL方法是个好主意吗?

4

2 回答 2

3

我想将文本(度数)添加到指南针,并希望使用纯 OpenGl 方法来做到这一点。

除非你能忍受看起来不太好看的中心笔画字体,否则你别无选择,只能使用其他库或 API 的帮助。

理论上OpenGL可以与OpenVG协同工作,但是到目前为止对OpenVG的整体支持很差,OpenGL的互操作性更差。但是假设你有一个正常工作的 OpenVG——OpenGL 互操作性工作,那么 OpenVG 就是要走的路。

实际上,您必须有所不同。一个非常有成效的方法是使用字体渲染器库(如 FreeType)和一些布局引擎(如 Pango)来生成要渲染的文本的轮廓笔划列表,然后可以使用 NVidia 的一些扩展直接渲染(http://www.opengl.org/registry/specs/NV/path_rendering.txt仅在最新的 NVidia GPU 上可用)或手动镶嵌成三角形,无论是在 CPU 上还是通过 GPU 几何和镶嵌着色器的组合。使用 OpenGL 基元将字形绘制为镶嵌填充轮廓的一个巨大缺点是,如果使用的帧缓冲区没有多重采样格式(全屏抗锯齿),它们看起来会很脏(由于锯齿)

下一个最好的事情是将文本渲染为图像并将其复制到 GPU 并通过渲染纹理四边形将其覆盖在场景上。您应该在渲染四边形时已经应用所有文本转换,以便字体提示系统可以在光栅化之前对转换后的字形进行适当的调整。

另一种方法是使用纹理映射字体。到目前为止,我自己实现了两个 TMF 引擎,但我个人建议现在不要使用这种方法,因为 TMF 是资源消耗。一个 200kiB 的 TTF 字体可以炸毁几兆字节的纹理数据。也许有一天我或其他人用 OpenCL、CUDA 或 Compute Shader 实现了一个 TrueType 或 OpenType 渲染引擎,但在那之前用 OpenGL 渲染文本是一件肮脏的事情。

归结为

  • 清脆的外观
  • 内存高效
  • 计算效率高

→ 选择 2

于 2013-06-20T09:57:21.830 回答
0

在做了一些研究之后,我想出了如何安装和正确使用它。

首先,如果您没有任何库,请访问该网站并为您的操作系统下载合适的 jogl 版本:http: //jogamp.org/deployment/autobuilds/master/jogl-b1011-2013-06-19_05-41- 38/

然后,下载该 jar 文件并将其添加到您的用户库中。 http://www.java2s.com/Code/Jar/j/Downloadjogl20jar.htm

该文件包含 TextRenderer 类。

如果您不知道如何制作,请使用该链接: http ://riccardotramma.com/2011/04/setup-eclipse-to-develop-opengl-glut-apps-in-java-cc-on-windows-mac /

然后,按照说明操作:http: //download.java.net/media/jogl/jogl-2.x-docs/com/sun/opengl/util/awt/TextRenderer.html

它非常易于使用,我完美地将数字添加到我的指南针中。但是,据我所知,效率不高。

于 2013-06-21T11:15:13.487 回答