当前位置: 首页 > news >正文

OpenCASCADE Face Normals

OpenCASCADE Face Normals

eryar@163.com

 

Abstract. 要显示一个逼真的三维模型,其顶点坐标、顶点法向、纹理坐标这三个信息必不可少。本文主要介绍如何在OpenCASCADEDraw中显示出曲面的法向量,通过使用相关命令,来方便地对曲面的法向进行检查。

Key Words. Face, Surface, Normals

1. Introduction

曲面上点的法向量对于三维显示程序来说是一个重要的数据,他的正确与否直接影响曲面对光照的反应进而影响显示效果。如下图所示为同一个球的三维显示,不同的法向得到的显示效果是不同的。

 

对于OpenGL来说,提供了接口glNormal()来设置法向量。关于OpenCASCADE中更多曲面法向量计算及相关信息,可以参考原来写的blog:

Topology and Geometry in OpenCascade-Face

Surface Normal Vector in OpenCascade

Surface Normal Averaging

从这些文章中可以看出,与一般显示引擎不同的是,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

综上所述,OpenCASCADEDraw Test Harness中封装了显示面法向的命令normalsvnormals。通过使用这些命令可以方便地来检查面的法向是否正确。尤其是参数-useMesh来显示网格中的法向功能,对于模型的显示网格数据中的顶点法向的检查很有帮助。通过查找相关命令实现的源码,可以方便地找到相关功能实现的源码,这也是开源的一个优势。

转载于:https://www.cnblogs.com/opencascade/p/Face_Normals.html

相关文章:

  • PgAUT插件的原理
  • beetl的内置函数 (如strutil 工具类)
  • JDK命令行(jps、jstat、jinfo、jmap、jhat、jstack、jstatd、hprof)与JConsole
  • Aliyun ECS 重置系统
  • Composite组合模式(结构型模式)
  • SQL基础知识
  • 开放源代码库指南
  • WPF换肤之三:WPF中的WndProc
  • 【转】VUE 爬坑之旅-- 如何对公共JS,CSS进行统一管理,全局调用
  • 各个浏览器之间常见的兼容性问题
  • 为什么需要RPC,而不是简单的HTTP接口
  • 和开源硬件相关的几个词,免费、山寨、创客教育,以及未来 | COSCon'18
  • 2018云计算行业现状及2020年云计算发展趋势
  • 当我们谈论Promise时,我们说些什么
  • 谷歌推迟公布Google+漏洞遭参议员不满
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Go 语言编译器的 //go: 详解
  • iOS | NSProxy
  • Java IO学习笔记一
  • React的组件模式
  • SpringBoot 实战 (三) | 配置文件详解
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 关于使用markdown的方法(引自CSDN教程)
  • 计算机在识别图像时“看到”了什么?
  • 你不可错过的前端面试题(一)
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 微信小程序实战练习(仿五洲到家微信版)
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​水经微图Web1.5.0版即将上线
  • #Linux(Source Insight安装及工程建立)
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (SpringBoot)第二章:Spring创建和使用
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (力扣)1314.矩阵区域和
  • (六)激光线扫描-三维重建
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十) 初识 Docker file
  • (实战篇)如何缓存数据
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .Net Core与存储过程(一)
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .考试倒计时43天!来提分啦!
  • @RequestMapping用法详解
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [17]JAVAEE-HTTP协议
  • [AIGC] MySQL存储引擎详解
  • [BT]小迪安全2023学习笔记(第15天:PHP开发-登录验证)