MAXScript实现简单的碰撞检测教程

news2024/7/5 0:08:39

在本教程中,我们将创建一个使轮子在地形上跟随的脚本。此脚本将没有任何UI。并且仅适用于特定对象。

因此,第一步是创建一个新的脚本。打开侦听器窗口,然后在文件菜单下选择“新建脚本…”。

我们首先需要创建与场景中的对象相对应的3个变量。

terrainGeometry = $ground          
rayCaster = $WheelGuide          
wheel = $wheel

          

这三个变量表示或接地、车轮和车轮控制对象。轮子本身会应用很多动画,所以为了保持整洁,我们将把它作为控制对象的父对象。我们将在地形上设置轮子导向的动画,并让脚本使轮子几何体跟随地面。让我们看看相应的最大文件。    

          

          

这个文件中有三个对象,它们对应于脚本中的三个变量。您将看到车轮是车轮导向器的父对象。车轮导向装置只是一个样条曲线对象。地形是一个添加了噪波的平面。车轮导向器上有一些动画。它在地形上以直线行驶。用于创建代码以使轮子跟随地形。

rayToTerrain = ray rayCaster.pos [0,0,-1]      

Zposition = intersectRay terrainGeometry rayToTerrain      

wheel.pos.z = Zposition.pos.z + rayCaster.radius

三行代码,我们已经掌握了。如果你将文本复制并粘贴到maxscipt中并进行评估,轮子将下降到地形上。让我们看看为什么这样做。

变量rayToTerrain是该代码的关键。我们在里面储存着一束光线。射线是三维空间中具有原点和方向的线。在数学术语中,它被称为向量。因此,为了让车轮与地面碰撞,我们从地形上方的一点直接向下发射光线。因此,我们使用车轮导轨作为起点,因为我们知道它在地面上。我们使用变量rayCaster,而不是键入$WheelGuide。我们这样做是为了方便地更改在定义变量的顶部拍摄光线的内容,而不必在代码的每个实例中都更改这个名称。因此,rayCaster.pos等于$WheelGuide的x,y,z位置。    

数字[0,0,-1]表示一个point3值。这是矢量的方向。我们需要对值进行归一化,这意味着所有数字加起来就是一。因此,在point3变量中,这三个数字表示x、y和z。因此,如果你想将光线投射到墙上,你可以使用同一行代码,但将point3值更改为[1,0]

下一个变量Zposition使用另一个新的maxscript命令。intersectRay。此命令的格式为intersectRay节点射线。因此,节点是光线将相交的对象,而光线是我们之前设置的rayToTerrain变量。输出是一个point3值,该值给出光线击中节点几何体的3D点。

最后一行设置车轮位置。我们知道光线与地面相交的点,所以我们只需将轮子的z位置(wheel.posz)设置为等于我们存储在z位置中的相交值。然后我们加上轮子的半径,将其推离地面。一个有趣的尝试是调整圆的半径,并在重新运行脚本时看到结果。

让我们更改代码,以便在动画过程中设置轮子的动画。这是代码:

terrainGeometry = $ground
rayCaster = $WheelGuide
wheel = $wheel
disableSceneRedraw() 
with animate on
(
       for currentTime = animationRange.start to animationRange.end do
       (
              slidertime = currentTime
              rayToTerrain = ray rayCaster.pos [0,0,-1]
              Zposition = intersectRay terrainGeometry rayToTerrain
              wheel.pos.z = Zposition.pos.z + rayCaster.radius        
       )
)
enableSceneRedraw()

我们在这里所做的只是禁用场景重绘(disableSceneRedaw)来加快脚本的速度。如果我们不这样做,Max将重新绘制每一个更改,并且速度会慢得多。完成后,我们必须记住启用场景绘制,否则Max将不会更新视口。然后,我们创建一个从第一帧到最后帧的循环,并按帧向下移动轮子。我们在这里介绍的另一个新命令是启用animate,这就像打开animate按钮一样。

因此,如果我们现在运行脚本,轮子将在地形上设置动画,并随地面的上升和下降进行跟随。    

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对分过层后的类进行可视化

变量是&#xff1a; std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr> clusters_k_upper std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr> clusters_k_lower std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr> clusters_un…

Win10关机设置里没有睡眠选项的解决方法

用户想给自己的Win10电脑设置睡眠模式&#xff0c;但是在关机设置里面找不到睡眠选项&#xff0c;导致自己不能顺利完成睡眠模式的设置。接下来小编给大家带来解决Win10关机设置里没有睡眠选项的简单方法&#xff0c;解决后用户就可以看到Win10电脑关机设置中有睡眠选项了。 Wi…

Scrum框架中的Sprint

上图就是sprint里要做的事。Sprint是scrum框架的核心&#xff0c;是所有的想法、主意转换为价值的地方。所有实现产品目标的必要工作都在sprint里完成&#xff0c;这些工作主要包括Sprint 计划&#xff08;Sprint planning&#xff09;、每日站会&#xff08;Daily Scrum&#…

Linux CentOS7 添加网卡

