如何使用Python在3dMax控制网格对象?

我们以一个在3dMax中使用Python脚本在网格对象对象上创建水波变形作为例子。

首先,在3dmax创建两个对象,一个“box”对象,将长宽方向的分段设置的多一些(目的是为了后面的水波变形),一个“点”帮助对象(它将指示涟漪的中心位置)。

脚本编写的思路是:通过循环遍历网格对象的顶点,获取它们的世界坐标位置,并将新的Z位置设置为距效果中心距离的正弦函数。

下面我们看一下代码:

import math
from MaxPlus import Factory
from MaxPlus import ClassIds
from MaxPlus import INode
from MaxPlus import TriObject
from MaxPlus import Matrix3
from MaxPlus import Point3# Intensity:
effecr_mult = 1.0# Effect center:
effector = INode.GetINodeByName('Point001')
effect_pos = effector.GetWorldPosition()# Prepare object and eccess it's mesh data:
node = INode.GetINodeByName('Box001')
new_edit_mesh_mod = Factory.CreateObjectModifier(ClassIds.Edit_Mesh)
node.AddModifier(new_edit_mesh_mod)
node.Collapse(True)
node_tm = node.GetWorldTM()
node_pos = node.GetWorldPosition()
obj = node.GetObject()
triobj = TriObject._CastFrom(obj)
mesh = triobj.GetMesh()# Process the object's vertices:
for i in range(mesh.GetNumVertices()):# Get vertex in world spacevert_pos = mesh.GetVertex(i)vert_world_pos = node_tm.VectorTransform(vert_pos)vert_world_pos = vert_world_pos + node_pos# Get vertex distance from effect center:diff_vec = vert_world_pos - effect_pos diff_vec.Z = 0dist = diff_vec.GetLength()# Set new vertex position:mesh.SetVert(i,vert_pos.X,vert_pos.Y,vert_pos.Z + math.sin(dist)*effecr_mult)

将上面代码复制到MAXScript编辑器中,然后,将当前语言设置为:Python,同时按下“Ctrl+e”执行,结果如下图:

提示:在复制和粘贴本例中的Python脚本时,请注意缩进可能无法正确粘贴。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/218303.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

王者农药小游戏

游戏运行如下: sxt Background package sxt;import java.awt.*; //背景类 public class Background extends GameObject{public Background(GameFrame gameFrame) {super(gameFrame);}Image bg Toolkit.getDefaultToolkit().getImage("C:\\Users\\24465\\D…

辅助驾驶功能开发-系统方案篇-地平线超级驾驶解决方案介绍

01.产品方案 Horizon Matrix SuperDrive超级驾驶解决方案,助力汽车智能化步入人机共驾时代 SuperDrive超级驾驶解决方案,全面整合了自动驾驶、智能交互、云端大脑三大模块,形成完整的泛车载AI人工智能系统,帮助整车智能化提升到一个新的高度。该方案的核心硬件-车载中央计…

链表?细!详细知识点总结!

链表 定义:链表是一种递归的数据结构,它或者为空(null),或者是指向一个结点(node)的引用,该结点含有一个泛型的元素和一个指向另一条链表的引用。 ​ 其实链表就是有序的列表,它在内…

YOLOv8改进 | 2023 | FocusedLinearAttention实现有效涨点

论文地址:官方论文地址 代码地址:官方代码地址 一、本文介绍 本文给大家带来的改进机制是Focused Linear Attention(聚焦线性注意力)是一种用于视觉Transformer模型的注意力机制(但是其也可以用在我们的YOLO系列当中从而提高检测…

虹科Pico汽车示波器 | 汽车免拆检修 | 2011款瑞麒M1车发动机起动困难、加速无力

一、故障现象 一辆2011款瑞麒M1车,搭载SQR317F发动机,累计行驶里程约为10.4万km。该车因发动机起动困难、抖动、动力不足、热机易熄火等故障进厂维修。用故障检测仪检测,发动机控制单元(ECU)中存储有故障代码“P0340相…

不同视频格式如何一键生成二维码?二维码视频制作在线技巧

现在通过扫码看视频是很多人在使用的一种方式,通过制作视频二维码来引导用户了解自己的内容,但是视频有很多种不同的格式,那么有什么方法能够将不同格式的视频生成二维码呢?下面来教大家一招,通过在线的视频二维码生成…

Windows Server 2012R2 修复CVE-2016-2183(SSL/TLS)漏洞的办法

一、漏洞说明 Windows server 2012R2远程桌面服务SSL加密默认是开启的,且有默认的CA证书。由于SSL/ TLS自身存在漏洞缺陷,当开启远程桌面服务,使用漏洞扫描工具扫描,发现存在SSL/TSL漏洞。远程主机支持的SSL加密算法提供了中等强度的加密算法,目前,使用密钥长度大于等于5…

2.Linux系统及常用命令

目录 一、Linux文件系统和目录 1.1 Linux文件系统 1.2Linux主要目录 二、Linux远程连接 2.1前置条件 2.2 具体远程操作 三、Linux的常用命令 3.1 Linux命令的格式 3.2 Linux命令的帮助信息查看 3.3 Linux文件操作常用命令 命令中快捷键 以管理员权限执行命令 3.3.1…

重生之我是一名程序员 41 ——字符串函数(2)

哈喽啊大家晚上好!今天呢我们延续昨天的内容,给大家带来第二个字符串函数——strcat函数。 首先呢,还是先带大家认识一下它。strcat函数是C语言中用于将两个字符串连接起来的函数,其函数原型为: char *strcat(char *…

Ubuntu 安装 JMeter:轻松上手

Apache JMeter 是一个开源的负载测试工具,可以用于测试静态和动态资源,确定服务器的性能和稳定性。在本文中,我们将讨论如何下载和安装 JMeter。 安装 Java(已安装 Java 的此步骤可跳过) 要下载 Java,请遵…

Kotlin学习——kt中的类,数据类 枚举类 密封类,以及对象

Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

多项式求和之十二

题目描述 给定程序中函数 fun 的功能是:计算 sf(-n)f(-n1)…f(0)f(1)f(2)…f(n)的值。 f(x)函数定义如下: 输入格式 输入参数。 输出格式 计算公式返回的结果。 输入输出样例 输入1 5 输出1 10.407143 def fun(n):"""s f(-n) …