查看: 15578|回复: 38

开源工程osgModeling发布,欢迎大家试用

[复制链接]

该用户从未签到

发表于 2008-11-5 17:07:13 | 显示全部楼层 |阅读模式
osgModeling是由我开发的专注于几何模型构建的OpenSceneGraph辅助库,现在已经作为一款独立的开源API正式发布,遵循GNU LGPL协议。地址是:
http://code.google.com/p/osgmodeling/
目前发布的第一个版本是osgModeling 0.1.0,包括Windows版本和Linux版本,请使用CMake进行程序的编译生成工作。本开发库依赖于OSG 2.6以上的版本,在Windows XP,VS9以及Arch Linux 0.72,GCC 4.0下测试通过。

也欢迎大家使用SVN获取最新更新的源代码:
svn checkout http://osgmodeling.googlecode.com/svn/trunk osgmodeling-read-only

osgModeling的目的是辅助用户在OSG环境下快速构建各种参数曲线和曲面模型,并通过模型BSP树的构建,实现几何布尔运算等一系列高级建模功能。它的存在不会对您的实时渲染流程造成任何不良的影响,因此使用和弃用都十分简单。
0.1.0版本的主要特性如下:
  • 支持4种参数曲线的构建:K次贝赛尔(Bezier)曲线,K次NURBS曲线,三维螺旋线,以及用户自定义曲线。
  • 支持6种参数曲面的构建:MxN次贝赛尔曲面,MxN次NURBS曲面,挤压成型(类似于3dsmax中的Extrude),旋转成型(类似于Lathe,Revolve),放样成型(类似于Loft),以及用户自定义曲面。
  • 支持自动生成曲面的法线和纹理坐标(用户自定义曲面除外)。
  • 支持自定义曲线/曲面生成算法,从而轻松扩展现有的建模功能。
  • 所有的曲面类均继承自osg::Geometry,因此可以无障碍地获取和修改顶点、法线及纹理坐标,并加载到Geode节点中。
  • 支持模型的空间二分树(BSP)构建,模型可以是osgModeling的预设曲面或者从osg::Geometry实例转换。
  • 支持基于BSP的几何体布尔运算(交/并/差),计算结果可以保存到osg::Geometry实例中,以获取其顶点信息并予以保存。


这个库刚刚发布,测试工作也远不全面,错误和不完善的地方恐怕要数以万计。不过还是希望大家多多关注我的工作,万分期待有兴趣的朋友加入osgModeling的开发组,提交您认为更合理的代码,或者提出您的建议和改进需求,批评,抱怨和鄙夷也十分欢迎——因为这都是一个不成熟的工程所亟待的。

下面是工程示例代码的部分效果截图:
1、使用挤压成型(osgModeling:: Extrude)生成的五角星。


2、使用贝赛尔曲线(osgModeling:: BezierCurve)、旋转成型(osgModeling:: Lathe)生成的酒瓶。


3、使用放样成型(osgModeling:: Loft)生成的窗帘。


4、使用贝赛尔曲面(osgModeling:: BezierSurface)生成的茶壶。注意,由于继承自Geometry类,这个茶壶的顶点坐标等信息都是可知的,而且其细节层次可以十分轻松地调节,未来的灵活性将无疑强过GLU库的类似实现。


5、使用NURBS曲面(osgModeling:: NurbsSurface)生成标准球体。这里我特意应用了世界地图,并把中国摆在了显眼的地方,虽然不知道这是不是国人在OSG方面的第一个NodeKits工程~~


6、使用BSP树(osgModeling:: BspTree)计算空间结构,并使用布尔工具(osgModeling:: BoolOperator)得到计算结果。这两个类的效率和结果的网格化目前仍十分不理想,不过有兴趣扩展OSG的场景空间结构的朋友不妨参考一下其中的实现代码。


[ 本帖最后由 array 于 2008-11-5 17:15 编辑 ]

该用户从未签到

发表于 2008-11-5 23:21:47 | 显示全部楼层

回复 楼主 的帖子

学习

