查看: 1812|回复: 22

新建一类shape对象

[复制链接]

该用户从未签到

发表于 2011-8-5 10:52:20 | 显示全部楼层 |阅读模式
本帖最后由 jiangrongan 于 2011-8-5 10:54 编辑

我想新建一个shape对象,不一定从shape继承(从它继承比较麻烦,还需要改shapevisitor等),如一种特殊的几何体,不知道如何做。我可以定义一类,如GeoModel,在其中写入它的定义数据,但是渲染在哪个地方写呢?看了看RenderBin,不明所以,请问各位大侠,是否有熟悉的,恳请指教。

该用户从未签到

发表于 2011-8-5 13:48:15 | 显示全部楼层
shape只是规定模型顶点如何生成,渲染最后还是要有drawable

该用户从未签到

发表于 2011-8-5 13:48:17 | 显示全部楼层
shape只是规定模型顶点如何生成,渲染最后还是要有drawable

该用户从未签到

 楼主| 发表于 2011-8-5 16:21:29 | 显示全部楼层
目前的Cone、box等类的渲染写在哪里?
原来我们写一个类,把数据和渲染写在一起了,当然不好。osg做到了分离,非常好。

该用户从未签到

发表于 2011-8-8 08:55:34 | 显示全部楼层
Shape类的渲染写在一个内部的Visitor里面,它只是用来作各种试验的,您自己的几何体构建请使用Geometry

该用户从未签到

 楼主| 发表于 2011-8-8 13:49:57 | 显示全部楼层
简单说,我自己回忆一个正五边形,写了一个类A,此类从node继承,在其中定义了5个点,制定了一个纹理,现在我把它加入场景,那么绘制应该写在哪里呢,是单独写一个渲染类吗?那么写了这个类,如何指定给A呢?

该用户从未签到

发表于 2011-8-8 14:14:21 | 显示全部楼层
请参看osg快速入门指南~~

该用户从未签到

 楼主| 发表于 2011-8-8 14:21:36 | 显示全部楼层
跟踪ShapeVisitor怎么好像定义了没有使用啊

该用户从未签到

 楼主| 发表于 2011-8-8 14:28:43 | 显示全部楼层
找到了,在DrawShapeVisitor中定义了。

难道我自己写一个类,必须自己重写 PrimitiveShapeVisitor, DrawShapeVisitor, ComputeBoundShapeVisitor等的代码吗?

该用户从未签到

发表于 2011-8-8 17:01:25 | 显示全部楼层
您自己的几何体构建请使用Geometry,已经说过一遍了

该用户从未签到

 楼主| 发表于 2011-8-9 10:25:36 | 显示全部楼层
明白了, Geometry 中的 addPrivitiveSet 增加一个绘图基元。我现在要写一个圆环,Geometry中我定义了圆心,大圆的半径,小圆的半径,渲染绘制部分我怎么写呢?

该用户从未签到

发表于 2011-8-9 11:50:12 | 显示全部楼层
请参看OGL的基本图元和osg快速入门指南~~

该用户从未签到

 楼主| 发表于 2011-8-9 14:34:26 | 显示全部楼层
我不是要用osg现有的类,而是希望扩展OSG,增加一个新的类

该用户从未签到

 楼主| 发表于 2011-8-9 15:30:12 | 显示全部楼层
本帖最后由 jiangrongan 于 2011-8-9 16:09 编辑

看源码,感觉如下:
1 Box从Shape继承,shape继承自object
2 要渲染box,需要先构建shapedrawable对象
3  shapedrawable绘制需要先加入到 Geode,  Geode::addDrawable加入ShapeDrawable

4 shapedrawable构造时将box传入
5 ShapeDrawable::drawImplementation中accept一个DrawShapeVisitor对象
6 DrawShapeVisitor::apply中进行box绘制

7 但是Geode中的绘制是在compileDrawables吗?在其父类 Drawable::draw 中调用 drawImplementation 进行绘制!

太复杂了吧。我自己写一个类,那么拣选生成渲染树的地方在哪里?

该用户从未签到

 楼主| 发表于 2011-8-9 15:43:57 | 显示全部楼层
本帖最后由 jiangrongan 于 2011-8-9 16:13 编辑

感觉这样,不知道是否可行:
1 新的数据对象类A直接从geode中继承,或者直接继承自Node?
2 在A中保存所有数据
3 创建一个绘制类B,A中Accept B
4 B中的apply中渲染A

其中肯定有问题,但问题出在哪里呢?

该用户从未签到

 楼主| 发表于 2011-8-9 15:53:44 | 显示全部楼层
A必须要写一个cullcallback吗?如果不写,是否不能通过拣选生成渲染树?

该用户从未签到

 楼主| 发表于 2011-8-9 15:55:28 | 显示全部楼层
或者简单而言,从cone中继承一个类A,从DrawShapeVisitor集成一个类B,其余就都可行了呢?

大侠们,请给有用的回复,代码级或者设计级的回复。

该用户从未签到

发表于 2011-8-9 16:58:58 | 显示全部楼层
我真的不知道您的思路是什么,我已经给出了最直接也最有效的回答:使用Geometry,并且您完全不用关心如何去渲染

该用户从未签到

 楼主| 发表于 2011-8-10 08:37:48 | 显示全部楼层
如果我要作一个围墙,或者一个管道,我只会定义它的中心线,我使用Geometry怎么描述呢?Geometry要求对需要绘制的部分描述成几何体。如管道,我只会描述它截面的半径和中心线,其余部分应该写在渲染部分。

该用户从未签到

发表于 2011-8-10 11:26:33 | 显示全部楼层
本帖最后由 tianxiao888 于 2011-8-10 11:28 编辑

你说了这么多,连基本原理都搞不清楚~~~
我们已经说的很清楚了,请参看OGL的基本图元和osg快速入门指南~~
再复杂的几何体也是由基本图元组成的,怎么组成当然是你告诉OGL或者OSG,他们并不知道什么圆的、扁的或者什么管子~~

该用户从未签到

 楼主| 发表于 2011-8-10 12:02:51 | 显示全部楼层
本帖最后由 jiangrongan 于 2011-8-10 12:53 编辑

版主太牛了。cone不就是将其他东西写在visitor中了吗

该用户从未签到

 楼主| 发表于 2011-8-10 12:11:59 | 显示全部楼层
我已经按照我说的路线搞定了

该用户从未签到

 楼主| 发表于 2011-8-10 16:01:20 | 显示全部楼层
还是不对,算了吧,放弃。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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