news 2026/4/28 4:34:35

Rotations 物体绕轴旋转

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Rotations 物体绕轴旋转

一:主要的知识点

1、说明

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

2、知识点纪要

本段代码主要涉及的有①物体如何绕轴旋转,②渲染的擦除功能EraseOff


二:代码及注释

import time import vtkmodules.vtkInteractionStyle import vtkmodules.vtkRenderingOpenGL2 from vtkmodules.vtkCommonColor import vtkNamedColors from vtkmodules.vtkRenderingCore import vtkRenderer, vtkRenderWindow, vtkRenderWindowInteractor, vtkPolyDataMapper, vtkActor from vtkmodules.vtkIOPLY import vtkPLYReader from vtkmodules.vtkIOXML import vtkXMLPolyDataReader from vtkmodules.vtkIOGeometry import vtkOBJReader, vtkSTLReader, vtkBYUReader from vtkmodules.vtkFiltersGeneral import vtkAxes from vtkmodules.vtkFiltersSources import vtkSphereSource def ReadPolyData(file_name): import os path, extension = os.path.splitext(file_name) extension = extension.lower() if extension == '.ply': reader = vtkPLYReader() reader.SetFileName(file_name) reader.Update() poly_data = reader.GetOutput() elif extension == '.vtp': reader = vtkXMLPolyDataReader() reader.SetFileName(file_name) reader.Update() poly_data = reader.GetOutput() elif extension == '.obj': reader = vtkOBJReader() reader.SetFileName(file_name) reader.Update() poly_data = reader.GetOutput() elif extension == '.stl': reader = vtkSTLReader() reader.SetFileName(file_name) reader.Update() poly_data = reader.GetOutput() elif extension == '.vtk': reader = vtkXMLPolyDataReader() reader.SetFileName(file_name) reader.Update() poly_data = reader.GetOutput() elif extension == '.g': reader = vtkBYUReader() reader.SetGeometryFileName(file_name) reader.Update() poly_data = reader.GetOutput() else: # Return a sphere if the extension is unknown. source = vtkSphereSource() source.Update() poly_data = source.GetOutput() return poly_data def RotateX(renWin, actor): actor.SetOrientation(0, 0, 0) for i in range(0, 6): time.sleep(1) actor.RotateX(60) renWin.Render() renWin.EraseOn() def RotateY(renWin, actor): actor.SetOrientation(0, 0, 0) for i in range(0, 6): time.sleep(1) actor.RotateY(60) renWin.Render() renWin.EraseOn() def RotateZ(renWin, actor): actor.SetOrientation(0, 0, 0) for i in range(0, 6): time.sleep(1) actor.RotateZ(60) renWin.Render() renWin.EraseOn() def main(): file_name = "Data/cow.obj" figure = 10 actor_color = "Wheat" colors = vtkNamedColors() colors.SetColor("BkgColor", (26, 51, 102, 255)) ren1 = vtkRenderer() renWin = vtkRenderWindow() renWin.AddRenderer(ren1) iren = vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) polyData = ReadPolyData(file_name) modelMapper = vtkPolyDataMapper() modelMapper.SetInputData(polyData) modelActor = vtkActor() modelActor.SetMapper(modelMapper) modelActor.GetProperty().SetDiffuseColor(colors.GetColor3d(actor_color)) if actor_color != 'Wheat': modelActor.GetProperty().SetSpecular(0.6) modelActor.GetProperty().SetSpecularPower(30) modelAxesSource = vtkAxes() modelAxesSource.SetScaleFactor(10) modelAxesSource.SetOrigin(0, 0, 0) modelAxesMapper = vtkPolyDataMapper() modelAxesMapper.SetInputConnection(modelAxesSource.GetOutputPort()) modelAxes = vtkActor() modelAxes.SetMapper(modelAxesMapper) ren1.AddActor(modelAxes) ren1.AddActor(modelActor) if actor_color == 'Wheat': ren1.SetBackground(colors.GetColor3d('BkgColor')) else: ren1.SetBackground(colors.GetColor3d('Silver')) renWin.SetSize(640, 480) renWin.SetWindowName('Rotations') ren1.ResetCamera() ren1.GetActiveCamera().Azimuth(0) ren1.GetActiveCamera().SetClippingRange(0.1, 1000.0) renWin.Render() if figure == 1: RotateX(renWin, modelActor) elif figure == 2: RotateY(renWin, modelActor) else: RotateZ(renWin, modelActor) """ EraseOff 关闭擦除功能 在3D渲染和动画中,一个基本的步骤是:在渲染新的一帧之前,必须将渲染窗口的整个背景和旧图像擦除(或清除)干净 默认行为: 擦除开启 步骤:清除屏幕 → 绘制新的一帧(物体的新位置)→ 显示 效果: 产生平滑、连续的动画效果。 关闭擦除: 步骤: 不清除屏幕 → 直接在旧图像上绘制新的一帧(物体的新位置)→ 显示。 效果: 每次渲染的物体图像都会保留在屏幕上,形成一种 “残影” 或 “轨迹叠加” 的效果。物体在连续运动中所经过的路径会被全部显示出来 """ renWin.EraseOff() iren.Start() if __name__ == '__main__': main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 22:23:34

