专栏首页人芳觅Blender+Geant4一文入门3D模型文件导入

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

与专业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的具体代码实现:

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使用。

本文分享自微信公众号 - 人芳觅(lililiangzuozuo),作者:梁佐佐

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 3D建模(Blender)+实例演示透明材质和5毛光晕特效

    不知道为什么,明明只想安安静静的科研(搬铅砖,一块22斤)。却发现自己,不会P图是不行的,毕竟你总想在自己的PPT里面突出点什么;不会视频剪辑、不会Gif动图,...

    梁佐佐
  • Geant4--G4ParticleGun定义射线源的发射能谱

    “ G4ParticleGun作为Geant4模拟中常用的粒子产生器,本文代码讲解怎样模拟发射符合自定义能量分布的粒子。”

    梁佐佐
  • Geant4--是怎样使用的?--(1.信息抽取)

    对于Geant4模拟,我们关心它到底是怎样使用的,到底是怎样获取我们想要的信息,即信息抽取。前面几篇入门教程有提到,Geant4的模拟流程中从信息流的整合来看,...

    梁佐佐
  • SwiftUI:使用 CGAffineTransform 和奇偶填充来变换形状

    当您不再满足于简单的形状和路径时,SwiftUI的两个有用功能会合在一起,以极少的工作量创建出漂亮的效果。第一个是CGAffineTransform,它描述了如...

    韦弦zhy
  • 深港澳大湾区第三次.NET技术交流会圆满成功

    张善友
  • axios 前端请求接口 跨域问题 Vue实现跨域请求

    在前端写接口请求的时候,遇到了跨域的问题。(在一个项目工程中通过接口请求另一个项目工程中的数据)

    acoolgiser
  • Java程序员必备的一些流程图

    Spring作为当前Java最流行、最强大的轻量级容器框架,了解熟悉spring的生命周期非常有必要;

    猿天地
  • Java 程序员必备的一些流程图

    Spring作为当前Java最流行、最强大的轻量级容器框架,了解熟悉spring的生命周期非常有必要;

    芋道源码
  • C++命名空间

    mySoul
  • 干货收藏 | Java程序员必备的一些流程图

    来源:juejin.im/post/5d214639e51d4550bf1ae8df

    Java团长

扫码关注云+社区

领取腾讯云代金券