OpenCSG

基于图像 CSG 的库
授权协议 GPL
开发语言 C/C++
所属分类 程序开发、 图形/图像处理
软件类型 开源软件
地区 不详
投 递 者 常培
操作系统 Windows
开源组织
适用人群 未知
 软件概览

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

  • 1.下载opencsg,glut(3.7.6) 2.glut解压后把 dll lib h三个文件分别放到vs对应的include lib和系统system32下面,如果64位系统,还要将glut32.dll放到wow文件夹下(系统的32.64转换作用) 3.依次生成opencsg里的三个项目,把例子项目作为启动项目运行即可。

 相关资料
  • 我试图开发一个应用程序,使用Tesseract从手机摄像头拍摄的文件中识别文本。为了更好的识别,我使用OpenCV对图像进行预处理,使用高斯模糊和阈值方法进行二值化,但结果很糟糕。 我可以使用哪些其他过滤器来使图像对Tesseract更具可读性?

  • 本文向大家介绍PHP基于GD库的图像处理方法小结,包括了PHP基于GD库的图像处理方法小结的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP基于GD库的图像处理方法。分享给大家供大家参考,具体如下: gd图像处理技术 extension=php_gd2.dll 创建画布 画布,一种资源型数据,可操作的图像资源 创建画布(新建) imageCreate(width,height) //创

  • 这是我得到的错误消息

  • 我正在尝试重新创建在原始出版物“用于图像识别的深度残差学习”中所做的对ImageNet数据集的数据预处理。正如他们的论文第3.4节所说:“我们对ImageNet的实现遵循了[21,41]中的实践。图像的大小被调整,其短边在[256,480]中随机采样以进行缩放[41]。从图像或其水平翻转中随机采样224×224裁剪,减去每个像素的平均值[21]。使用了[21]中的标准颜色增强。” 我已经弄清楚了随

  • 我试图设计和训练一个卷积神经网络来识别图像中的圆形细胞。我在完整图像的“切口”上训练它,这些图像中间要么有一个圆(正训练样本),要么没有(负训练样本)。 中间有一个圆圈的图像示例(热图颜色不稳定,图像均为灰度):http://imgur.com/a/6q8LZ 我希望网络输出是一个二进制位图,而不仅仅是对两种类型的输入图像(圆形或不在中间)进行分类,如果输入图像中没有圆形,则该位图是一个统一的值(

  • 我有一个有多个分离的圆形区域的噪声图像是模糊的。具有六个感兴趣区域(ROI)的这种图像的示例是: 在Matlab中使用和给定的阈值很容易用全局阈值分割图像。但是我想相对于每个ROI(而不是整个图像)的最大像素值设置一个固定阈值(例如54%),来分割每个ROI。 我有一组不同ROI大小和位置的图像,我需要基于区域阈值分割来分割它们,因此我也无法使用Matlab交互工具来选择它们。 谢谢