news 2026/5/12 6:04:55

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/5/9 21:15:16

终极免费3D点云标注工具:5分钟快速上手完整指南

终极免费3D点云标注工具:5分钟快速上手完整指南 【免费下载链接】point-cloud-annotation-tool 项目地址: https://gitcode.com/gh_mirrors/po/point-cloud-annotation-tool 在自动驾驶和机器人技术飞速发展的今天,3D点云标注已成为计算机视觉领…

作者头像 李华
网站建设 2026/5/9 7:53:06

AI内容创业第一步:如何快速搭建Z-Image-Turbo商业应用原型

AI内容创业第一步:如何快速搭建Z-Image-Turbo商业应用原型 如果你是一位内容创作者,想要利用AI技术开展艺术定制服务,但又被复杂的技术部署流程劝退,那么Z-Image-Turbo可能是你的理想选择。这款由阿里通义团队开源的图像生成模型&…

作者头像 李华
网站建设 2026/5/9 15:31:13

5分钟搞定手机弹窗:李跳跳智能跳过终极方案

5分钟搞定手机弹窗:李跳跳智能跳过终极方案 【免费下载链接】LiTiaoTiao_Custom_Rules 李跳跳自定义规则 项目地址: https://gitcode.com/gh_mirrors/li/LiTiaoTiao_Custom_Rules 为什么你的手机总是弹窗不断?广告、更新提示、权限请求...这些烦人…

作者头像 李华
网站建设 2026/5/10 7:58:38

CRNN OCR在政府办公中的应用:公文自动处理方案

CRNN OCR在政府办公中的应用:公文自动处理方案 引言:OCR 文字识别的现实需求 在政府办公场景中,每天都会产生大量纸质公文、通知、审批表、档案材料等非结构化文档。传统的人工录入方式不仅效率低下,还容易因疲劳或字迹不清导致信…

作者头像 李华
网站建设 2026/5/11 9:01:21

OCR识别成本优化:CRNN CPU版的经济性分析

OCR识别成本优化:CRNN CPU版的经济性分析 📖 项目背景与行业痛点 在数字化转型加速的今天,OCR(光学字符识别)技术已成为文档自动化、票据处理、智能客服等场景的核心支撑。传统OCR方案多依赖高算力GPU集群或商业API服务…

作者头像 李华
网站建设 2026/5/10 7:59:59

CRNN OCR在车牌识别系统中的实战应用

CRNN OCR在车牌识别系统中的实战应用 📖 项目背景:OCR文字识别的工业需求 光学字符识别(Optical Character Recognition, OCR)是计算机视觉领域的重要分支,其核心任务是从图像中自动提取可读文本。随着智能交通、文档数…

作者头像 李华