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

在本教程中,我们将创建一个使轮子在地形上跟随的脚本。此脚本将没有任何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按钮一样。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实战提升(六)

前言:Practice makes perfect!今天实战Leetcode链表分割还有回文结构。今天的题全都来自于牛客网。 实战一: 思路:我们一这个链表为例,小于5的链表尾插到第一个链表,大于5的链表尾插到第二个链表&#xf…

【开源】基于Vue.js的开放实验室管理系统的设计和实现

项目编号: S 013 ,文末获取源码。 \color{red}{项目编号:S013,文末获取源码。} 项目编号:S013,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实…

vim指令

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟练掌握vim,并且能用vim敲出简单的代…

【计算机组成原理】知识点巩固 - 存储器概述

目录 1、存储器分类 1.1、按存储介质分类 1.2、按存取方式分类 1.3、按信息的可改写性分类 1.4、按信息的可保存性分类 1.5、按功能和存取速度分类 2、存储器技术指标 2.1、存储容量 2.2、存取速度 3、存储系统层次结构 4、主存的基本结构 5、主存中数据的存放 5…

麒麟 ZYJ 服务器软件适配 参考示例

一、zyj 环境简介 1. ZYJ 概述 国产化 SMZYJ 是由国家 BM 主管部门鉴定并批准生产使用的国内自主开发的 整机 JM 国标设备,设备采用了自主设备基础硬件(飞腾、国科微等)、安全硬 件自主固件(昆仑等)自主 SM 专用操作…

7、传统CV之高斯滤波

这一节在上一节均值滤波的基础上,再进阶一下,了解一下什么是高斯滤波。 首先,如上一节所说,均值滤波是利用一个窗口在图片上滑动,每次都计算窗口内能看到的像素的平均值,然后将平均值作为滤波的输出,从而可以起到平滑图像、去噪点的作用。 有没有发现,此时并没有特别…

栈的实现及OJ练习(c语言)

目录 前言 栈 栈的实现(数组栈) 初始化栈 入栈 出栈 获取栈顶元素 获取栈中有效元素个数 检测栈是否为空 销毁栈 最终代码: 选择练习 栈的OJ题 前言 我们在之前已经学习了顺序表和链表的概念,它们有这样的优缺点&a…

4.2 Windows驱动开发:内核中进程线程与模块

内核进程线程和模块是操作系统内核中非常重要的概念。它们是操作系统的核心部分,用于管理系统资源和处理系统请求。在驱动安全开发中,理解内核进程线程和模块的概念对于编写安全的内核驱动程序至关重要。 内核进程是在操作系统内核中运行的程序。每个进…

键鼠自动化2.0展示

软件介绍:桌面键鼠自动化工具 Qtc 编写: 本软件采用Qt C编写,旨在提供高效、跨平台的桌面键鼠自动化解决方案。Qt C框架的选择确保了软件的稳定性、可靠性,并通过其图形用户界面实现了用户友好的操作体验。 鼠标移动与点击&#…

MySQL 的执行原理(一)

5.1 单表访问之索引合并 我们前边说过 MySQL 在一般情况下执行一个查询时最多只会用到单个二级 索引,但存在有特殊情况,在这些特殊情况下也可能在一个查询中使用到多个二 级索引,MySQL 中这种使用到多个索引来完成一次查询的执行方法称之为&…

物联网AI MicroPython学习之语法 SPI串行外设通信

学物联网,来万物简单IoT物联网!! SPI 介绍 模块功能: SPI串行外设驱动 接口说明 SPI - 构建SPI对象 函数原型:SPI(id, baudrate,polarity, phase,sck, mosi, miso)参数说明: 参数类型必选参…

webAPP基础学习

###视觉基础 part-I ####1.面试中常见的像素问题 >什么是像素? *1.什么是px? px-虚拟像素,css像素的单位 px是一个相对单位,相对于设备像素而言 >相对性 a.相对于同一个设备,css像素的可变的 css像素物理像素>会受到缩放的影响 css像素缩放倍数*单个物理像…

django理解02 前后端分离中的问题

前后端分离相对于传统方式的问题 前后端数据交换的问题跨域问题 页面js往自身程序(django服务)发送请求,这是浏览器默认接受响应 而请求其它地方是浏览器认为存在潜在危险。自动隔离请求!!! 跨域问题的解决…

蓝桥杯 枚举

例题讲解 特别数的和 #include<iostream> using namespace std; bool ifspecial(int n){while(n){if(n%100||n%101||n%102||n%109){return true;} n/10;}return false; } int main(){int n;cin>>n;int sum0;for(int i1;i<n;i){if(ifspecial(i)){sumi;}}cout&l…

K-Means算法进行分类

已知数据集D中有9个数据点&#xff0c;分别是&#xff08;1,2&#xff09;&#xff0c;(2,3), (2,1), (3,1),(2,4),(3,5),(4,3),(1,5),(4,2)。采用K-Means算法进行聚类&#xff0c;k2&#xff0c;设初始中心点为&#xff08;1.1,2.2&#xff09;&#xff0c;&#xff08;2.3,3.…

LitCTF2023 - Reverse方向 全WP

文章目录 [LitCTF 2023]世界上最棒的程序员[LitCTF 2023]ez_XOR[LitCTF 2023]enbase64[LitCTF 2023]snake[LitCTF 2023]程序和人有一个能跑就行了[LitCTF 2023]debase64[LitCTF 2023]For AiurLitCTF{Pylon_OverCharge!!_We_Must_construc7_addition4l_pylons} [LitCTF 2023]世界…

【giszz笔记】产品设计标准流程【6】

目录 六、组织评审 1.评审的类型 2.评审的人员——谁参加评审 3.评审的核心——怎么提问 & 答案谁说了算 4.评审的流程——前中后三部曲 5.评审的标的——漂亮的靶子 6.避免被“烤”问的一些技巧 7.搞几次评审比较好 这个产品设计系列&#xff0c;陆陆续续写了6篇了…

JavaEE进阶(1)Java EE 简述(Java EE 发展历程、什么是Web开发? Web网站的工作流程、什么是框架?Java EE 框架学习概览)

目录 Java EE 简述 Java EE 发展历程 什么是Web开发? Web网站的工作流程 什么是框架 框架的定义 源于建筑行业的类比 框架的作用 Java EE 框架学习概览 1. Spring 2. Spring Boot 3. Spring MVC 4. Mybatis 框架之间的关系 Java EE 简述 Java EE是Java平台的企…

C#实现观察者模式

观察者模式是一种软件设计模式&#xff0c;当一个对象的状态发生变化时&#xff0c;其所有依赖者都会自动得到通知。 观察者模式也被称为“发布-订阅”模式&#xff0c;它定义了对象之间的一对多的依赖性&#xff0c;当一个对象状态改变时&#xff0c;所有依赖于它的对象都会得…

IO多路转接之select和poll

目录 一. IO多路转接的概念 二. 通过select实现IO多路转接 2.1 select接口 2.2 Select服务器的实现 2.3 select实现IO多路转接的优缺点 三. 通过poll实现IO多路转接 3.1 poll接口 3.2 Poll服务器的实现 3.3 poll实现IO多路转接的优缺点 四. 总结 一. IO多路转接的概念…