doom3 Articulated Figures编辑器
原文地址 https://www.iddevnet.com/doom3/afs.php
但是原文需要翻墙,才能验证,而且全部是英文,我个人认为英文,我实在是不喜欢,能看懂英文,但是看英文实在是觉得很麻烦,理解的速度太慢了
我用谷歌翻译翻译了一下子,我觉得翻译的质量,比我翻译的要强一点点,处于节约时间的考虑,
我觉得还是有必要看一下子的。
artifulated figure(铰链数字)大多数人被称为“布娃娃”。以下是一个很好的文件,说明他们如何工作,由最优秀的MrElusive打造。
一个铰接的人物是将这些身体保持在一起的刚体和约束的集合。基于牛顿力学的动态模拟被用来在力量和碰撞的影响下将身体移动到世界各地。一个铰接图的每个身体修改骨骼模型的一个关节。身体相对于其初始位置的旋转变化被应用于骨骼模型的关节。
要创建一个铰接图,需要一个带骨架的md5网格(.md5mesh)。此外,单个动画框架需要初始动画(.md5anim)。该动画框架将模型设置为用于创建铰接图形的姿态。对于像人物这样的角色,这通常是一个T形姿势。初始动画的单帧还指定了由铰接图的身体修改的初始关节位置。
每个铰接的图形都在一个单独的.af文件中指定,存储在base / af /文件夹中。要在游戏中加载和测试一个关联的图形,在存储在base / def /文件夹中的.def文件之一中创建一个entityDef。这样的entityDef通常如下所示:
entityDef env_ragdoll_fatty {“editor_color”“1.5”“editor_mins”“-8 -8 -8”“editor_maxs”“8 8 8”“editor_usage”“Ragdoll for monster_zombie_fat \ n”“spawnclass”“idAFEntity”“流血”“1”“睡觉”“1”“皮肤”“皮肤/模特/怪物/脂肪”“model”“models / md5 / monsters / zfat / zfat.md5mesh”“anim af_pose”“models / md5 / monsters / zfat / initial.md5anim”“articulated图”“monster_zombie_fat” }
“spawnclass”始终指向“idAFEntity”。关键的“睡眠”设置为1,所以铰接的图形在生成时不会立即开始移动。“模型”键指向md5网格。带有“af_pose”扩展名的“anim”键指向带有初始动画的文件。“articulatedFigure”键指向要使用的.af文件。
.af文件首先存储具有常规设置的部分,然后收集正文和约束。
铰接图设置的结构如下所示:
设置{关键参数 }
网格“md5mesh” | md5网格用于铰接图 |
动画“md5anim” | 初始动画(t-pose) |
皮肤“皮肤” | 使用皮肤 |
摩擦<线性>,<角度>,<接触> |
所有身体的默认摩擦力。 线性和角摩擦值指定平移和旋转空气摩擦。接触摩擦值指定与接触面的摩擦力。摩擦值通常在[0,1]的范围内。 |
selfCollision 0/1 | 自检检测的默认设置 |
suspendSpeed <线速度> <角速度> <线性加速度> <角加速度> |
关节运动的身体休息 的速度指定的线性和角速度是关节运动的数字可能停止的最大速度。指定的线性和角加速度是铰接图可能停止的最大加速度。 |
totalMass <mass> |
铰链图的总质量。 如果总质量设置为大于零的值,则每个身体的质量被缩放,使得铰接图的总质量等于给定质量。 |
一个身体的结构如下:
身体“名称”{关键参数 }
联名“联名” |
身体修改的关节 总是有一个修改骨骼模型的起始关节的身体。该身体的位置和方向用于将整个骨骼模型移动到世界各地。这个机构的关键是设定为“起源”。 |
模型[碰撞模型] | 身体可以使用几种不同的碰撞模型。这样的碰撞模型是用模型键指定的: 模型框((min_x,min_y,max_z))(max_x,max_y,max_z))模型八面体((min_x,min_y,min_z),(max_x,max_y,max_z))模型十二面体((min_x,min_y,min_z)模型圆锥((min_x,min_y,min_z),(max_x,max_y,max_z),numSides)模型圆柱体((min_x,min_y,min_z)),(max_x,max_y,max_z),numSides) bone((start_x,start_y,start_z),(end_x,end_y,end_z),width)model custom(“name”) |
来源(x,y,z) | 碰撞模型必须放置在相对于身体修改的关节的正确位置。此键指定碰撞模型中心的位置。 |
角度(俯仰,偏航,滚动) | 碰撞模型可以用角度键旋转原点 |
密度<值> | 碰撞模型的密度。身体的质量等于碰撞模型体积的密度乘以。 |
摩擦<线性>,<角度>,<接触> |
可以为每个身体指定不同的摩擦性能。 线性和角摩擦值指定平移和旋转空气摩擦。接触摩擦值指定与接触面的摩擦力。摩擦值通常在[0,1]的范围内。 |
selfCollision 0/1 | 设置每个身体的自身碰撞检测 |
包含“联合名单” | 抛物线与骨骼模型的视觉网格碰撞。对于网格上的冲击位置,取骨骼模型的最接近的关节。从这个关节,影响被转移到一个关键人物的身体。每个身体都有一个列表,其关节或多或少被身体所包含。关节附近的冲击被转移到包含关节的身体。关节只能由一个身体包含,每个关节必须由身体包含。身体所包含的关节用包含的关节键指定。 |
可以使用几个约束来连接关节数字的物体。约束用如下结构指定:
constraintType“name”{关键参数 }
constraintType是以下约束类型之一:
- ballAndSocketJoint
- universalJoint
- 合页
- 弹簧
对于每个约束,指定两个由约束连接的主体。这些主体用body1和body2键指定。
body1“name” body2“name”
body2键可以指向称为“世界”的特殊机构,在这种情况下约束将body1连接到世界。
除了两个连接的身体之外,每个约束都具有特定于下面列出的约束类型的多个设置。
锚(x,y,z) | 指定球的中心(必需) |
conelimit(axis_x,axis_y,axis_z), <angle>,(shaft_x,shaft_y,shaft_z) |
指定锥形极限。 锥轴由第一个矢量指定。顶部锥体的角度跟随。锥体连接到主体2。接下来,指定连接到主体1的轴,并且被限制为始终保持在锥体内。 |
pyramidlimit(axis1_x,axis1_y,axis1_z), <angle1>,<angle2>,<angle3>, (shaft_x,shaft_y,shaft_z) |
指定一个金字塔形极限。 金字塔轴由第一个向量指定。第一和第二个角度指定金字塔顶部的角度。第三个角度指定金字塔围绕金字塔轴的旋转。金字塔与身体2相连。接下来,指定连接到主体1的轴,并且被限制为始终保持在金字塔内。 |
摩擦<值> | 指定关节摩擦。摩擦值通常在[0,1]的范围内。 |
万向接头与球窝接头非常相似。然而,连接到主体的两个轴的旋转也受到限制。
锚(x,y,z) | 指定万向节的锚点(必需) |
轴(dir1_x,dir1_y,dir1_z), (dir2_x,dir2_y,dir2_z) |
指定两个轴(必需) 第一个轴连接到主体1并指向主体1或朝向主体1。第二轴连接到主体2并指向主体2或朝向主体2。主体1相对于主体2围绕这些轴的旋转受到约束。 |
conelimit(axis_x,axis_y,axis_z),角度 |
指定锥形极限 锥形轴由第一个矢量指定。顶部锥体的角度跟随。锥体连接到主体2。连接到主体1的第一个轴被限制为始终保持在锥体内。 |
pyramidlimit(axis1_x,axis1_y,axis1_z), angle1,angle2,angle3 |
指定一个金字塔形极限。 金字塔轴由第一个向量指定。第一和第二角度指定金字塔顶部的角度。第三个角度指定金字塔围绕金字塔轴的旋转。金字塔与身体2相连。连接到主体1的第一根轴被限制为始终保持在金字塔内。 |
摩擦<值> | 指定关节摩擦。摩擦值通常在[0,1]的范围内。 |
铰链由锚和铰链轴指定,两个主体可围绕该铰链轴相对于彼此旋转。
锚(x,y,z) | 指定锚点 |
轴(axis_x,axis_y,axis_z) | 指定铰链轴 |
极限角度1,角度2,角度3 |
指定V形极限 第一个角度指定V形极限的中心。指定V形极限宽度的角度如下。V形附在body2上。接下来,指定连接到主体1并且被限制为始终保持在V形内的轴。该轴的方向用第三个角度指定。 |
摩擦<值> | 指定关节摩擦。摩擦值通常在[0,1]的范围内。 |
弹簧由两个锚定体指定,每个约束体上有一个。
anchor1(x,y,z) | 指定第一个锚点 |
anchor2(x,y,z) | 指定第二个锚点 |
摩擦<值> | 指定关节摩擦。摩擦值通常在[0,1]的范围内。 |
拉伸<值> | 弹簧伸长时弹簧不变 |
压缩<value> | 当弹簧压缩时弹簧恒定 |
阻尼<值> | 弹簧阻尼 |
restLength <value> | 春天的休息长度 |
minLength <value> | 弹簧的最小长度 |
maxLength <value> | 弹簧的最大长度 |
3D向量用于指定身体的位置,方向和方向以及约束。在.af文件中指定这样一个向量有四种方式
(x,y,z) | 相对于md5原点的位置 |
联合(“联名”) | 关节的位置 |
bonecenter(“开始联名”,“最终联名”) | 骨关节在两个关节之间 |
bonedir(“开始联名”,“联名”) | 从一个关节到另一个关节的骨骼的方向 |
- 最小化身体和限制的数量
- 使用低复杂性的碰撞模型
- 创建一个树结构
- 尽可能不要使用接头摩擦,尽管接头摩擦会增加稳定性
- 不要对不需要自身碰撞的物体进行自身碰撞检测
- 铰接图表示奇怪或爆炸。
确保每个身体的质量在合理范围内。使用af_showMass 1显示每个身体的质量。范围[1,100]中的体重通常很好。连接一个很重的身体与轻便的身体经常会导致问题。通常明智的做法是不要使关节的数字太重。将重物保持在一起所需的力量可能会增长很大,并且可能不会在物理引擎中准确表示。 - 铰接图表示奇怪或爆炸。
确保每个身体的惯性张量描述合理的平衡对象。使用af_showInertia 1显示每个身体的惯性张量。惯性张量的非常不同的对角元素可能会导致不稳定。每体惯量标度可以用于缩放身体的惯性张量,使得对角线元素相对于彼此最终达到合理的范围。 - 关键的数字是跳跃的,能量似乎进入系统。
确保没有接触点与联合作战的约束。当例如三个主体与两个万向节连接时,并且主体相对靠近。外部两个物体可能被认为是接触的。这个数字将在接触点被拉开,而万向接头试图将身体保持在一起。跳跃行为往往是结果。在整个图形或某些物体上禁用自身碰撞可以解决问题。
几个cvars和控制台命令可用于(重新)加载和可视化关联数字。
一旦为一个铰接的数字创建了一个实体def,那么'spawn'控制台命令后跟实体def的名称可以用来加载游戏中的关联数字。'reloadAFs'控制台命令可用于重新加载所有铰接图。该命令使所有铰接的图形能够回到初始动画指定的姿势。
为了可视化关节数字的几个物理属性,可以使用以下cvars:
af_showBodies | 显示身体的碰撞模型 |
af_showBodyNames | 显示每个身体的名字 |
af_showMass | 显示每个身体的质量 |
af_showTotalMass | 显示关节数字的总质量 |
af_showInertia | 显示每个身体的惯性张量矩阵 |
af_showActive | 只有在没有休息的情况下才能显示树 |
af_showVelocity | 显示每个身体的线性和角速度矢量 |
af_showConstraints | 显示所有限制 |
af_showConstraintNames | 显示每个约束的名称 |
af_showConstrainedBodies | 显示由约束约束的两个主体 |
af_showPrimaryOnly | 仅显示主要约束 |
af_showTrees | 显示关节图的树结构 |
af_showLimits | 显示联合限制 |
通过将cvar'r_showSkel'设置为1,可以可视化md5模型的骨架。
为了测试表达式的数字,可以将它们接收并拖动它们。当cvar g_dragEntity设置为1时,可以选择并移动清晰的图形。要选择一个铰接的图形,十字准线指向视觉网格上的某个位置,并按下攻击按钮。当攻击按钮被按下时,铰接的人物可以通过走动(或以noclip模式飞行)并环绕四周而被拖动穿过世界。
选择拖动的最后一个关联图被包含在一个黄色边框中。可以使用控制台命令“deleteRagdoll”从游戏中删除此关联图。一旦关联的图形位于地图中,它们可以使用控制台命令“saveRagdolls”保存到.map文件。保存到.map文件的铰接图不会从“deleteRagdoll”命令从.map文件中删除。任何关联的图可能仍然会从级别编辑器中的.map文件中删除。
步行逆运动学使脚保持在地板上,即使在不平坦的地形上行走。
doom3 Articulated Figures编辑器相关推荐
- doom3毁灭战士3关卡编辑器指南
doom3关卡编辑器指南 我上传的quake3地图编辑指南chm文件格式,对于理解doom3地图制作大同小异 (以前上传的时候,将要扣除你的积分5分,我很后悔,但是再次上传时,csdn不允许了.) h ...
- Quake4的gui
原文地址https://www.iddevnet.com/quake4/GUIEditor Quake4的gui跟doom3的关卡编辑器基本上一模一样,我觉得 反正都是doom3的引擎代码,挖过来,看 ...
- 地表最强排版公式编辑器---Latex教程笔记
LaTex教程 安装TexLive 几个常用命令 安装集成开发环境TexStudio **安装成功后结果如下** LaTex源文件的基本结构 教学原视频 基本结构 运行结果 LaTex中的中文处理方法 ...
- lisp协议instand_分享|Linux 上 10 个最好的 Markdown 编辑器
在这篇文章中,我们会点评一些可以在 Linux 上安装使用的最好的 Markdown 编辑器. 你可以在 Linux 平台上找到非常多的 的 Markdown 编辑器,但是在这里我们将尽可能地为您推荐 ...
- Linux shell 学习笔记(6)— vim 编辑器使用方法及技巧
1. 检查 vim 软件包 1.1 CentOS 发行版 $ alias vi alias vi='vim' $ $ which vim /usr/bin/vim $ $ ls -l /usr/bin ...
- Centos7 下安装VIM编辑器
我们在安装完Centos后,它默认的是安装了VI编辑器,VIM是没有安装的,所以我们在使用vim test.txt时会提示: vim command not found ... 这就是说明我们的Lin ...
- Django 第三方引用富文本编辑器6.1
借助富文本编辑器,管理员能够编辑出来一个包含html的页面,从而页面的显示效果,可以由管理员定义,而不用完全依赖于前期开发人员 此处以tinymce为例,其它富文本编辑器的使用可以自行学习 使用编辑器 ...
- Vim编辑器的常用快捷键.
Linux中的文本操作离不开Vim编辑器的使用. Vim编辑器的使用相对门槛较高.需要挺长一段时间的适应. 总结一些Vim使用过程中常用的命令(这些命令基本上都是在vim的命令模式下使用) 1.跳转到 ...
- 《学习vi编辑器》的学习笔记1
第一章 vi文本编辑器 打开文件vi [filename] 输入:q在缓冲区中内容和磁盘内容一致的时候退出,否则就需要输入:q!来忽略这个限制,不保存缓冲区,直接退出 命令模式:每次输入都表示一个命令 ...
最新文章
- Command命令设计模式
- php 数组重新打乱_PHP 将数组打乱 shuffle函数的用法及简单实例
- LeetCode 15 二进制中1的个数
- mysql镜像远程连接_docker 创建mysql镜像,并成功进行远程连接
- 漫步微积分三十六——曲面的面积
- Python中的字符串与字符编码
- 【zookeeper】zookeeper znode 存储系统解密
- 贪吃蛇javascript代码_源于Jquery开发贪吃蛇游戏——简单思路分析总结
- kafka从头消费信息
- Ubuntu使用记录:安装deb软件方法以及apt、apt-get和dpkg的区别
- YOLO: 3 步实时目标检测安装运行教程 [你看那条狗,好像一条狗!]
- day16正则表达式作业
- Stealing Harry Potter‘s Precious BFS+DFS
- 获取百度地图开发平台的key
- 2022年4月13日记
- 如何把PDF中一些页面拆分成每一页单独的文件
- 服务器显示蜘蛛,新换服务器后蜘蛛都不来捉取文章链接怎么办?
- 数据结构之链表(LinkedList详解)
- Laragon集成环境安装
- mtk 5.1版本霍尔开关驱动的调试
热门文章
- 完满(Full)二叉树,完全(Complete)二叉树, 完美(Perfect)二叉树
- 极速pdf编辑器的水印如何去掉_如何使用极速PDF编辑器修改PDF文档的页面大小?...
- PDF不能编辑的问题如何解决?
- 获取 Nuget 版本号
- 外汇期权及外汇保证金
- 01迷宫(记忆化搜索)
- 集美大学计算机毕业论文,咨询关于集美大学毕业论文检测的问题
- 海康威视SDK控制台程序consoleDemo
- 炮弹仿真系统matlab软件下载,基于Matlab/Simulink的导弹六自由度弹道仿真系统设计...
- C++ 设计模式之单例模式