Ollama 下载安装教程(2025 最新版):本地运行大模型的快速上手指南

一、前言 随着人工智能大模型技术的持续演进,大多数用户已经不再满足于仅通过在线服务或API来体验AI能力。越来越多的人希望能在自己的电脑上直接运行ChatGPT、LLaMA、Mistral等主流AI模型,从而获得更高的隐私性、更快的响应速度和更多个性化的控制空间…

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

JBL便携音箱播放HeyGem视频用于公共展示

JBL便携音箱播放HeyGem视频用于公共展示 在商场中庭,一台显示器正播放着一位虚拟讲解员的影像,她面带微笑、口型精准地介绍着当季促销活动——而她的声音并非来自设备内置扬声器,而是由角落里一台小巧的JBL音箱传出。画面与音频同步自然&…

作者头像 李华
网站建设 2026/4/22 21:36:56

企业微信审批通知语音化?HeyGem制作引导视频

企业微信审批通知还能这样玩?用HeyGem一键生成主管“亲口讲解”视频 在企业日常运营中,最让人头疼的不是技术难题,而是“沟通损耗”——明明发了通知,员工却视而不见;反复解释流程,还是有人搞错步骤。尤其…

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

4个月烧掉30亿Token,菜鸟程序员如何打造50多个AI产品?

长久以来,代码世界的大门似乎只对少数掌握秘术的人敞开。我们被告知:你必须先理解内存、掌握语法、忍受枯燥的文档,才配谈论创造。 现在,随着大模型的发展,编程不再是一场苦修,而是一场大型即时策略游戏。…

作者头像 李华
网站建设 2026/4/25 1:05:32

当硕士论文不再只是“熬时间”:一位研二学生如何用AI工具把模糊问题转化为可执行研究路径——书匠策AI的深度陪伴式写作实践

硕士阶段的论文写作,早已不是“写一篇长文章”那么简单。 它是一场高强度的思维训练:你得从海量文献中识别前沿缺口,设计严谨方法,处理复杂数据,还要在学术规范与创新表达之间走钢丝。更难的是,导师往往只…

作者头像 李华
网站建设 2026/4/21 4:57:18

三大变动归于一处,吉利瞄准“智能化”

文|刘俊宏编|王一粟2025年末,吉利已经在酝酿下一轮战略。就在短短一个月内,吉利连续经历了三次变动。在公司架构层面,吉利汽车控股有限公司宣布已完成对极氪智能科技的私有化及合并交易,极氪和领克再度回归…

作者头像 李华