该用户从未签到

发表于 2008-11-6 01:43:26 | 显示全部楼层
一个比较强大的Modeling工程,,,值得好好学习一下,有时间也帮array测试测试,哈哈~~~~~~~

该用户从未签到

 楼主| 发表于 2008-11-6 08:50:31 | 显示全部楼层
为啥都“学习”啊,这就是咱自家的工程嘛~~感兴趣的朋友一定要加入进来~~

如果您对建模方面有一些经验,或者在使用过程中觉得osg应当具备哪些功能,都可以告诉我。如果不是很复杂的话,我会设法添加到osgModeling库中,并通过不断发布新版本来扩大这个库在osg中的影响力~~最终目的是使其成为OSG核心库的一部分,就像即将加入OSG核心的osgAnimation(原名animtk,它将替代第三方的osgCal工程)一样

该用户从未签到

发表于 2008-11-6 11:55:53 | 显示全部楼层


  现在是有心无力啊,呵呵,,我现在也在完善一个地形方面的系统(VRTerrain),,,,,适当的时候我也会把它开源出来的,,,虽然OSG现在有自己的模块了,,,估计很多人都不大去用它~~~~

  osgModeling,,国产开源工程,,支持国产,哈哈哈~~~~~~~

该用户从未签到

发表于 2008-11-6 14:30:05 | 显示全部楼层
支持一下

该用户从未签到

发表于 2008-11-6 15:06:59 | 显示全部楼层
强烈支持!

该用户从未签到

发表于 2008-11-6 16:30:37 | 显示全部楼层
CMake的设置截图
cmake.jpg
OSG 2.3.7 + Visual Studio2005 SP1编译结果
vs2005.jpg

该用户从未签到

发表于 2008-11-6 16:35:00 | 显示全部楼层
附加包含目录: C:\osgModeling\include;C:\OSG\include;
预处理器定义:WIN32,_WINDOWS,_DEBUG,_SCL_SECURE_NO_WARNINGS,_CRT_SECURE_NO_DEPRECATE,OSGMODELING_LIBRARY,"CMAKE_INTDIR=\"Debug\"",osgModeling_EXPORTS
链接器输入:$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  osg.lib osgUtil.lib osgViewer.lib osgText.lib osgDB.lib osgGA.lib OpenThreads.lib

看看有无参考价值

该用户从未签到

发表于 2008-11-6 16:36:06 | 显示全部楼层
没看过源码,,不过,,你加一个.get()试试~~~

本开发库依赖于OSG 2.6以上的版本,在Windows XP,VS9以及Arch Linux 0.72,GCC 4.0下测试通过。


问的和答的不是一个人么。。。。。。。。。。。

该用户从未签到

发表于 2008-11-6 17:09:13 | 显示全部楼层
不好意思 是我的osg版本太低了 哈哈

该用户从未签到

 楼主| 发表于 2008-11-6 18:39:40 | 显示全部楼层
原帖由 tan_dunming 于 2008-11-6 17:09 发表
不好意思 是我的osg版本太低了 哈哈


呵呵,因为我统一用osg::MixinVector代替了std::vector,所以才要求OSG版本大于2.6的~~谢谢提醒,我会考虑下兼容性的

该用户从未签到

发表于 2008-11-6 23:49:07 | 显示全部楼层
佩服楼主这种精神,国内愿意将自己研究成果(哪怕只有一点点精华)开源的人太少了,反而是更多的公司和个人将开源的东西据为己有写论文、拿来卖钱或者跑去科委申请创新基金。有时就算作者本人有开源的意愿所在公司一般也都会强烈反对,看来咱的观念确实有些落后了,恐怕版本号还没到0.1 ...

该用户从未签到

发表于 2008-11-13 10:18:15 | 显示全部楼层
……无法打开包括文件:“osg/MixinVector”
我的osg版本不够高……

该用户从未签到

 楼主| 发表于 2008-11-13 11:54:25 | 显示全部楼层
原帖由 showland 于 2008-11-13 10:18 发表
……无法打开包括文件:“osg/MixinVector”
我的osg版本不够高……


