LWJGL可以和Graphics2D一起使用吗?

时间:2012-12-23 04:34:53

标签: java opengl rendering lwjgl graphics2d

我的游戏目前使用Graphics2D进行大量的绘图和文本渲染,但我想使用像GL11.glBegin(...)这样的LWJGL中的一些函数来制作自定义形状,并且可能会使用一些很酷的纹理函数作为好。

有可能这样做吗?如果是这样,我需要从LWJGL添加什么代码才能使其功能与我已有的功能一起工作?

1 个答案:

答案 0 :(得分:1)

可以这样做,但这不是一种简单的方法.Graphics2D是Java绘图API的一部分,而LWJGL只是OpenGL API的Java包装器。我的意思是在一天结束时OpenGL期望输入是在GPU上组装成三角形的顶点和索引。我已经编写了几个工具来过去将矢量图形转换为多边形,所以这里基本上可以做到:

1)记录Graphics2D将路径形状转换为数据结构。然后将它们转换为聚合轮廓线必须是连续的点集(数组)。例如,如果你的2d形状由2条直线边和2条贝塞尔线组成您可以按原样记录直线的起点/终点,并使用this方法将贝塞尔曲线分解为线段(直线)。为什么您需要全部为段?因为稍后,您将要对这些多边形进行三角测量。

2)下一部分是对你在前一阶段创建的多边形集进行三角测量。这里你可以使用许多三角形库中的一个: Poly2Tri - 是一个强大的lib,也有一个Java端口,可以对凸面和凹面多边形集进行三角测量。还可以处理漏洞。 如果您使用旧的(固定的)OpenGL管道,另一个选择是使用Glu Tessellator。在这种情况下,您甚至不需要寻找任何外部库,因为glu是LWJGL API的一部分。

基本上这就是你所需要的。但这确实是一个非常原始的设置。例如,在GPU上渲染2D图形的一个广泛传播的问题是共面的表面。所以如果你有深度缓冲和一对您要获得的共面平面"Z-fighting" artifacts。要解决此问题,您应该禁用深度写入(这不太可能是您想要在3d引擎中执行的操作),或者使用模板测试(有更多深度攻击) / color写乒乓,但它很复杂。)但另一个更“几何的方法”选项是在重叠多边形之前进行多边形裁剪操作,然后再对它们进行三角测量。这里你可以使用像Polygon Clipper这样的库。

因此,正如您所看到的,您想要做的事情不是几分钟,而且在性能,几何和uv映射问题等方面存在更多挑战。但它绝对可行。