OpenCASCADE Face Normals
OpenCASCADE Face Normals
Abstract. 要显示一个逼真的三维模型,其顶点坐标、顶点法向、纹理坐标这三个信息必不可少。本文主要介绍如何在OpenCASCADE的Draw中显示出曲面的法向量,通过使用相关命令,来方便地对曲面的法向进行检查。
Key Words. Face, Surface, Normals
1. Introduction
曲面上点的法向量对于三维显示程序来说是一个重要的数据,他的正确与否直接影响曲面对光照的反应进而影响显示效果。如下图所示为同一个球的三维显示,不同的法向得到的显示效果是不同的。
对于OpenGL来说,提供了接口glNormal()来设置法向量。关于OpenCASCADE中更多曲面法向量计算及相关信息,可以参考原来写的blog:
l Topology and Geometry in OpenCascade-Face
l Surface Normal Vector in OpenCascade
从这些文章中可以看出,与一般显示引擎不同的是,OpenCASCADE对于通过造型算法构造的模型,由于其内在的精确参数方程的表示,可以精确计算出曲面上任意点处的法向量。而不用像一般的显示引擎那样,通过计算平均法向类似的算法来处理顶点法向。
2. Face Normals
在OpenCASCADE早期版本的Draw Test Harness中提供了normals命令,可以将曲面的法向显示出来。
命令用法如下:
normals shape [Length {10}] [-NbAlongU {1}] [-NbAlongV {1}] [-UseMesh] [-print], display normals
通过相应的参数可以设置法线箭头的长度、沿曲面参数UV方向显示法向的数量、是否显示网格的法向及是否打印在Draw的命令窗口中。下面通过显示一个圆柱体各个面的法向来说明命令的用法。命令列出如下:
axo
pcylinder c 10 20
normals c
fit
首先使用命令axo打开一个二维轴测视图。
再使用命令pcylinder创建一个半径10,高度20的圆柱体;
使用命令normals来用默认参数显示出圆柱的法向;
使用fit命令来缩放二维轴测视图。
其中红色表示法线方向与显示的方向一致,蓝色表示法向与显示的方向相反。由于这个二维轴测视图不能任意旋转、缩放,没有三维视图方便,所以OpenCASCADE又提供了一个在三维视图中显示曲面法向的命令vnormals,相关参数设置与normals一致。所以下面主要在三维视图中来对这几个参数的用法进行说明。其中vnormals命令用法如下:
Displays/Hides normals calculated on shape geometry or retrieved from triangulation
vnormals Shape [{on|off}=on] [-length {10}] [-nbAlongU {1}] [-nbAlongV {1}] [-nbAlong {1}]
: [-useMesh] [-oriented {0}1}=0]
当使用默认参数来显示上面的圆柱体的法向时,直接输入命令:vnormals c
因为在三维视图中使用箭头来表示法向的方向,所以不用颜色来区分方向的正反。由上图可见,底面的法向正确的应该要反向。默认参数只显示的TOPO面中的几何面的法向,没有考虑TOPO面的方向。通过参数-oriented使命令显示法向时考虑TOPO面的方向,即最终显示用的法向方向。命令为:
vnormals c -oriented
上面每个面上只显示了一个法向,对于圆柱面很明显一个法向不够。可以通过参数-nbAlong等来设置曲面在参数UV方向法向的个数。
对于显示数据即三角网格顶点的法向可以通过参数-useMesh来指定。这个用法可以方便地检查网格数据的顶点及顶点法向。
显示一个螺旋桨模型面的法向:
还可以通过设置参数on及-length来设置法向的显示与不显示,及法向的显示长度,这里就不细说了,读者可以自己测试。
3. Conclusion
综上所述,OpenCASCADE在Draw Test Harness中封装了显示面法向的命令normals和vnormals。通过使用这些命令可以方便地来检查面的法向是否正确。尤其是参数-useMesh来显示网格中的法向功能,对于模型的显示网格数据中的顶点法向的检查很有帮助。通过查找相关命令实现的源码,可以方便地找到相关功能实现的源码,这也是开源的一个优势。
OpenCASCADE Face Normals的更多相关文章
- Delaunay Triangulation in OpenCascade
Delaunay Triangulation in OpenCascade eryar@163.com 摘要:本文简要介绍了Delaunay三角剖分的基础理论,并使用OpenCascade的三角剖分算 ...
- Mesh Data Structure in OpenCascade
Mesh Data Structure in OpenCascade eryar@163.com 摘要Abstract:本文对网格数据结构作简要介绍,并结合使用OpenCascade中的数据结构,将网 ...
- Surface Normal Vector in OpenCascade
Surface Normal Vector in OpenCascade eryar@163.com 摘要Abstract:表面上某一点的法向量(Normal Vector)指的是在该点处与表面垂直的 ...
- Render OpenCascade Geometry Surfaces in OpenSceneGraph
在OpenSceneGraph中绘制OpenCascade的曲面 Render OpenCascade Geometry Surfaces in OpenSceneGraph eryar@163.co ...
- Render OpenCascade Geometry Curves in OpenSceneGraph
在OpenSceneGraph中绘制OpenCascade的曲线 Render OpenCascade Geometry Curves in OpenSceneGraph eryar@163.com ...
- OpenCascade Shape Representation in OpenSceneGraph
OpenCascade Shape Representation in OpenSceneGraph eryar@163.com 摘要Abstract:本文通过程序实例,将OpenCascade中的拓 ...
- OpenCASCADE AIS Manipulator
OpenCASCADE AIS Manipulator eryar@163.com Abstract. OpenCASCADE7.1.0 introduces new built-in interac ...
- Convert BSpline Curve to Arc Spline in OpenCASCADE
Convert BSpline Curve to Arc Spline in OpenCASCADE eryar@163.com Abstract. The paper based on OpenCA ...
- OpenCASCADE Shape Location
OpenCASCADE Shape Location eryar@163.com Abstract. The TopLoc package of OpenCASCADE gives resources ...
随机推荐
- 文件共享服务器nfs搭建过程
网络文件共享服务器192. yum install -y nfs-utils 在exports文件中添加的从机范围 vim /etc/exports /home/nfs/ (rw,sync,fsid= ...
- 5.array
#include <iostream> #include <array> #include <algorithm> using namespace std; //a ...
- POJ 3173 模拟
按照题意模拟就好-- //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; in ...
- 启动hadoop遇到的datanode启动不了
从截图上看是datanode的clusterID 和 namenode的clusterID 不匹配. 解决办法: 根据日志中的路径,cd /hadoop/data/dfs/ 能看到 data和name ...
- js变量作用域和闭包的示例
<script> /* js是函数级作用域,在函数内部的变量,内部都能访问, 外部不能访问内部的,但是内部可以访问外部的变量 闭包就是拿到本不该属于他的东西,闭包会造成内存泄漏,你不知道什 ...
- TabLayout中Indicator的样式修改
最近写一个项目的时候用到了TabLayout,其中Indicator只是固定的一条横线,样式只能修改Color和Height,没有办法改变形状和宽度等其他信息. 经过查看TabLayout类的源码,发 ...
- sql server 中查询数据库下有多少张表以及同义词等信息
--查询数据库有多少张表SELECT count(0) from sysobjects where xtype = 'u' 复制代码 解释:sysobjects系统对象表. 保存当前数据库的对象.如约 ...
- pandas学习系列(一):时间序列
最近参加了天池的一个机场航空人流量预测大赛,需要用时间序列来预测,因此开始使用python的pandas库 发现pandas库功能的确很强大,因此在这记录我的pandas学习之路. # -*- cod ...
- luoguP1462通往奥格瑞玛的道路(二分答案+spfa)
题意 给出n个点m条边的无向图. 每条边有两个权值a,b; 问在保证从1到n的路径a权值和小于x时,路径上b权值最大值最小为多少. (n≤10000,m≤50000,x≤1000000000) 题解 ...
- 单调队列&单调栈归纳
单调队列 求长度为M的区间内的最大(小)值 单调队列的基本操作,也就是经典的滑动窗口问题. 求长度为M的区间内最大值和最小值的最大差值 两个单调队列,求出长度为M的区间最大最小值的数组,分别求最大最小 ...