news 2026/3/2 20:35:14

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/3/1 2:47:01

从模型到产品:基于阿里通义Z-Image-Turbo的快速原型开发

从模型到产品:基于阿里通义Z-Image-Turbo的快速原型开发 对于产品团队来说,快速验证创意想法是抢占市场的关键。本文将介绍如何利用阿里通义Z-Image-Turbo模型,在最短时间内从AI模型开发出可演示的产品原型。这类任务通常需要GPU环境&#xf…

作者头像 李华
网站建设 2026/3/1 18:19:39

CSANMT模型在实时对话翻译中的应用探索

CSANMT模型在实时对话翻译中的应用探索 🌐 AI 智能中英翻译服务:从理论到工程落地 随着全球化交流的不断深入,跨语言沟通已成为日常办公、学术协作与国际商务中的核心需求。传统机器翻译系统虽然能够实现基础的语言转换,但在语义连…

作者头像 李华
网站建设 2026/3/2 13:57:29

AI权限失守+XSS漏洞双重暴击!GitLab高危漏洞敲响DevOps安全警钟

2026年1月8日,GitLab紧急发布安全更新,一次性修复8个漏洞,其中3个高危漏洞(含2个XSS跨站脚本漏洞、1个AI权限绕过漏洞)直指核心业务场景,CVSS最高评分达8.7分。作为全球数百万企业依赖的DevOps核心平台&…

作者头像 李华
网站建设 2026/2/28 13:32:46

5个高可用OCR模型推荐:CRNN版支持中英文识别

5个高可用OCR模型推荐:CRNN版支持中英文识别 📖 OCR 文字识别技术概述 光学字符识别(Optical Character Recognition, OCR)是人工智能在视觉感知领域的重要应用之一。其核心任务是从图像中自动提取可读文本,广泛应用于…

作者头像 李华
网站建设 2026/2/27 0:40:01

Nodepad++替代方案对比:哪款工具集成OCR最方便?

Nodepad替代方案对比:哪款工具集成OCR最方便? 📄 OCR 文字识别:从图像到可编辑文本的桥梁 在数字化办公与智能文档处理日益普及的今天,OCR(Optical Character Recognition,光学字符识别&#…

作者头像 李华
网站建设 2026/2/23 14:42:56

制造业质检报告OCR:结构化数据提取实战

制造业质检报告OCR:结构化数据提取实战 📌 引言:从非结构化图像到可分析数据的跨越 在现代制造业中,质量检测是保障产品一致性和合规性的关键环节。大量质检数据以纸质报告、扫描件或现场拍照的形式存在,这些非结构化图…

作者头像 李华