Commons Collections僥楼永芝?匯? - 園殻秘壇利
个 GLPbuffer:
这个检查很重要,因为 pbuffer 不一定在所有计算机上受支持,而它要使用硬件来加快渲染速度。该检查查看计算机上的显卡是否支持 pbuffer,但从我们在不同实验机器上的测试来看,试图创建一个 GLPbuffer 有时会生成一条错误,即使该方法返回的是 true。既然这样,似 乎最好只试着创建 pbuffer 并捕获发生的所有异常。 现在渲染到 pbuffer,我们使用在缓冲区创建的上下文,并使它成为当前的。这确保随后的 OpenGL 命令将绘制到 pbuffer,而不是其他地 方。在此 OpenGL 渲染程序中,我们在渲染程序绘制方法开头调用上下文:
下一个任务是获取一个绘制使用的 GL 对象。直接使用 pbuffer 即可实现这一点,剩下的遵循常规 JOGL 语法。
从 pbuffer 获取图形通过使用 JOGL 类 Screenshot 来完成,该类用于获取 OpenGL 应用程序的屏幕快照。不管名称如何,它只返回当前 OpenGL 可绘制区域而不是整个屏幕的图像。通过调用 Screenshot.readToBufferedImage(bufw,bufh),我们获取了当前 GL Drawable(我们的 pbuffer)的屏幕快照作为缓冲图像。另请注意,该 pbuffer 的上下文必须是当前的。现在我们有了缓冲图像,然后便可以使用 Java Graphics2D 来将图像绘制到屏幕了。
因为设计 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 类型的对象。接着我们使用列表标识 符和需要的模式创建一个新的列表。
glNewList 后的 OpenGL 命令被添加到该列表中,当要存储在列表中的命令完整后,我们使用
最后,在需要执行显示列表中的高速缓存代码时,使用列表的标识符调用该列表即可。
学会如何使用显示列表后,在了解如何将它添加到 3D OpenGL 渲染程序之前,还应该编写一个测试来看它是否真的提高了效率。以之前用 500 帧绘制 500 个球的测试程序为例,我们实现同样的测试,用额外的显示列表来存储绘制球的命令,并调用该列表将每个球绘制到屏幕。结 果我们发现速度大大提 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |