news 2026/4/23 15:01:40

BlobbyLogo 几何体的隐式建模,创建更加平滑的模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
BlobbyLogo 几何体的隐式建模,创建更加平滑的模型

一:主要的知识点

1、说明

本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客

2、知识点纪要

本段代码主要涉及的有①vtkImplicitModeller隐式建模


二:代码及注释

import vtkmodules.vtkInteractionStyle import vtkmodules.vtkRenderingOpenGL2 from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkIOLegacy import vtkPolyDataReader from vtkmodules.vtkCommonTransforms import vtkTransform from vtkmodules.vtkFiltersGeneral import vtkTransformPolyDataFilter from vtkmodules.vtkFiltersCore import vtkAppendPolyData, vtkPolyDataNormals, vtkContourFilter from vtkmodules.vtkFiltersHybrid import vtkImplicitModeller from vtkmodules.vtkRenderingCore import ( vtkActor, vtkPolyDataMapper, vtkProperty, vtkRenderWindow, vtkRenderWindowInteractor, vtkRenderer ) def main(): colors = vtkNamedColors() fileName1, fileName2, fileName3 = "Data/v.vtk", "Data/t.vtk", "Data/k.vtk" aRenderer = vtkRenderer() aRenderWindow = vtkRenderWindow() aRenderWindow.AddRenderer(aRenderer) anInteractor = vtkRenderWindowInteractor() anInteractor.SetRenderWindow(aRenderWindow) aRenderWindow.SetSize(300, 300) aRenderWindow.SetWindowName('BlobbyLogo') letterV = vtkPolyDataReader() letterV.SetFileName(fileName1) letterT = vtkPolyDataReader() letterT.SetFileName(fileName2) letterK = vtkPolyDataReader() letterK.SetFileName(fileName3) VTransform = vtkTransform() VTransform.Translate(-16.0, 0.0, 12.5) VTransform.RotateY(40) VTransformFilter = vtkTransformPolyDataFilter() VTransformFilter.SetInputConnection(letterV.GetOutputPort()) VTransformFilter.SetTransform(VTransform) TTransform = vtkTransform() TTransformFilter = vtkTransformPolyDataFilter() TTransformFilter.SetInputConnection(letterT.GetOutputPort()) TTransformFilter.SetTransform(TTransform) KTransform = vtkTransform() KTransform.Translate(14.0, 0.0, 0.0) KTransform.RotateY(-40) KTransformFilter = vtkTransformPolyDataFilter() KTransformFilter.SetInputConnection(letterK.GetOutputPort()) KTransformFilter.SetTransform(KTransform) appendAll = vtkAppendPolyData() appendAll.AddInputConnection(VTransformFilter.GetOutputPort()) appendAll.AddInputConnection(TTransformFilter.GetOutputPort()) appendAll.AddInputConnection(KTransformFilter.GetOutputPort()) logoNormals = vtkPolyDataNormals() logoNormals.SetInputConnection(appendAll.GetOutputPort()) logoNormals.SetFeatureAngle(60) logoMapper = vtkPolyDataMapper() logoMapper.SetInputConnection(logoNormals.GetOutputPort()) logo = vtkActor() logo.SetMapper(logoMapper) # 隐式建模 # vtkImplicitModeller 输入的几何(reader 读出的模型,比如一个 vtkPolyData)转换成一个 隐式函数场 blobbyLogoImp = vtkImplicitModeller() blobbyLogoImp.SetInputConnection(appendAll.GetOutputPort()) """ vtkImplicitModeller 会计算每个体素到输入几何表面的最小距离,但为了性能考虑,不会无限计算 而是如果距离超过 MaximumDistance,就不再计算,直接设为这个最大值 可以理解成:值越大,生成的“模糊边缘(blobby)”越宽,值越小,模型越“紧贴”原始几何 """ blobbyLogoImp.SetMaximumDistance(0.075) blobbyLogoImp.SetSampleDimensions(64, 64, 64) # 表示输出的体数据是一个 64×64×64 的三维网格 blobbyLogoImp.SetAdjustDistance(0.05) # 调整隐式距离的“软化程度”或“平滑边界宽度” 当多个几何靠得很近时,这个参数能让它们“自然融合”成一个连续的体 blobbyLogoIso = vtkContourFilter() blobbyLogoIso.SetInputConnection(blobbyLogoImp.GetOutputPort()) blobbyLogoIso.SetValue(1, 1.5) blobbyLogoMapper = vtkPolyDataMapper() blobbyLogoMapper.SetInputConnection(blobbyLogoIso.GetOutputPort()) blobbyLogoMapper.ScalarVisibilityOff() tomato = vtkProperty() tomato.SetDiffuseColor(colors.GetColor3d('tomato')) tomato.SetSpecular(.3) tomato.SetSpecularPower(20) banana = vtkProperty() banana.SetDiffuseColor(colors.GetColor3d('banana')) banana.SetDiffuse(.7) banana.SetSpecular(.4) banana.SetSpecularPower(20) blobbyLogo = vtkActor() blobbyLogo.SetMapper(blobbyLogoMapper) blobbyLogo.SetProperty(banana) logo.SetProperty(tomato) logo.SetPosition(0, 0, 6) aRenderer.AddActor(logo) aRenderer.AddActor(blobbyLogo) aRenderer.SetBackground(colors.GetColor3d('SlateGray')) aRenderWindow.Render() anInteractor.Start() if __name__ == '__main__': main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 6:52:51

