使用OpenGL将文本添加到屏幕

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

在此处输入图像描述

问题是,我想在罗盘上添加文本(度),并希望用纯OpenGl方法来实现。 我找到了TextRenderer类,但无法下载并使用它。 如何在我的Java项目中使用TextRenderer类? 如果除了TextRenderer之外还有其他任何添加文本的方式,那么我很乐意听到它。

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

我想将文本(度)添加到指南针,并希望使用纯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几何和Tesselation着色器的组合。 使用OpenGL基元绘制字形作为细分填充轮廓的一个巨大缺点是,如果使用的帧缓冲区没有多重采样格式(全屏抗锯齿),它们将看起来非常脏(由于别名)

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

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

归结为

  • 清脆的外观
  • 记忆效率高
  • 计算效率

→选择2

经过一些研究,我已经找到了如何安装并正确使用它。

首先,访问该网站并为您的操作系统下载适当版本的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

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