news 2026/9/7 15:21:50

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/8/31 7:41:13

旅行社工作大减负!

旅游旺季一到,旅行社忙得脚不沾地?收集旅客证件、核对信息、规划行程,每一项都让人头大!别慌,现在有了 “神助攻”—— 护照阅读器,直接让旅行社工作效率拉满,轻松应对各种难题!旅行…

作者头像 李华
网站建设 2026/9/4 16:24:37

【C# 12顶级语句深度解析】:掌握现代C#编程的终极利器

第一章:C# 12顶级语句概述C# 12 引入的顶级语句(Top-Level Statements)极大简化了应用程序的入口点定义,使开发者能够以更简洁的方式编写控制台或小型项目程序,无需手动创建类和 Main 方法。这一特性特别适用于学习、原…

作者头像 李华
网站建设 2026/9/4 1:01:41

解锁本科论文新境界:书匠策AI——你的学术隐形导航仪

在本科学习的尾声,面对毕业论文这座“大山”,许多同学常常感到力不从心。选题迷茫、逻辑混乱、表达不专业、格式调整繁琐……这些问题像一道道难以跨越的坎,让原本就紧张的学业生活更加雪上加霜。然而,在科技日新月异的今天&#…

作者头像 李华
网站建设 2026/8/29 8:49:11

本科毕业季不再“从零写起”:一位理工科学生的AI协作手记——那些论文写作中被忽略的隐形效率杠杆

又到一年毕业季。图书馆的灯亮得更早,咖啡杯在桌上堆成小山,凌晨三点的寝室键盘声此起彼伏。作为刚刚完成本科毕业论文的“过来人”,我深知那种面对空白文档的窒息感——不是没想法,而是不知道如何把零散的思路变成一篇结构严谨、…

作者头像 李华