OSG 2.6以后的版本都是使用MixinVector代替std::vector了,因为后者有导致内存泄露的小问题。目前建议大家还是换用新版本的OSG~~

osgModeling库正在添加表面细分的功能!!下周中将放出0.1.1版本,并包括Loop细分表面以及增强的法线生成器(多达6种法线自动计算方法)~~

该用户从未签到

发表于 2008-11-13 20:49:29 | 显示全部楼层
n久没有来论坛了~~看到了array大侠的作品,实在是牛逼~!!!佩服佩服~!!!!!!
真希望能够有更多的时间和精力,想搞一个3D GUI了,呵呵

该用户从未签到

 楼主| 发表于 2008-11-13 21:04:14 | 显示全部楼层
原帖由 hesicong 于 2008-11-13 20:49 发表
n久没有来论坛了~~看到了array大侠的作品,实在是牛逼~!!!佩服佩服~!!!!!!
真希望能够有更多的时间和精力,想搞一个3D GUI了,呵呵


呵呵,3D GUI现在有一个Jemere Moles开发的osgWidgets啊,已经添加到核心库当中了。不过hesicong老兄做出来的估计也不会差,其实我一直以为新的osgVolume是你的贡献呢~~

该用户从未签到

发表于 2008-12-12 00:04:16 | 显示全部楼层

好东西!

我用SVN下载的,但编译时不能通过!

该用户从未签到

 楼主| 发表于 2008-12-12 08:25:22 | 显示全部楼层
原帖由 Wader 于 2008-12-12 00:04 发表
我用SVN下载的,但编译时不能通过!


能告知我编译错误的信息,以及您所使用的操作系统和编译器类型吗?非常感谢!

该用户从未签到

发表于 2008-12-12 10:42:33 | 显示全部楼层
我估计是那种.get()的错误,哈哈~~我看了一半的代码了,,,好像也没有其他的问题~~~~~~~~~

该用户从未签到

 楼主| 发表于 2008-12-12 11:22:36 | 显示全部楼层
原帖由 FlySky 于 2008-12-12 10:42 发表
我估计是那种.get()的错误,哈哈~~我看了一半的代码了,,,好像也没有其他的问题~~~~~~~~~


这不能怪我啊……以前不写get()马上会得到编译错误的,然后就改过来了~~可OSG新版本支持ref_ptr的operator()操作符了,所以坏毛病就这么养成了~~

估计osgModeling要维持现状一段时间了,现在我打算集中精力开发osgNV,在春节后提供CgFX特效和PhysX物理引擎的支持;CUDA的话,要看osgPPU那个工程的进展情况,不想跟别人的工作有冲突。

该用户从未签到

发表于 2008-12-12 17:49:45 | 显示全部楼层
release下编译成功,debug下编译:无LINK : fatal error LNK1104: 无法打开文件“osgModelingd.lib”,怎么办?

该用户从未签到

发表于 2008-12-12 18:09:50 | 显示全部楼层
原帖由 array 于 2008-12-12 11:22 发表
在春节后提供CgFX特效和PhysX物理引擎的支持

问一下到时候PhysX物理引擎准备通过什么方式整合?写一个针对PhysX的接口整合到osgNV项目中还是设计一个针对物理引擎的通用框架(独立于osgNV),将PhysX做为一种实现加入进去?因为osg目前似乎还没有一个标准的物理引擎框架,每个人用到某个引擎都要重复开发一个特定接口,将来更换其他物理引擎又要重头做起。好像Delta3D的ODE支持已经写死了,想要使用Bullet或者其他引擎只能拷贝、修改相关代码,这样对osg来说确实比较遗憾...

该用户从未签到

 楼主| 发表于 2008-12-13 21:41:20 | 显示全部楼层
原帖由 amen.w 于 2008-12-12 17:49 发表
release下编译成功,debug下编译:无LINK : fatal error LNK1104: 无法打开文件“osgModelingd.lib”,怎么办?