CollisionDetection 碰撞检测

一:主要的知识点 1、说明 本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客 2、知识点纪要 本段代码主要涉及的有①vtkCollisionDetectionFilter检测三维物体…

作者头像 李华
网站建设 2026/4/23 6:52:51

PDF补丁丁跨平台终极指南:Windows与Linux完整使用教程

PDF补丁丁跨平台终极指南:Windows与Linux完整使用教程 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转成图片等等 项目地址: https://gi…

作者头像 李华
网站建设 2026/4/23 7:00:31

Roblox帧率解锁终极指南:一键配置完整教程

Roblox帧率解锁终极指南:一键配置完整教程 【免费下载链接】rbxfpsunlocker FPS Unlocker for Roblox 项目地址: https://gitcode.com/gh_mirrors/rb/rbxfpsunlocker 想要在Roblox游戏中获得更加流畅的视觉体验?本教程将详细介绍如何使用Roblox F…

作者头像 李华
网站建设 2026/4/23 8:17:51

AhabAssistantLimbusCompany:智能算法驱动的终极自动化配置指南

AhabAssistantLimbusCompany:智能算法驱动的终极自动化配置指南 【免费下载链接】AhabAssistantLimbusCompany AALC,大概能正常使用的PC端Limbus Company小助手 项目地址: https://gitcode.com/gh_mirrors/ah/AhabAssistantLimbusCompany AhabAss…

作者头像 李华
网站建设 2026/4/23 8:15:37

openstack计算节点nova-compute服务启动异常处理

#你处理过openstack中计算节点nova-compute服务假死的问题吗,正常状态下,突发指定到该节点的云主机创建失败,本篇介绍两个案例。# 在openstack云计算平台,nova计算节点经常出现nova-compute服务假死的状态,重启也起不…

作者头像 李华
网站建设 2026/4/23 11:20:49

PIAS1如何通过SUMO化修饰调控细胞迁移过程?

一、SUMO化修饰有何生物学功能?SUMO化修饰是一种动态可逆的蛋白质翻译后修饰过程,其机制虽与泛素化相似,但生物学功能存在显著差异。不同于泛素化主要介导蛋白质降解,SUMO化修饰参与调控蛋白质的亚细胞定位、蛋白质相互作用及功能…

作者头像 李华