Java中最小的OpenGL示例

时间:2016-10-07 16:47:42

标签: java opengl

作为一名Java开发人员,我最近有过学习OpenGL的想法。我完全理解,Java并不是计算机图形学的最佳语言,但由于我只想学习基础知识和概念(而不是编写Minecraft 2),我认为它会做得很好。

我开始在google和github上搜索一些" hello worlds"使用JOGL(Java OpenGL)。我被极度侮辱,超过85%的那些"你好世界"有大约100-500行代码(我目前还不太了解),而且,几乎没有一行使用Maven / Gradle依赖,这导致我必须在设置库(包括本机)时遇到麻烦(使用Linux,不确定)如果这很重要的话。)

我真的在寻找一些简单的例子,比如只添加Maven / Gradle依赖,编写简单的JavaFX窗口,显示OpenGL球体,所以我可以专注于OpenGL而不是配置所有内容。

Android的例子很少,但我想在笔记本电脑上运行(更容易开发)。

我错过了什么吗?我应该在哪里寻找它?

2 个答案:

答案 0 :(得分:3)

  

我完全理解,Java不是计算机图形学的最佳语言

嗯,这取决于,每种语言都有它的优点和对比

例如,Java允许您非常快速地获得正在运行的程序,但是您没有像c / c ++那样完全控制内存。

编译并不需要时间,即使代码的某些部分充满错误也可以运行。

但是,与某些较新的jvm语言(例如kotlin,scala或groovy)相比,它会变得更加冗长。

  

我开始在google和github上搜索一些使用JOGL(Java OpenGL)的“hello worlds”。我被极度侮辱,超过85%的“你好世界”有大约100-500行代码

嗯,那是因为渲染并不像你想象的那么简单。

但是,如果你希望核心类非常紧凑,你可以通过将繁重的和手工的工作委托给util类来获得大量的样板代码,并获得一百行以下的hello三角形。

例如在mine的这个问候三角形中。你可以:

  • 避免在glWindow方法中对main进行多次默认调用

  • 将所有常量变量保存在静态类

  • 避免initDebug()

  • 减少了一半initBuffers()

  • 通过movind initProgram()将您的着色器程序初始化为utils

  

几乎没有人使用Maven / Gradle依赖,这导致我必须设置库(包括原生)的麻烦

我觉得你,我真的。

正因为如此,我在github上启动了两个组织,一个名为java-graphic的组件为API中性,另一个名为java-opengl-labs,用于与jogamp相关的所有内容,以解决一些主要问题。我们java开发人员,将我们所有的努力融合到一个统一的地方。

我希望还有大量现代教程,工具,库等等,所有这些都在Maven / Gradle依赖项下,只需点击一下,我就可以将所有内容设置好并准备好使用。

当我开始学习OpenGL时,情况要糟糕得多,我试图改变它,但这是一项巨大的努力。

有很多事情要做:

  • 编写新的对应工具(主要是助手和子弹)
  • 改进现有代码
  • 实施Maven / Gradle
  • 写作wikis
  • 改善渠道沟通
  • ...

如果您(或正在阅读的任何人)可以随时捐款,请不要犹豫,非常欢迎您:)

  

我真的在寻找一些简单的例子,比如只添加Maven / Gradle依赖,编写简单的JavaFX窗口,显示OpenGL球体,所以我可以专注于OpenGL而不是配置所有内容。

你得到的最简单,就是你把我联系起来的三角形。不幸的是它还没有Maven / Gradle依赖,但它只依赖纯粹的jogl。

  

Android的例子很少,但我想在笔记本电脑上运行(更容易开发)

由于你也提到了Android(以前也有点啰嗦),让我建议你看看Kotlin ......我最近开始深入研究它,与java相比它是一个全新的水平,我也写道一个小的hello triangle就像一个纯粹的风格练习

答案 1 :(得分:1)

尝试使用可用的源代码查看JogAmp wiki和演示。

JogAmp Wiki:http://jogamp.org/wiki/index.php/Main_Page

JogAmp演示:http://jogamp.org/jogl-demos/www/

我还建议阅读OpenGL Redbook,这将介绍很多核心的OpenGL概念,但它是针对OpenGL 1.1版制作的,仍然是一个很好的阅读,但有些做法会过时。

最后,我建议阅读OpenGL编程指南 - 第8版。它基本上像红皮书,但对于现代OpenGL。 Here's亚马逊上的链接

红皮书和OpenGL编程指南中的代码将使用伪代码或C / C ++,但Java和C / C ++之间的概念和API调用都是相同的。唯一的主要区别在于窗口创建,但这应该在JogAmp演示和维基中进行介绍。

编辑:我刚刚注意到第9版的“OpenGL编程指南”,您可能希望阅读它,第8版涵盖OpenGL 4.3,第9版涵盖4.5。

不幸的是,你找不到任何简单或琐碎的例子。学习OpenGL是一项非常大的工作,它不会在一夜之间发生。从长远来看,学习配置库以及OpenGL API的核心概念将对您有所帮助。