快速业务通道

Commons Collections僥楼永芝?匯? - 園殻秘壇利

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
个 GLPbuffer:

if(!GLDrawableFactory.getFactory().canCreateGLPbuffer()) //Disable the using of OpenGL or at least by way of a Pbuffer

这个检查很重要,因为 pbuffer 不一定在所有计算机上受支持,而它要使用硬件来加快渲染速度。该检查查看计算机上的显卡是否支持 pbuffer,但从我们在不同实验机器上的测试来看,试图创建一个 GLPbuffer 有时会生成一条错误,即使该方法返回的是 true。既然这样,似 乎最好只试着创建 pbuffer 并捕获发生的所有异常。

现在渲染到 pbuffer,我们使用在缓冲区创建的上下文,并使它成为当前的。这确保随后的 OpenGL 命令将绘制到 pbuffer,而不是其他地 方。在此 OpenGL 渲染程序中,我们在渲染程序绘制方法开头调用上下文:

context.makeCurrent();

下一个任务是获取一个绘制使用的 GL 对象。直接使用 pbuffer 即可实现这一点,剩下的遵循常规 JOGL 语法。

GL gl = buf.getGL();

从 pbuffer 获取图形通过使用 JOGL 类 Screenshot 来完成,该类用于获取 OpenGL 应用程序的屏幕快照。不管名称如何,它只返回当前 OpenGL 可绘制区域而不是整个屏幕的图像。通过调用 Screenshot.readToBufferedImage(bufw,bufh),我们获取了当前 GL Drawable(我们的 pbuffer)的屏幕快照作为缓冲图像。另请注意,该 pbuffer 的上下文必须是当前的。现在我们有了缓冲图像,然后便可以使用 Java Graphics2D 来将图像绘制到屏幕了。

context.makeCurrent(); BufferedImage img = Screenshot.readToBufferedImage(bufw,bufh); context.release(); g.drawImage(img,0,0,null);

因为设计 3D-XplorMath-J 是为了使用 Java Graphics2D,所以最有用的部分是在项目中使用 pbuffer。既然能从 pbuffer 获取缓冲图像 ,那么在渲染程序外部就无需更改任何代码,只是要创建一个 OpenGL 渲染程序来进行 3D 绘制,而不是使用 Graphics2D 渲染程序。

集成GLPbuffer和Java Graphics2D(3)

时间:2011-07-20 Thaddeus Keenan Simo

速度考虑和一些解决方案

因为数学对象很复杂,所以渲染这些对象会非常慢,特别是在渲染一个曲面并对它进行实时渲染时。尽可能以多种方式旋转和查看数学对象 很大程度上是 3D-XplorMath 项目的目标,因此我们需要一种方法来提高实时渲染数学对象的效率。部分无效渲染归因于使用 pbuffer,但有 了 OpenGL 功能后,绘图仍然太慢。要缩短渲染时间,我们看一下 OpenGL 显示列表 以及它们的使用方式,并看看使用它们会达到怎样的速度 。

显示列表允许以优化形式存储 OpenGL 命令以便以后执行,这在存储将使用多次的几何形状和状态更改时特别有用,如旋转数学对象时。这 在本例中很有用,因为每次在绘制旋转对象时可以调用同一显示列表。既然这对组织代码很适用,那么它是否能按我们的需要提高速度呢?

显示列表由一个唯一的整数标识,这个整数是使用 gl.glGenList() 命令创建的,其中 gl 是一个 GL 类型的对象。接着我们使用列表标识 符和需要的模式创建一个新的列表。

displayListID = gl.glGenLists(1); // type int gl.glNewList(displayListID, GL.GL_COMPILE);

glNewList 后的 OpenGL 命令被添加到该列表中,当要存储在列表中的命令完整后,我们使用

gl.glEndList(); 来结束列表。

最后,在需要执行显示列表中的高速缓存代码时,使用列表的标识符调用该列表即可。

gl.glCallList(displayListID);

学会如何使用显示列表后,在了解如何将它添加到 3D OpenGL 渲染程序之前,还应该编写一个测试来看它是否真的提高了效率。以之前用 500 帧绘制 500 个球的测试程序为例,我们实现同样的测试,用额外的显示列表来存储绘制球的命令,并调用该列表将每个球绘制到屏幕。结 果我们发现速度大大提

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号