王朝百科
分享
 
 
 

OpenCSG

王朝百科·作者佚名  2010-09-26  
宽屏版  字体: |||超大  

概述:

OpenCSG是一个基于图像CSG的库,CSG使用OpenGL渲染。OpenCSG使用c++编写,并支持Microsoft Windows或Linux操作系统下最先进的图形硬件。OpenCSG-1.2.0是最新的版本。

什么是CSG呢?CSG是Constructive Solid Geometry(构造实体几何)的缩写,它使用简单的3D图形来构造复杂图形。也就是说,通过附加或求差的方法可以进行图形的组合,那些不是由CSG操作产生的最基本的图形称之为primitives(基元),基元必须是实体,即基元必须要有明确的内部或者外部定义。通过构建,一个CSG也一定是实体。

基于图像的CSG渲染(深度缓冲区CSG渲染)是一个专用名词,它为几何边界未经过明确计算的CSG形状指定渲染算法,这种算法使用图形硬件的帧缓冲区设置,如深度缓存或模板缓存,来构建CSG形状。OpenCSG实现多种算法结合,其中就有goldfeather算法和SCS算法。

优点:

CSG是经常被用作在CAD/CAM应用程序中的基本建模技术。这里,基于图像的CSG是交互操作CSG形状的关键。由于OpenCSG对更复杂的图像渲染较为快速,所以它能有效地在这些应用中使用。

很久以前诸如PovRay这样的绘图工具就已经使用CSG进行图像建模了。尽管这种绘图工具的互动建模工具包恰恰忽略CSG命令,但OpenCSG代表了这种应用软件的一种有价值的附加品。

总的来说,到目前为止CSG渲染已经几乎没有再用于交互式应用程序,因为所需的算法复杂且容易出错。我们希望通过提供一个免费的库,这个库是易于使用、快速灵活的,这将使它比目前更为主流。

先决条件:

OpenCSG的库要求在OpenGL中也支持PBuffer或帧缓冲对象的图形硬件。在PBuffers条件下,如果渲染到纹理的相关设备也被支持这将是有利的,如今OpenCSG使用RenderTexture类作为PBuffer库。

一直以来,PBuffers已被广泛支持。NVidia至少自 Radeon 系列就开始支持PBuffers,随后是Riva TNT 和 ATI;其他供应商生产的图形硬件似乎并不支持PBuffers。因此,如果您不熟悉图形硬件并且运气较差的话可能就无法使用OpenCSG来运行程序。在Linux条件下,您可能需要选择同时支持OpenGL软件渲染与PBuffers。

帧缓冲对象是OpenGL的一个较新的扩展。它们更易于用作开发,现在(2010年)已经成熟。它们也是OpenGL3.0的一部分、从1.2.0OpenCSG开始在默认情况下使用OpenCSG,在较旧的版本中默认使用PBuffers。

对于OpenGL扩展检查,OpenCSG使用OpenGL扩展甲等库GLEW。

OpenCSG写在c++中,使用命名空间,并需要STL。在Windows下我不希望主要编译器不兼容。MSVC6, VC2003 .net和Dev-C++ 5 beta都提供相应的工作区。在Linux环境下,您应该使用gcc3或者更高版本。由于该编译器并不能处理必须在内部使用的std::map实现,致使gcc 2.95.x不再有效。

要运行好OpenCSG,您应该有高填充率的图形硬件。NVidia 图形硬件自从 GeForce 和 ATI Radeon 以后满足了以上要求。在OpenCSG::OcclusionQuery选项显然需要封闭查询,这个选项功能是从Radeon 9x00(x>= 5)和GeForce3(注意,GeForce4MX的数量为GeForce2!)显卡芯片出现以后才开始支持的。

OpenCSG 已成功地在英特尔和AMD的硬件上使用 Radeon HD 4670、 GeForce 8 x 00、GeForceFX 6800、5600 GeForceFX,Radeon 9700、 GeForce3、GeForce4MX 和 TNT2图形硬件运行(越往后越慢)。

在Radeon9000上,OpenCSG会在除了标准Goldfeather渲染路径以外的其他任何地方产生渲染错误,这一情况曾广为人知,这是否是驱动器的问题并不很清楚。我没有在NVidia或ATI/AMD以外的图形硬件上运行OpenCSG的经验。

使用情况:

OpenCSG的接口非常容易使用。只有一个叫做OpenCSG::Primitive的抽象类。A基元对象包含一个表示是附加还是求差的属性操作。使用OpenCSG可以通过执行render()方法来创建一个派生自具体基元的类。

如今实现CSG渲染,有一个将std::vector<Primitive*> 作为参数的函数OpenCSG::render()。渲染函数求由基元组得出的CSG表达式的值并使用CSG的固有值来初始化深度缓冲区。颜色缓冲区仍然没有改变,此后您必须使用一个以GL_EQUAL为参数的深度函数来隐藏数组中的基元。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格&#8203;十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有