基于图像 CSG 的库 OpenCSG

码农软件 · 软件分类 · 图形/图像处理 · 2019-09-09 08:14:53

软件介绍

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

什么是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为参数的深度函数来隐藏数组中的基元。

本文地址:https://codercto.com/soft/d/14197.html

Practical Vim, Second Edition

Practical Vim, Second Edition

Drew Neil / The Pragmatic Bookshelf / 2015-10-31 / USD 29.00

Vim is a fast and efficient text editor that will make you a faster and more efficient developer. It’s available on almost every OS, and if you master the techniques in this book, you’ll never need an......一起来看看 《Practical Vim, Second Edition》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具