在OpenSceneGraph中绘制OpenCascade的曲面
Draw OpenCascade Geometry Surfaces in OpenSceneGraph
摘要Abstract:本文对OpenCascade中的几何曲面数据进行简要说明,并结合OpenSceneGraph将这些曲面显示。
关键字Key Words:OpenCascade、OpenSceneGraph、Geometry Surface、NURBS
一、引言 Introduction
《BRep Format Description White Paper》中对OpenCascade的几何数据结构进行了详细说明。BRep文件中用到的曲面总共有11种:
1.Plane 平面;
2.Cylinder 圆柱面;
3.Cone 圆锥面;
4.Sphere 球面;
5.Torus 圆环面;
6.Linear Extrusion 线性拉伸面;
7.Revolution Surface 旋转曲面;
8.Bezier Surface 贝塞尔面;
9.B-Spline Surface B样条曲面;
10.Rectangle Trim Surface 矩形裁剪曲面;
11.Offset Surface 偏移曲面;
曲面的几何数据类都有一个共同的基类Geom_Surface,类图如下所示:
Figure 1.1 Geometry Surface class diagram
抽象基类Geom_Surface有几个纯虚函数Bounds()、Value()等,可用来计算曲面上的点。类图如下所示:
Figure 1.2 Geom_Surface class diagram
与另一几何内核sgCore中的几何的概念一致,几何(geometry)是用参数方程对曲线曲面精确表示的。
每种曲面都对纯虚函数进行实现,使计算曲面上点的方式统一。
曲线C(u)是单参数的矢值函数,它是由直线段到三维欧几里得空间的映射。曲面是关于两个参数u和v的矢值函数,它表示由uv平面上的二维区域R到三维欧几里得空间的映射。把曲面表示成双参数的形式为:
它的参数方程为:
u,v参数形成了一个参数平面,参数的变化区间在参数平面上构成一个矩形区域。正常情况下,参数域内的点(u,v)与曲面上的点r(u,v)是一一对应的映射关系。
给定一个具体的曲面方程,称之为给定了一个曲面的参数化。它既决定了所表示的曲面的形状,也决定了该曲面上的点与其参数域内的点的一种对应关系。同样地,曲面的参数化不是唯一的。
曲面双参数u,v的变化范围往往取为单位正方形,即u∈[0,1],v∈[0,1]。这样讨论曲面方程时,即简单、方便,又不失一般性。
二、程序示例 Code Example
使用函数Value(u, v)根据参数计算出曲面上的点,将点分u,v方向连成线,可以绘制出曲面的线框模型。程序如下所示:
1 /*2 * Copyright (c) 2013 eryar All Rights Reserved.3 *4 * File