Visualization of Generic Surface

Similar documents
绘制OpenCascade中的曲线

Topology and Geometry in OpenCascade

Topology Shapes of OpenCascade BRep

Topology and Geometry in OpenCascade

11_complex_3d

Move Component Object selection Component selection UV Maya Hotkeys editor Maya USING MAYA POLYGONAL MODELING 55

Delaunay Triangulation in OpenCascade

Topology and Geometry in OpenCascade

使 小 趙 有 機 可 趁 二 員 工 法 紀 觀 念 薄 弱 小 趙 身 為 主 管, 竟 假 藉 職 務 之 便, 利 用 平 時 得 經 常 申 請 出 差 之 機 會, 虛 立 出 差 名 目, 實 係 法 紀 觀 念 薄 弱 使 然 肆 具 體 改 進 措 施 或 建 議 一 訂 定 或

Microsoft Word - 我國社區保母系統角色定位與服務模式之研究1


<4D F736F F D B0EABB79A4E5B8D5C344BBBCB065AAA9>


康體藝術

Surface Normal Vector

file:///E|/软件学习资料/HyperWorks/hyperworks学习捷径总结/Hypermesh总结——几何清理篇.txt

Microsoft Word doc

m m m ~ mm

余德浩诗词

CGAL的安装编译

Improved Preimage Attacks on AES-like Hash Functions: Applications to Whirlpool and Grøstl


7 南 水 北 调 东 线 第 一 期 工 程 三 阳 河 潼 河 宝 应 站 工 程 设 计 江 苏 省 水 利 勘 测 设 计 研 究 院 有 限 公 陆 小 伟, 顾 美 娟, 张 仁 田, 王 钧, 焦 建 华, 张 艺, 朱 正 伟, 杨 俊 敬, 徐 文 俊, 张 娟, 钱 祖 宾, 汤


Microsoft Word - 专论综述1.doc

TI 3 TI TABLE 4 RANDBIN Research of Modern Basic Education


由社會發展趨勢探討國人睡眠品質

Untitled-3

ULC ULC ULC ULC 1. 88

三維空間之機械手臂虛擬實境模擬

定稿

a a a 1. 4 Izumi et al Izumi & Bigelow b

untitled

标题

经 济 与 管 理 耿 庆 峰 : 我 国 创 业 板 市 场 与 中 小 板 市 场 动 态 相 关 性 实 证 研 究 基 于 方 法 比 较 视 角 87 Copula 模 型 均 能 较 好 地 刻 画 金 融 市 场 间 的 动 态 关 系, 但 Copula 模 型 效 果 要 好 于

11 25 stable state. These conclusions were basically consistent with the analysis results of the multi - stage landslide in loess area with the Monte

36 监 管 与 会 计 口 径 差 异 下 的 贷 款 拨 备 率 达 标 及 监 管 研 究 总 第 44 期 失 准 备 金 是 指 商 业 银 行 在 成 本 中 列 支 用 以 抵 御 贷 款 风 险 的 准 备 金, 不 包 括 在 利 润 分 配 中 计 提 的 一 般 风 险 准 备

2 g g g g g g g

g 100mv /g 0. 5 ~ 5kHz 1 YSV8116 DASP 1 N 2. 2 [ M] { x } + [ C] { x } + [ K]{ x } = { f t } 1 M C K 3 M C K f t x t 1 [ H( ω )] = - ω 2

谢 辞 仿 佛 2010 年 9 月 的 入 学 发 生 在 昨 天, 可 一 眨 眼, 自 己 20 多 岁 的 两 年 半 就 要 这 么 匆 匆 逝 去, 心 中 真 是 百 感 交 集 要 是 在 古 代, 男 人 在 二 十 几 岁 早 已 成 家 立 业, 要 是 在 近 代, 男 人

Landscape Theory & Study 17

Microsoft Word - A doc

OpenCascade中网格的数据结构

untitled

一,

C39N13.dvi

untitled

A dissertation for Master s degree Metro Indoor Coverage Systems Analysis And Design Author s Name: Sheng Hailiang speciality: Supervisor:Prof.Li Hui,

医学科研方法