这个有可能是DEBUG模式下生成的osgModeling库文件名写漏了,我检查一下cmake文件。谢谢。

不过您应该可以继续正常测试和使用Release版本的功能。

该用户从未签到

 楼主| 发表于 2008-12-13 21:53:46 | 显示全部楼层
原帖由 lifc 于 2008-12-12 18:09 发表

问一下到时候PhysX物理引擎准备通过什么方式整合?写一个针对PhysX的接口整合到osgNV项目中还是设计一个针对物理引擎的通用框架(独立于osgNV),将PhysX做为一种实现加入进去?因为osg目前似乎还没有一个标准的物 ...


根据PhysX编程的基本特点,我的初步构想是继承Node节点类来构成物理引擎的接口:包括一个singleton类(封装physxSDK类,不是节点),管理者节点(用于物理仿真循环的运行和NxScene全局量的设置),以及大量的角色节点(继承自Transform,封装NxActor)。因为我对PhysX引擎还不是特别了解,因此这个设想可能会在以后继续发生变化。

这个架构目前看来也是写死的。不过应该可以采用Builder的设计模式,这样只要编写基于其它物理引擎的派生类就可以生成新的OdeNode,BulletNode。我非常想知道lifc兄的想法,以及大家的实际需求和建议,如果愿意并且有余力的话,也十分欢迎加入osgNV的开发小组,目前我是这个项目的负责人。不过这个项目只研究nVIDIA的扩展哦,包括CgFX,PhysX,以及CUDA等~~

osgNVPhys类预计将在新年之前扩充到SVN版本中,春节期间则将一个初步的物理引擎接口包含到正式发布的版本中(大概是0.6.5 - 0.7.0?我打算让osgNV的版本飞越一下,因为目前的变化已经很大了)。

该用户从未签到

发表于 2008-12-14 07:40:22 | 显示全部楼层
原帖由 array 于 2008-12-13 21:53 发表


根据PhysX编程的基本特点,我的初步构想是继承Node节点类来构成物理引擎的接口:包括一个singleton类(封装physxSDK类,不是节点),管理者节点(用于物理仿真循环的运行和NxScene全局量的设置),以及大量的角色 ...


物理引擎这个题目还是蛮大的,涉及到的方方面面也比较多,架构想一步到位也不太现实,也只好集思广益慢慢完善了(其实我没用过PhysX)。
至于管理者节点,应该是做一些世界场景初始化之类的工作,想必问题不大。其实array大侠如有时间不妨粗看一遍几个开源物理引擎接口文档,这样做设计时头脑中有个大概印象,写出来的框架通用性肯定会更好,将来扩充也比较方便。
凭直觉认为继承Transform类来实现Actor节点比较合适,将来可以在Update环节中根据预设的运动趋势调整Actor位置,只是不知当渲染帧率较低时物理仿真精度会不会受影响(后话了)。
以OSG的架构来看实现基于突包的刚体碰撞模拟问题不大,只是柔体、流体的仿真(PhysX强项)整合可能会比较麻烦。还有PhysX支持的CCD(其它开源引擎如bullet也有支持),日后这些都实现了肯定会成为OSG的又一亮点。
个人更看好nvidia的东西(起码人家对OpenGL和Linux持积极态度),虽然工作中经常要用ATI。虽然暂时还没条件玩这些尖端硬件,但以后条件具备了说不定也一起掺和掺和:)

该用户从未签到

发表于 2008-12-18 10:20:06 | 显示全部楼层
佩服楼主!

该用户从未签到

发表于 2009-1-6 10:21:56 | 显示全部楼层

回复 13楼 的帖子

为什么要这样替代呢,

该用户从未签到

 楼主| 发表于 2009-1-6 10:34:16 | 显示全部楼层
osg:: MixinVector在针对OSG对象列表的处理上要好过std:: vector,并且修正了std:: vector在卸载时候的内存泄露问题。推荐2.6以后的OSG开发者使用

该用户从未签到

发表于 2009-2-13 11:20:01 | 显示全部楼层
支持
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表