作为一名Java开发人员,我最近有过学习OpenGL的想法。我完全理解,Java并不是计算机图形学的最佳语言,但由于我只想学习基础知识和概念(而不是编写Minecraft 2),我认为它会做得很好。
我开始在google和github上搜索一些" hello worlds"使用JOGL(Java OpenGL)。我被极度侮辱,超过85%的那些"你好世界"有大约100-500行代码(我目前还不太了解),而且,几乎没有一行使用Maven / Gradle依赖,这导致我必须在设置库(包括本机)时遇到麻烦(使用Linux,不确定)如果这很重要的话。)
我真的在寻找一些简单的例子,比如只添加Maven / Gradle依赖,编写简单的JavaFX窗口,显示OpenGL球体,所以我可以专注于OpenGL而不是配置所有内容。
Android的例子很少,但我想在笔记本电脑上运行(更容易开发)。
我错过了什么吗?我应该在哪里寻找它?
答案 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依赖,编写简单的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的核心概念将对您有所帮助。