用 Java3D 写游戏

用 Java3D 写游戏2009-03-2413:26:51|  分类: Java3D先介绍下相关的技术吧Java3D 作为SUN公司较早推出的一项3D技术,是一种高度封装的API,构建在OpenGL和Direct3D之上,可以说是最有名的Java的3D技术。由于种种原因(A

大家好,又见面了,我是你们的朋友全栈君。

2009-03-24 13:26:51|  分类: Java3D



用 Java3D 写游戏

用 Java3D 写游戏

先介绍下相关的技术吧


Java3D 
作为 SUN 公司较早推出的一项 3D 技术,是一种高度封装的 API,构建在 OpenGL 和 Direct3D 之上,可以说是最有名的 Java 的 3D 技术。
由于种种原因(API 设计,面向的用户不明确),Java3D 一直没有办法流行。


LWJGL (http://new.lwjgl.org/index.php) 
全名为 Light Weight Java Game Library。
作为一个非官方的对 Java 游戏的全面解决方案,LWJGL 将游戏图形(OpenGL)、音效(Openal)、控制输入集合为一,以成为 Java 界的 DirectX (不是 Direct3D )而努力。
其在图形方面采用了 OpenGL 的 Java 绑定,其函数与 C 语言版的完全相同,所以对于习惯 OpenGL 编程的程序员来说比较友好。
目前有大量的 Java 游戏和游戏引擎是基于 LWJGL 的,它可以说是 Java 游戏社区最广为被使用的函数库之一。


JOGL (https://jogl.dev.java.net/) 
JOGL 是 Java 对 OpenGL 的一个绑定,或者说是 OpenGL 接口的 Java 实现,它是由 SUN 支持的。
其语法与 OpenGL 完全相同,API 也紧跟随着 OpenGLl 的版本进行更新,而 Nehe 的 OpenGL 范例程序大多数都有 JOGL 版本。
去年 JOGLl 正式通过 JCP 审核成为 JSR231,是 LWJGL 的主要竞争者。
值得一提的是,JOGL 项目的领导者 Ken Russell 曾经声明并不希望 JOGL 成为 jre 的一部分,因为他认为这样会使 JOGLl 的更新周期与 jre 相同,从而变得过于缓慢。
Ken Russell 目前全力工作在新的 Java Plug-in 的开发上,而 OpenGL 的 API 也没有进行更改,所以现在的JOGL 版本将持续较长的一段时间。


JOAL (https://joal.dev.java.net/)
Java 对 Openal 的一个绑定,是 Java 音效的一个解决方案。


Jinput (https://jinput.dev.java.net/)
Java 对非标准输入设备(游戏手柄,操纵杆)的解决方案。 


JMonkeyEngine (http://www.jmonkeyengine.com/) 
JMonkeyEngine 是一个开源 Java 游戏引擎,对底层高度封装,经过4年的开发,在去年的10月终于发布了1.0版本。
在2007的 Javaone 会议上发布了相当震撼的演示视频,从而广受关注,据说会场的许多屏幕特效也是由它完成的。
在底层,JMonkeyEngine 采用了 LWJGL,而 JOGL 可能会在2.0版本中得到支持。
去年著名的网络游戏公司 NCSoft(天堂系列,激战,英雄城市,Tabula Rasa 等游戏的开发商)将JMonkeyEngine 的三位主要开发人员招入麾下,也许不久的将来我们就可以看到这一引擎的商业版本。
值得一提的是,在任职 NCSoft 之后,引擎的主要开发者声称现在有了更多的时间进行游戏引擎开源版本的开发,而目前 JMonkeyEngine 的开发速度也确实大幅提升,2.0版本可能在08年稍晚一些时候就会发布。
此外,由 SUN 开发的 Project Wonderland 不久前宣布将把其渲染引擎由 Java3D 转为 JMonkeyEngine,使得 JMonkeyEngine 进一步受到广泛关注。


Project Darkstar(http://www.projectdarkstar.com/) 
目前 Project Darkstar 为0.95版,是 SUN 专门针对网络游戏的方面的应用所开发的。
这个项目主要致力于解决大型游戏服务器的分布式应用问题,个人感觉类似于网络游戏应用中的 J2ee。
对于普通游戏的网络传输,Project Darkstar 也给出了自己的解决方案。
但是不少人认为 Darkstar 并不致力于简化普通游戏的网络应用,因为这个项目主要是对大型网络游戏服务器的分布式应用进行解决,从而促进 SUN 自己生产的服务器的销售。
当然我并没有真正使用或研究过它,只是道听途说,很有可能有错误。


Project Wonderland (https://lg3d-wonderland.dev.java.net/index.html) 
SUN 开发的一个 3D 虚拟世界构建工具,SUN 使用这个工程制造了一个虚拟工作环境 MPK20。
物理上处于不同大陆的人们在这个虚拟世界中可以在一间屋子里协同工作,这个项目的演示视频非常不错,建议去它的主页看一下。


目前 LWJGL、JOGL 都发展得很不错。
JOGL 作为一种 OpenGL 的 Java 封装,有很好的跨平台性,能够做到 write once,run anywhere。
并且目前有数个项目基于 JOGLl 和 LWJGL。
下面是 JOGL 的相关项目



用 Java3D 写游戏


JMonkeyEngine 从官方的资料来看很强大,目前我还没有对其进行研究。下面是其截图

用 Java3D 写游戏




Java 作为 3D 游戏的开发语言,有明显的优点和缺点。
优点包括:
1. 语言简单,平台支持完整,开发效率高。
2. 跨平台。
3. 良好的网络和分布式特性

缺点主要包括:
1. Java 的执行效率比 C 语言低(通常情况下 Java 不会比 C++ 慢多少)。
2. 目前主流的游戏开发相关资源全部是以 C 语言为核心的。


个人认为由于目前大趋势是向着网络化,分布式的方向发展,加上硬件性能已经极大提升。
Java 或者类似于 Java 的语言代替 C 语言成为未来游戏开发的主流语言将不可避免。
因为开发效率和开发成本始终是企业需要考虑的问题。
C 语言在开发效率上显然比 Java 低,但目前由于有大量与 C 语言相关的资料,因此企业用 C 语言的开发成本也相对的低。
不过这种情况将随着 Java 等语言的应用而逐渐改观。
关于 Java 执行效率的问题一直是争论的焦点,但这一问题并不是像很多人想象的那么严重。
首先 Java 的执行机制已经和10年前大不相同(也许很多人还认为是解释执行),现在采用的 JIT 方式,其执行成本主要是第一次运行时的编译成本。
由于 CPU 的速度非常的快,而且会越来越快,这个编译成本将越来越低。
并且当第二次执行到相应的类时,由于缓存的存在,并不会引起任何开销。
换句话说,除了第一次要编译,从第二次执行开始 Java 的性能至少应该和 C 语言接近(不能完全相同,面向对象和垃圾回收还有一定开销)。
这里提到了垃圾回收,现在垃圾回收的算法性能也大幅度的提高,垃圾回收的时候已经完全感觉不到任何性能的影响。
事实现在很多人的电脑已经可以边玩游戏,边开QQ,边看电影,边听音乐。
垃圾回收和编译占有的 CPU 时间,难道会比这些应用占用的时间更多吗?


关于 3D 部分的性能,C 语言和 Java 是完全一样的。
Java 在调用 3D 时,都是通过本地调用去调用显卡的功能。这一点和C语言是完全相同的。
也就是 C 语言和 Java 语言调用的显卡功能接口是同一个接口。
目前的 3D 游戏都是用硬件加速的,换句话说除了调用者的区别,剩下的事情全部是由显卡完成的。
同样的一块显卡,做同样的事情,不会有两种效率。
题外话,现在的显卡真是太强大了,显存越来越多,速度越来越快,集成的功能越来越多,完全是一块小型化的专门处理图形的电脑。
目前针对图形显卡的编程过程,基本上就是把指令全部传给图形显卡,剩下的事情图形显卡全部搞定。
OpenGL 着色语言就是一种靠显卡解释执行的脚本语言。看清楚没有?解释执行的脚本语言,按说效率比 C 和 Java 语言差远了。
但是这个脚本语言是传到显卡上面去执行的,显卡上面有专门的解释程序(硬件级别的),算起来飞快。
另外人眼是视觉极限的,当突破这个视觉极限之后,再快的帧数都是浪费。
不久的将来(也许就是1-2年),显卡的实时渲染达到 CG 动画的水平将不是问题。
最近用电脑玩生化危机4,由于显卡比较新,居然出现了CG动画的显示效果比游戏画面差很多的情况(显示器分辨率达到1920×1080,CG动画的分辨率低于这个水平,因此马赛克效应很明显)。


C 语言成为主流的编程语言,不是由于 C 语言比汇编更快,而是因为 C 语言比汇编更方便。
C 语言作为 3D 游戏的主流编程语言,其被淘汰也只是一个时间问题。
如果下一代的游戏机或者图形显卡直接支持 Java 或者 Python 等语言,C 语言的淘汰还可能提前。
不用怀疑这种情况的可能性,OpenGL 着色语言就是一种硬件支持的脚本语言。下图是 JOGL 利用 NVIDIA 的 CG 技术进行 3D 渲染的一个效果。

用 Java3D 写游戏

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141444.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)
blank

相关推荐

  • allocatememory(an out of memory)

    仅作为记录,大佬请跳过。仅需减小batchsize展示:即可运行。注博主的这个程序减小batchsize就行了,可能不同的博友们的程序不一样,也有的大佬博主使用不计算梯度或释放内存的方式不计算梯度——传送门withtorch.no_grad()释放内存——传送门ifhasattr(torch.cuda,’empty_cache’): torch.cuda.empty_cache()…

  • 什么是数据治理?什么是数据安全治理?两者关系如何?[通俗易懂]

    什么是数据治理?什么是数据安全治理?两者关系如何?[通俗易懂]企业信息化建设是随着企业战略、业务形态、预算等多个方面不断迭代及变化的,所以在建设过程中难免出现阶段鸿沟,跨阶段整合难的现象,当企业以数据为中心的战略考量时,就需要通过数据治理方法对以往问题纠偏,对未来形态建设。本文通过理清数据治理与数据安全治理关系,寄希望帮助读者对两者有所清晰的认识。一、数据治理与数据安全治理关系数据治理简单来讲是通过对数据的梳理整合,利用数据驱动业务,实现企业增值。…

  • gis如何无缝拼接两张图_opencv图像拼接

    gis如何无缝拼接两张图_opencv图像拼接intMyVideoStitcher::Prepare(vector<Mat>&src){ cv::setBreakOnError(true); intnum_images=static_cast<int>(src.size()); if(num_images<2) { printf(“Needmoreimages”); returnSTITCH_CONFIG_ERROR; } intcudaStatus=testG.

  • ubuntu 7.04 ‘s sources list

    ubuntu 7.04 ‘s sources list

  • VS2013 密钥 – 所有版本

    VS2013 密钥 – 所有版本VS2013密钥–所有版本VisualStudioUltimate2013KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9VisualStudioPremium2013KEY(密钥):FBJVC-3CMTX-D8DVP-RTQCT-92494VisualStudioProfessional2013KEY(密钥):XDM3T-W3T3V…

  • Java API 1.8 中文版 免费下载

    Java API 1.8 中文版 免费下载JavaAPI1.8中文版免费下载无意中淘到的希望对大家有帮助!在这里免费分享给大家百度云盘链接提取码y6wo

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号