我正在制作一个小型 Java 游戏库,我想为更多面向 Java 的绘图制作绘图代码,而不是调用一些 C++ 方法来提取 API。无论如何,我担心它可能会比其他图形 API 慢。那么这会是一个不错的选择吗?另一个问题是我找不到有用的 OpenCL 教程(我需要先学习它),有人知道吗?
3 回答
OpenCL不是图形 API。它不是用来渲染的,而且它通常不能很好地完成它。
此外,OpenCL 并不比 OpenGL“更面向 Java”。它仍然是基于 C 的 API,因此您仍将“调用一些 C++ 方法来提取 API”。
好吧,OpenCL不是图形 API,而是可以使用您的显卡(或其他特定设备)进行非图形计算(GPGPU )的异构计算框架,类似于DirectCompute,OpenGL 中的计算着色器,CUDA等。它不是面向对象的方式,因为使用纯 C 接口。虽然您可以找到绑定(对于 java:JOCL)。
还; 您知道有几个很好的面向对象的 java 图形库可用。以 Jmonkey 引擎为例。
据我所知,如果您想要与显卡对话的快速图形,您必须通过 openGL*(与 openCL 不同,它是用于图形的)。所有的 java API 都是在幕后做的,像 LWJGL 这样的东西用一个非常薄的层来做,基本上只是将 OpenGL 的方法暴露给 Java:根本没有面向对象。其他人在用户没有意识到它的 OpenGL 的情况下这样做,这些往往是“场景图”类型的图形引擎,并且完全面向对象。
如果您想要创建对最终用户“感觉像 java”但在后台使用 OpenGL 的东西,我会从 LWJGL 之类的东西开始,然后在它之上构建。这就是 JMonkey 引擎所做的。
所有这些都是假设您在 3D 中工作,如果您在 2D 中工作,那么性能不太可能成为问题。
因此,要回答您关于完整的 java 图形解决方案是否是一个好主意的问题:它不会与图形卡对话,因此您将依靠 CPU 来完成工作;在 2D 中:这可能很好,它会更慢,但慢于非常快仍然非常快。在 3D 中:我怀疑你能否让它在任何现实场景中以实时速度工作。
*或directX,但你也会有同样的问题