前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Blender+Geant4一文入门3D模型文件导入

Blender+Geant4一文入门3D模型文件导入

作者头像
梁佐佐
发布2020-09-04 17:30:21
2.5K0
发布2020-09-04 17:30:21
举报
文章被收录于专栏:人芳觅

与专业3D建模软件相比,geant4的3D绘制低效且不直观。如果你既想要3D的灵活设计,又想Geant4把它用起来,做到从图1到图2的效果:

图1. 一个通用编码成像模型

图2. 将3D模型导入Geant4

目录

1. Blender绘制3D模型并导出为*.obj格式文件

2. Geant4导入*.obj文件并抽取3D模体

3. 总结与展望

1. Blender绘制3D模型并导出为*.obj格式文件

a. Blender简单介绍

官网www.blender.org,开源3D设计软件,功能强大,入门学习资料见

https://docs.blender.org/manual/en/latest/。

b. 建模操作入门

Blender默认长度单位为m,可在“Properties”栏目->Scene->Units->Length中,更改长度显示单位。

图3. 更改Blender显示长度单位

c. 巧用阵列修改器,构建自己想要的规律排布阵列

我们来看如何创建一个10*10的长条阵列,单元尺寸2*2*15mm3,单元间隔2.5mm:

1. 创建一个单元尺寸长条:

快捷键N/n调出场景属性栏,Item->Dimensions中设置长条几何,然后View->ClipStart设置的小一点如0.01mm,表示场景视野的可显示最小尺度(再小就不予显示)。

图4 长条几何与显示设置

2. 添加阵列修改器,并添加材质属性:

选中长条以后,在“Properties”栏目->Add Modifier->Array中,总共添加X/Y方向两个Array偏移,形成阵列。

图5-1 给长条添加X和Y方向的阵列偏移

将阵列Item->Location调整到中心位置处,并在属性栏中材质选项添加材质显示效果。此外快捷键shift+A添加一个或多个光源Light,来优化视觉效果,菜单栏->Render可以渲染当前场景。

图5-2 添加材质

3. 给目标模体命名:

在”Scene Collection”->Collection图层中,对模体重命名,包括实体和顶点编辑组。

图6 模体名字修改

4. 导出*.obj文件:

一同默认导出的还有*.mtl材质文件,G4中用不到。菜单栏中File->Export->Wavefront(.obj)导出*.obj文件。

图7 *.obj文件导出

2. Geant4导入*.obj文件并抽取3D模体

a. CADMesh基本操作

https://github.com/christopherpoole/CADMesh,

1) 将CADMesh.hh拷贝到/B1/include/下

2) 将*.obj模型文件存入/B1/下

3) 在/B1/B1DetectorConstruction.cc中#include ”CADMesh.hh”

4) 导入模型

b. Geant4导入操作

1. 参见Blender中对不同模体的命名:

图8 不同模体的命名

2. 导出文件名为20200708-mura19camera.obj,存入/B1/,vi *.obj打开看一看:

图9 vi打开*.obj

可以在vi命令模式下搜索:/mask19、:/baso4,确保三个模体命名没问题。

3. Geant4中/B1/B1DetectorConstruction.cc的具体代码实现:

代码语言:javascript
复制
auto mesh =CADMesh::TessellatedMesh::FromOBJ("20200708-mura19camera.obj");
mesh->SetScale(1000.0);
//to change the Blender default basic unit(m) to mm
G4VSolid*solid[3];
G4Stringmeshname[3]={"mask19","baso4","scintillator"};
G4LogicalVolume*logic[3];
for (inti=0;i<3;i++)
{ 
    solid[i] =mesh->GetSolid(meshname[i]);          
    logic[i]=newG4LogicalVolume(solid[i],env_mat,meshname[i]);             
    new G4PVPlacement(0,G4ThreeVector(),logic[i],meshname[i],logicWorld,false,0,checkOverlaps);
//此段代码仅作演示,实际上solid[2]需要放置到solid[1]当中。
}

注意:当采用默认G4ThreeVector()时,三者的相对及绝对位置与Blender一致,事实上很多情况下反而会带来麻烦,我们本希望每个抽取的solid的中心默认位置为(0,0,0)。

4. 总结与展望

从Blender建模到导入Geant4可以概括为以下几点:

  1. 在Blender中建立模型,注意模体命名包括实体及顶点编辑组;
  2. 在Geant4中按名字导入solid,注意单位换算,solid初始默认位置与Blender一致。

展望:

通过官网学习资料,对于Blender达到基本的几何建模要求少则几天,且配合其动画演示可以丰富自己设计的展示。*.obj格式将3D几何存储为纯文本ASCII文件,可以打开查看,每个模体名字后跟随其相关的顶点和面坐标。待熟练整个流程后,便是简单的Blender建模加Geant4使用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人芳觅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档