一台主机中安装多块网卡&#xff0c;有许多优势。可以实现多项功能。 为了学习网卡参数的设置&#xff0c;可以为主机添加多块网卡。与添加磁盘一样&#xff0c;要在VMware中设置。利用图形化方式或命令行查看或设置网卡。本文仅作一初步讨论。有关网络参数的设置不在讨论之列…

Linux系统编程学习 NO.9——git、gdb

前言 本篇文章简单介绍了Linux操作系统中两个实用的开发工具git版本控制器和gdb调试器。 git 什么是git&#xff1f; git是一款开源的分布式版本控制软件。它不仅具有网络功能&#xff0c;还是服务端与客户端一体的软件。它可以高效的处理程序项目中的版本管理。它是Linux内…

kk模组的具体应用场合

KK模组是一种高精度、高刚度的直线模组&#xff0c;广泛应用于各种自动化设备和精密仪器中。以下是KK模组的一些具体应用场合&#xff1a; 1、半导体设备&#xff1a;半导体制造过程中需要使用精密的定位和运动控制设备&#xff0c;KK模组作为一种高精度、高刚度的直线模组&…

【10套模拟】【6】

关键字&#xff1a; 有向图入度、无向图度、一次深度优先、快速排序平均性能、折半查找、判断是否是二叉排序树、链式直接入插入排序

进程程序替换与exec系统调用

进程程序替换 进程程序替换是指将一个正在运行的进程替换为另一个可执行程序。它的本质是调用了Linux操作系统中的exec系统调用。而exec系统调用是一个家族函数&#xff0c;例如execl、execv、execle、execve等。它们的共同特点是当当前进程执行到该函数时&#xff0c;就会直接…

AI机器学习 | 基于librosa库和使用scikit-learn库中的分类器进行语音识别

专栏集锦&#xff0c;大佬们可以收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https:/…

mmdet 3.x 打印各类指标

和mmdet2.x中的修改地方不一样&#xff0c;在mmdet/evaluation/metrics/coco_metric.py中第72行将classwise设为True就可以打印各类指标了 但是在test的时候一直都是什么指标都不打印&#xff0c;不管是上面总的指标还是下面的各类指标&#xff0c;暂时不知道怎么处理 找到原因…

二十三种设计模式全面解析-当你的对象需要知道其他对象的状态变化时,观察者模式是你的救星!

在软件设计的世界中&#xff0c;有一种设计模式以其简洁而强大的特性闪耀着光芒&#xff0c;它就是——观察者模式&#xff08;Observer Pattern&#xff09;。这个模式它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象&#xff0c;为我们创造…

高斯积分-Gaussian Quadrature

https://mathworld.wolfram.com/GaussianQuadrature.html

pyinstaller 打包pyqt6等ui文件为exe可执行程序的方法

刚开始使用auto-py-to-exe打包pyqt6的程序&#xff0c;折腾好半天都会出错&#xff0c;关键打包出来的exe单文件有快100兆了&#xff0c;真大啊&#xff01; auto-py-to-exe有图形界面&#xff0c;看起来比较直观。 还有中文语言&#xff0c;对使用者比较友善&#xff0c;可以…

大数据研发工程师课前环境搭建

大数据研发工程师课前环境搭建 第一章 VMware Workstation 安装 在Windows的合适的目录来进行安装&#xff0c;如下图 1.1 双击打开 1.2 下一步&#xff0c;接受协议 1.3 选择安装位置 1.4 用户体验设置 1.5 快捷方式 已经准备好安装&#xff0c;点击安装 1.6 安装中 1.7 安装…

linux基本指令总结--文件和目录

前言&#xff1a; 想要学好Linux操作系统&#xff0c;理解并熟悉一些基本的指令是必要的&#xff0c;下面我将整理出关于文件和目录操作的一些基本指令和用法&#xff0c;我的linux环境部署在服务器端&#xff0c;使用xshell软件进行远程操作。 本章指令整合&#xff1a; ls查…

【技术追踪】SAM(Segment Anything Model)代码解析与结构绘制之Mask Decoder

论文&#xff1a;Segment Anything   代码&#xff1a;https://github.com/facebookresearch/segment-anything 系列篇&#xff1a;   &#xff08;1&#xff09;【技术追踪】SAM&#xff08;Segment Anything Model&#xff09;代码解析与结构绘制之Image Encoder   &am…

如何在el-tree懒加载并且包含下级的情况下进行数据回显-01

在项目中做需求&#xff0c;遇到一个比较棘手的问题&#xff0c;el-tree懒加载在包含下级的时候&#xff0c;需要做回显&#xff0c;将选中的数据再次勾选上&#xff0c;在处理这个需求的时候有两点是比较困难的&#xff1a; el-tree是懒加载的&#xff0c;包含下级需要一层一…

DPDK初始化

rte_eal_init │ ├──rte_cpu_is_supported&#xff1a;检查cpu是否支持 │ ├──rte_atomic32_test_and_set&#xff1a;操作静态局部变量run_once确保函数只执行一次 │ ├──pthread_self() 获取主线程的线程ID,只是用于打印 │ ├──eal_reset_internal_config&#x…