如何使用 BRL-CAD 绘制基本形状

基本形状可以用于更复杂形状的几何建模。
462 位读者喜欢这篇文章。
How to draw primitive shapes with BRL-CAD

Isaac Kamga, CC BY

基本体是在 CAD(计算机辅助设计)软件包中用于更复杂形状几何建模的具有唯一多项式方程的基本形状。示例包括椭圆、球体、圆环、正方形,以及在我们的例子中,具有六次方程(一个有六个根的多项式)的心形基本体。

艺术家可以使用这种心形基本体(爱的象征 <3)来制作卡通动画、设计卡片、皇家印章、横幅、礼品和礼物,用于家庭和社区庆祝活动,例如婚礼、家庭聚会和情人节。

本文通过强调在 BRL-CAD(美国陆军研究实验室开发的开源 CAD 软件包)中实现心形基本体的几何实用属性,为 CAD 软件中基本体的开发提供了指南。

首先,要设置 BRL-CAD 的开发环境,请按照这些说明进行操作

心形基本体的数据结构

该图显示了心形形状的注释。一个魔数 hrt,一个中心点 v,X 轴方向的向量 xdir,Y 轴方向的向量 ydir,Z 轴方向的向量 zdir 以及从中心点到任一尖端的距离 d

Heart-shaped primitive

标记心形基本体

心形基本体以魔数 Ox6872743f 唯一地存储在 BRL-CAD 的数据库中,这是 "?hrt?" 的十六进制等效值。我们还在 src/libbu/magic.cinclude/magic.hinclude/raytrace.h 中增加了基本体的最大数量。

在 BRL-CAD 中标记心形基本体之后,我们继续编写回调函数,这些函数计算几何实用属性。我们还使用了一个名为 amour(法语中“爱”的意思)的心形对象,它以原点 (0,0,0) 为中心,拥有三个径向向量 (5,0,0)、(0,5,0) 和 (0,0,5) 以及到尖端的距离为 4。假设这个对象称为 amour 并存储在 heart_example.g 数据库中。

格式化描述

为了了解实体的类型及其关键参数的值,我们编写了 rt_hrt_describe() 函数,该函数只是以人类可读的格式打印心形形状的参数。为了描述 amour 对象,我们通过在 archer 命令提示符下运行 l -t amourl amour 命令,分别以简洁和详细的形式使用 BRL-CAD 的 l 命令打印 amour 的参数。

Running commands from the archer command prompt

数据库导入和导出

为了使心形基本体能够在 CSG(构造实体几何)中使用,我们编写了在数据库格式和内部格式之间导入和导出数据的函数。

类型输入支持

然后,实现了适当的支持,以便使用键盘将心形基本体的参数输入到 mgedarcher 界面中。为了测试数据库导入和导出以及类型输入支持属性,我们运行了 BRL-CAD in amour hrt 0 0 0 5 0 0 0 5 0 0 0 5 4 命令,在 archer 命令行中输入名称、基本体类型 (hrt) 和 amour 的参数,如图所示。

Entering parameters of amour into the archer command line

边界框

几何模型的边界框是指模型所在的最小体积的框 - 更像是所有包围体积集合的最小上限。为了计算心形形状的边界框,我们编写了 rt_hrt_bbox() 函数,该函数分别计算边界框的最小点(最接近的左下角)和最大点(最接近的左下角)。为了报告 amour 对象的边界框范围,我们通过在 mgedarcher 命令提示符下运行 bb -qe amour 命令来打印其最小点和最大点。然后,我们在 archer 中运行 bb -qv amour 命令,以便以立方毫米为单位报告 amour 对象的体积。之后,我们通过运行 bb -qd amour 报告了 amour 边界框的长度、宽度和高度。最后,为了报告边界框的体积和尺寸,我们在 archer 的命令提示符下运行了 bb amour 命令。

Running the bb amour command in archer&#039;s command prompt

线框

为了将心形基本体的线框构建到 BRL-CAD 的功能中,我们编写了 rt_hrt_plot()rt_hrt_24pts() 函数。心形基本体的线框由沿 Z 轴对齐的几个椭圆组成,每个椭圆由 24 条边组成。当我们沿正 Z 轴方向前进时,我们使用八个椭圆(半径递减)来构筑左右瓣的上部。每个椭圆所需的 24 个点由 rt_hrt_24pts() 函数计算,该函数计算间隔 15 的 24 个点。

最后,不同的椭圆连接在一起,以使用更多等值线来丰富线框。draw 命令用于查看线框,-C 选项允许我们选择其显示颜色。为了使用白色线条绘制 amour 对象的线框,我们运行了 draw -C 255/0/0 amour 命令。

Amour object wireframe

光线追踪

心形基本体通过光线追踪被赋予表面表示。光线追踪的核心在于求解直线和表面的交点。许多有趣的表面已被编写为位置的多项式函数,心形也不例外。我们工作的特殊性在于,我们证明了使用基于 Laguerre 的求根器进行光线追踪适用于六次方程(度数为 6 的方程)。为了做到这一点,我们编写了 rt_hrt_prep()rt_hrt_norm()rt_hrt_shot()rt_hrt_print() 函数。

为了测试心形基本体的光线追踪属性是否有效,我们使用了 BRL-CAD 的 rt 命令,该命令可以对对象进行光线追踪。使用 rt 命令,我们生成了 360 张图像,每张图像的方位角相差 1 度,仰角为 35 度(从我们的视角来看)。这些图像的宽度和高度分别为 640 和 480 像素。

#!/bin/sh

for i in 'loop 000 359 1'; do

      rt -a $i -e 35 -w 640 -n 480 -o image$i.png heart_example.g amour

done

以下是从侧面、上方和下方光线追踪的 amour 对象的一些图像。

Raytraced amour object from besides

从侧面观看光线追踪的 amour 对象。

Raytraced amour object from above

从上方观看光线追踪的 amour 对象。

Raytraced amour object from above

从下方观看光线追踪的 amour 对象。

在适当地按顺序排列这些带有填充零的图像后,我们使用了 ImageMagick convert 命令将它们合成为一个动画视频,显示从侧面旋转的心形基本体。

本文详细介绍了在德克萨斯州奥斯汀举行的 OSCON 2017 大会上发表的题为“From Africa With Love”的演讲的技术方面,该演讲基于作者在 Google Summer of Code 计划的支持下在 BRL-CAD 中进行的“心形基本体的实现”项目。如果您有兴趣参加会议,请使用此折扣码 注册,为我们的读者提供:PCOS

User profile image.
Isaac Kamga 毕业于喀麦隆布埃亚大学,获得计算机科学硕士学位。在 2013 年参加谷歌的基石开源 Google Summer of Code (GSoC) 计划后,他与 2 位朋友共同创立了一个名为 Google Developers Group Buea (GDG Buea) 的技术非营利组织。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.