查看: 4459|回复: 7

如何通过数据控制曲线的变化?

[复制链接]

该用户从未签到

发表于 2008-3-21 10:33:41 | 显示全部楼层 |阅读模式
我用Drawable类派生了一个Drawline类,想在drawImplementation里实现一个画曲线的算法,要求使用外部数据控制曲线的形状,该如何写呀?另外,osg::BoundingBox computeBound这个函数的作用是什么呀?比较迷茫,我是初学者,请各位高戍不吝赐教,说得详细些.

该用户从未签到

发表于 2008-3-21 10:57:20 | 显示全部楼层
原帖由 kllsg 于 2008-3-21 10:33 发表
我用Drawable类派生了一个Drawline类,想在drawImplementation里实现一个画曲线的算法,要求使用外部数据控制曲线的形状,该如何写呀?另外,osg::BoundingBox computeBound这个函数的作用是什么呀?比较迷茫,我是初 ...


建议你看一看osgteapot这个例子,派生Drawable对象所需要的一切我想都可以在这里找到答案。附件是我使用中文注释过的osgteapot,也不妨参考一下。
computeBound函数的作用是计算并给出几何对象的包围盒,它可以用于简单的碰撞检测,以及实现正确的物体显示(例如,避免被摄像机的远/近平面切去)

osgteapot.rar

4.67 KB, 下载次数: 226, 下载积分: 威望 1

该用户从未签到

 楼主| 发表于 2008-3-21 11:09:27 | 显示全部楼层
谢谢版主了,我本来就是在参考这个例子,不过有了你的注释,理解起来容易多了,OpenGL里,绘制一个曲线,用什么函数比较好?另外,那个包围盒算法,我看不太懂,要是我简化一下,做一个固定大小的包围盒,该怎么做?

该用户从未签到

发表于 2008-3-21 12:15:47 | 显示全部楼层
OPENGL中好像没什么绘制曲线的函数,直接按照绘制曲线的算法来写也很简单~~~做一个固定大小的包围盒,得到中心点,直接画也行,呵呵呵~~~~~

该用户从未签到

 楼主| 发表于 2008-3-21 14:12:33 | 显示全部楼层
得到中心点?直接画?是这样吗?        bbox.expandBy(osg::Vec3(0,0,0));
                        bbox.expandBy(osg::Vec3(10,10,10));
这样得到的是不是就是固定大小的了?能不能解释一下〉?绘制曲线使用什么函数比较好?或者算法?

该用户从未签到

发表于 2008-3-21 14:59:40 | 显示全部楼层
原帖由 kllsg 于 2008-3-21 14:12 发表
得到中心点?直接画?是这样吗?        bbox.expandBy(osg::Vec3(0,0,0));
                        bbox.expandBy(osg::Vec3(10,10,10));
这样得到的是不是就是固定大小的了?能不能解释一下〉?绘制曲线使用什么函数比较好?或者算法?


绘制曲线可以使用OpenGL的函数glMap,在osgteapot例子中使用glMap实现了曲面的绘制,同理您也可以使用glMap实现样条曲线的绘制,具体请参考《OpenGL编程权威指南》等书。
至于包围盒,它的含义就是:假设有一个盒子,能够恰好把我们绘制的图形包围起来,使图形的每一个顶点都在盒子之内——这个盒子就称作包围盒了。expandBy函数的含义是扩展当前的包围盒,使之能够包围指定的点(如果这个点超出当前包围盒的范围,则扩充盒子),您给出的两行语句将创建一个恰好包含顶点(0,0,0)和(10,10,10),长/宽/高均为10的包围盒;当然直接使用BoundingBox的构造函数或者set函数来设置也是可以的

该用户从未签到

 楼主| 发表于 2008-3-21 17:01:38 | 显示全部楼层
多谢array了

该用户从未签到

发表于 2008-4-20 21:26:51 | 显示全部楼层
OpenGL的求值器 NURBS 或者BSpline 可以看看OpenGL的介绍
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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