Edge-Triggered Rising Edge-Triggered ( Falling Edge-Triggered ( Unit 11 Latches and Flip-Flops 3 Timing for D Flip-Flop (Falling-Edge Trigger) Unit 11

~ ~

UDC Empirical Researches on Pricing of Corporate Bonds with Macro Factors 厦门大学博硕士论文摘要库

金門國家公園管理處


1.2 资 金 的 管 理 1.1 权 利 义 务 来 源 MOU 1.3 数 据 的 使 用 和 保 护 2 国 际 空 间 站 资 源 分 配 方 案 54

一次辽宁暴雨过程的诊断及风场反演分析

致 谢 本 人 自 2008 年 6 月 从 上 海 外 国 语 大 学 毕 业 之 后, 于 2010 年 3 月 再 次 进 入 上 外, 非 常 有 幸 成 为 汉 语 国 际 教 育 专 业 的 研 究 生 回 顾 三 年 以 来 的 学 习 和 生 活, 顿 时 感 觉 这 段 时 间 也

Microsoft Word - 33-p skyd8.doc

第 31 卷 Vol. 31 总第 122 期!"#$%&' Z[\ ]^ _` a, :b c $ ' X $, C $ b c! >, O 47 2$b c 1 X, 9?, S, 4b c =>01, ; O 47 ' 0 $ 01 #, 04b c

USING MAYA ANIMATION Keyset set Maya sets partitions MEL MEL copykey cutkey pastekey scalekey snapkey keytangent bakeresults MEL Command Reference Edi

Microsoft Word - 04呂素端83-120

Microsoft Word 谢雯雯.doc


Microsoft Word - A _ doc

170 中 南 大 学 学 报 ( 社 会 科 学 版 ) 2012 年 第 18 卷 第 4 期 周 末 九 鼎 沦, 必 以 亡. 者 为 神, 三 山 九 鼎 有 知 也? 或 时 吏 知 怨 家 之 谋, 窃 举 持 亡, 惧 怨 家 怨 己, 云 自 去 凡 人 能 亡., 足 能 步 行

于 水 等 : 多 源 流 理 论 视 角 下 宅 基 地 使 用 权 确 权 政 策 的 议 程 设 置 研 究 基 于 江 苏 省 4 市 的 调 查 83 push forward the confirmation of homestead use right of rural central

<4D F736F F D20D6D0CEC4B7A88C57B454CABF8C57CEBBD593CEC4D28EB9A0>

40 强 度 与 环 境 2010 年 强 烈 的 振 动 和 冲 击 载 荷, 这 就 对 阀 门 管 路 等 部 件 连 接 的 静 密 封 结 构 提 出 了 很 高 的 要 求 某 液 体 火 箭 发 动 机 静 密 封 涉 及 高 压 超 低 温 大 尺 寸 三 个 严 酷 条 件, 具


体 育 科 学 2015 年 ( 第 35 卷 ) 第 6 期 的 分 析, 提 供 反 映 体 育 志 愿 服 务 组 织 综 合 能 力 结 构 的 一 种 认 识 框 架 和 各 层 次 能 力 重 要 程 度 的 结 果, 为 人 们 进 一 步 深 入 探 讨 此 问 题 和 完 善 评

Transcription:

Mesh Algorithm in OpenCascade eryar@163.com Abstract. Rendering a generic surface is a two steps process: first, computing the points that will form the mesh of the surface and then, send this mesh to 3D API. Use the Triangle to triangulate the parametric space and then lifting map to the model 3D space. This is the main method to visualize the generic shaded surface. This paper show the OpenCascade triangulation of the parametric space and the map result: mesh in 3D model space. Use the method can visualize a generic surface. Key words. Delaunay Triangulation, Tessellation, Mesh, OpenCascade, Shaded Surface 1. Introduction 与曲线的可视化算法相比, 曲面的可视化要稍微复杂点 总的思路还是很好理解的, 那就是把参数空间三角剖分, 再将剖分结果映射到三维空间, 就得到曲面的网格数据了 因为 B 样条曲面的强凸包性, 所以可以对其参数空间进行三角剖分, 再映射到三维空间 这样可以实现曲面的可视化, 但是还有些问题需要处理, 如曲面上开孔 曲面离散精度控制等 因为 OpenCascade 使用了边界表示法 (BRep), 所以通过 Face,Wire,Edge 可以得到曲面的参数范围, 若曲面上有开孔, 也可通过 Edge 的 PCurve 得到开孔在曲面上的参数表示 将得到的参数空间进行三角剖分, 再映射到三维空间中, 即可对边界表示的形状进行可视化 用三角网格来逼近实际的形状的精度可以通过增加或减少参数空间中的点来实现 当把参数空间剖分得密, 映射到三维空间中的曲面更逼近真实的曲面 ; 当把参数空间剖分得疏, 映射到三维空间中的曲面就比较粗糙了 本文主要将 OpenCascade 中曲面的参数空间的三角剖分结果显示出来, 来分析和理解上述算法

2. OpenCascade BRep Shape 在 OpenCascade 中实体的边界表示法 (BRep) 为 : COMPSOLID 由面共享的 SOLID 组成 ; SOLID(Cylinder, Cone, Sphere, Torus, etc.) 由 SHELLS 分隔出来的体 (Volume); SHELL 由边 Edges 相连的 FACES 组成 ; FACE 是一个映射 (MAP), 从矩形的参数 UV 空间映射到 3D 空间 (Cylinder: [0, 2*PI] x[0, H] -> R3,Cone, Sphere, Torus, Bezier Surface, NURBS Surface, etc.) FACE 的边界由 WIRE 组成 ; WIRE 由相连的 EDGES 组成 ; EDGE 也是一个映射, 从一维参数空间 U 映射到 3D 空间 (Bezier s Curve: [0,1] -> R3, NURBS Curve, etc.) VERTEX 是用来限制 EDGE 的 ; 边界表示法 (BRep) 形成了不同 SHAPES(CompSolid, Solid, Shell, Face, Wire, Edge, Vertex) 之间的一个图结构 (a structure of GRAPH), 如下图所示 : Figure 2.1 Shape BRep in OpenCascade 表示上图的的边界表示法形成的树形结构如下图所示 由图可知, 有些结构被共享几次 在 OpenCascade 中使用类 TopoDS_Shape 来保存这个结构

COMPSOLID SOLID 1 SOLID 2 FACE 13 SHELL 1 SHELL 2 SHELL 3 FACE 1 FACE 12 FACE 2 FACE 3 FACE 4 FACE 5 FACE 6 FACE 7 FACE 8 FACE 9 FACE 10 FACE 11 WIRE 1 WIRE 2 EDGE 1 EDGE 2 EDGE 3 EDGE 4 EDGE 5 VERTEX 1 VERTEX 2 VERTEX 3 VERTEX 4 Figure 2.2 Graph structure of the BRep Shape

3. How the Mesh is Generated OpenCascade 中可以遍历 COMPSOLID 不同的子形状 首先, 将 EDGE 离散化, 实现的伪代码如下所示 : for (TopExp_Explorer edgeexp(thecompsolid, TopAbs_EDGE); edgeexp.more(); edgeexp.next()) // The U-interval of the EDGE is subdivided into // segments with respect to the edge length and // deflection in 3D-space. By the map, the segments // of the U-interval give the segments in 3D-Space. const TopoDS_Edge& theedge = TopoDS::Edge(edgeExp.Current()); BRepAdaptor_Curve BAC(theEdge); GCPnts_TangentialDeflection thepointsoncurve; thepointsoncurve.initialize(bac, adeflection, cdeflection); Standard_Real u = 0.0; gp_pnt apoint; for (Standard_Integer i = 1; i <= thepointsoncurve.nbpoints(); ++i) u = thepointsoncurve.parameter(i); apoint = thepointsoncurve.value(i); 使用上述算法将每条 EDGE 离散化, 如下图所示 : Figure 3.1 Creation of U-Mesh and 3D-Mesh for each EDGE

当曲面上有开孔时, 开孔的信息可以通过 WIRE 来获得 对于组成开孔的 WIRE 的每 条 EDGE, 可以通过曲面上的曲线 PCurve 来将开孔的参数统一到曲面的 UV 参数空间 实 现的伪代码如下所示 : for (TopExp_Explorer faceexp(thecompsolid, TopAbs_FACE); faceexp.more(); faceexp.next()) for (TopExp_Explorer wireexp(faceexp.current(), TopAbs_WIRE); wireexp.more(); wireexp.next()) for (TopExp_Explorer edgeexp(wireexp.current(), TopAbs_EDGE); edgeexp.more(); edgeexp.next()) // The U-Mesh of the EDGE is assembled after scaling in the // UV-domain to constitute the WIRE. Standard_Real thefirst = 0.0; Standard_Real thelast = 0.0; gp_pnt2d theuv; Handle_Geom2d_Curve thepcurve = BRep_Tool::CurveOnSurface(theEdge, theface, thefirst, thelast); theuv = thepcurve.value(thefirst); Figure 3.2 Hole in Parametric UV space

将 WIRE 限制的曲面的参数空间 UV 进行三角剖分, 若其中有开孔的信息, 则将形成孔 的 WIRE 内部的三角形去掉 将参数空间的三角剖分映射到三维空间, 即可得到曲面的三角 剖分网格 如下图所示 : Figure 3.3 Hole in Surface 对组成 COMPSOLID 的每个 FACE 进行剖分, 最后就得到 COMPSOLID 的网格 实现 的伪代码如下所示 : for (TopExp_Explorer faceexp(thecompsolid, TopAbs_FACE); faceexp.more(); faceexp.next()) // The 3d-mesh of the FACE is assembled to form the // boundary of the SOLID. Figure 3.4 Mesh of the Shape

4. Deflection Control 形状通过三角网格来逼近显示, 所以当离散精度越高时, 显示越逼真, 但是产生的数据 量大 ; 离散精度越低时, 显示越失真, 但是产生的数据量小 正如莎翁所说 :To be or not to be: that is the question 面对选择时, 不走极端, 中庸之道也是个不错的解决方法 在显示逼 真程度与数据量的大小之间做个平衡, 实体三角剖分的算法需要考虑的地方 在 OpenCascade 中曲面的三角剖分的网格数据都保存在类 Poly_Triangulation 中, 也包 括曲面的参数空间的剖分, 参数结点数据是 UVNodes 如下代码所示为将曲面的参数空间 三角剖分结果可视化 : osg::geode* BuildUVMesh(const Handle_Poly_Triangulation& themesh) osg::ref_ptr<osg::geode> thegeode = new osg::geode(); osg::ref_ptr<osg::geometry> thetriangles = new osg::geometry(); osg::ref_ptr<osg::vec3array> thevertices = new osg::vec3array(); for (Standard_Integer t = 1; t <= themesh->nbtriangles(); ++t) const Poly_Triangle& thetriangle = themesh->triangles().value(t); gp_pnt2d theuv1 = themesh->uvnodes().value(thetriangle(1)); gp_pnt2d theuv2 = themesh->uvnodes().value(thetriangle(2)); gp_pnt2d theuv3 = themesh->uvnodes().value(thetriangle(3)); thevertices->push_back(osg::vec3(theuv1.x(), 0.0, theuv1.y())); thevertices->push_back(osg::vec3(theuv2.x(), 0.0, theuv2.y())); thevertices->push_back(osg::vec3(theuv3.x(), 0.0, theuv3.y())); thetriangles->setvertexarray(thevertices.get()); thetriangles->addprimitiveset( new osg::drawarrays(osg::primitiveset::triangles, 0, thevertices->size())); osgutil::smoothingvisitor smv; smv.smooth(*thetriangles); thegeode->adddrawable(thetriangles); return thegeode.release(); 如下图所示, 将球面参数空间的三角剖分显示出来 由球面的参数方程可知其参数空间 的范围,U 从 0 到 2PI,V 从 -PI/2 到 PI/2 从图中还可以看出, 对球面的参数空间进行剖分时, 只在 V 方向加入了一些点, 而在 U 方向没有增加

Figure 4.1 Triangulation of the Sphere parametric space 当增加离散精度后, 显示得更逼真, 但产生了更多的网格数据, 如下图所示 : Figure 4.2 Triangulation of the Sphere

从上图可知, 将参数空间剖分的越细密, 显示的效果越逼真 由上图还可知,OpenCascade 对球面的参数空间剖分也不是很均匀, 有很密集的区域, 也是相对稀疏的区域 如果将参数空间均匀剖分, 映射到三维空间曲面上时, 显示效果也不是很均匀 如下图所示为较理想的球面的剖分网格 : Figure 4.3 Triangulation of the Sphere Generated by Netgen Figure 4.4 Triangulation of the Sphere 从图中可以看出, 将参数空间均匀剖分后, 映射到三维空间后, 在球面的两个极点处, 显示出来有些密集, 在轨道线附近, 比较稀疏

同一个曲面, 当剖分得密集时, 显示得细腻, 如下图所示 : Figure 4.5 Triangulation of a Shape by Netgen 在 OpenCascade 中得到的剖分结果如下图所示 : Figure 4.6 Triangulation of a Shape by OpenCascade 在 OpenCascade 中只是把边的离散点组成了三角形, 没有优化, 但是用于显示也还不错, 且数据量也很小 当程序要处理的模型很多时, 减少三角网格的数量, 将会明显提高显示速度 所以在对实体进行网格剖分时, 需要根据实际需要, 选择折中的, 和谐的算法 即若对

网格剖分质量要求较高 ( 如用于有限元分析 ), 模型量少, 可以将实体剖分得精细 ; 若模型量很大, 又对显示速度要求较高, 在网格剖分算法中可以选择产生数据量小的算法 上述形状的渲染模式如下图所示 虽然剖分中也有很多细长的三角形, 但当把网格的顶点法向设置正确后, 用于显示已经足够 三角形的数量明显要少很多 Figure 4.7 Shaded mode of the Shape Figure 4.8 Shaded Mode in OpenCascade

5. Conclusions 将形状中曲面的参数空间三角剖分后, 再映射到三维空间即可得到形状的剖分网格 当形状上有开孔时, 通过边界表示法, 可以得到孔的数据 通过曲面上的曲线 PCurve, 可将孔与面统一到参数空间进行剖分 网格的质量与离散精度的控制是个问题 根据需要来对形状进行网格化 当把参数空间均匀剖分时, 产生的曲面不一定均匀 所以, 也应该存在与曲线离散化类似的算法, 即在曲率较大的地方, 剖分的密集 ; 在很平的地方, 剖分粗 这样来对显示与速度之间做个平衡 6. References 1. Alain PERRONNET. NEF: A Mesher based on OpenCascade C.A.D software https://www.ljll.math.upmc.fr/~perronnet/mit/mit.html 2. Kelly Dempski. Focus on Curves and Surfaces. Premier Press 2003