Houdini 中关于矩阵的一些理解_houdini 矩阵_裤衩包饭的博客-程序员宅基地

技术标签: Houdini总结  houdini  

最近一直在矩阵方面的东西卡壳,所以决定花一段时间把这个玩意刚清楚。
关于矩阵的一些怎么运算,我就不做过多的解释了,因为网络上有很多关于矩阵的专业解读,也很全面。
我就关于矩阵在Houdini中的应用写点东西吧。
在Houdini中对一个物体进行旋转的基本vex代码就是这么写的。
matrix m = ident();
//创建一个标准的4*4矩阵:{1,0,0,0
										0,1,0,0
										0,0,1,0
										0,0,0,0}
float angle = radians(ch('angle'));
//自定义一个旋转角度。
vector axis = {0,1,0};
//你要旋转的轴向,这里是旋转Y轴。
rotate(m,angle,axis);
//对矩阵进行操作
@P *= m;
//用物体的位置和矩阵相乘来得到最终要旋转的位置

效果如下:
在这里插入图片描述
原理和道理还是很简单的。但是有一个一直卡壳的问题就是如果我的物体是变形的或者位置不在世界坐标的重心我如果要是在对他进行操作该怎么办。很简单就是反转一下矩阵,刚开始我也一直不理解这个反转矩阵到底有什么用处。
其实原理很简单,就是我把一个变形或者不在世界重心的物体给他归到他在没有做任何变化之前的状态,然后进行编辑。最后通过乘以之前的矩阵然后完成对变化后的物体进行编辑。具体操作如下,先通过一段代码把他做一些变形和移动处理。

matrix m = ident();
float angle = radians(ch('angle'));
vector axis = {0,1,0};
rotate(m,angle,axis);
//自定一个移动的向量
vector tranlate = chv('tranlate');
translate(m,tranlate);
//自定一个scale的向量
vector scale = chv('scale');
scale(m,scale);

@P *= m;

得出来的结果是这样的:
在这里插入图片描述

float angle = radians(ch('angle'));
vector axis = {0,1,0};
rotate(m,angle,axis);
vector tranlate = chv('tranlate');
translate(m,tranlate);
vector scale = chv('scale');
scale(m,scale);

@P *= m;
//通过invert函数反转矩阵
matrix invert_m = invert(m);
@P *= invert_m;

在这里插入图片描述
把物体归到世界重心就好办了,只需要在创建一个新的标准矩阵进行编辑,然后在乘以之前的矩阵就可以完成对不在世界坐标重心的矩阵的编辑。代码是这样的。

matrix m = ident();
float angle = radians(ch('angle'));
vector axis = {0,1,0};
rotate(m,angle,axis);
vector tranlate = chv('tranlate');
translate(m,tranlate);
vector scale = chv('scale');
scale(m,scale);

@P *= m;

matrix invert_m = invert(m);
@P *= invert_m;

matrix s = ident();
vector scale1 = chv('scale1');
scale(s,scale1);
float angle1 = radians(ch('angle1'));
vector axis1 = {0,0,1};
rotate(s,angle1,axis1);
@P *= s;
@P *= m;

在这里插入图片描述
大概的意思就是这些。如果有错的地方欢迎大神纠正。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44791639/article/details/118614964

智能推荐

python学习-read和seek_py read seek-程序员宅基地

在对文件read之后,一个类似gua_py read seek

十进制值显示力量4地点-程序员宅基地

ajax叫:$.each(data.RESULTSET,function(i,ele){ ele.MTUR_YLD = cellRenderNum100(null,"MTUR_YLD",ele.MTUR_YLD); ele.TMT_YLD = cellRenderNum100(null,"TM...

博弈论 第二章_两阶段双头垄断模型-程序员宅基地

文章目录第二章 完全信息动态博弈完全且完美信息动态博弈理论:逆向归纳法斯塔克尔贝里双头垄断模型有工会企业的工资和就业序贯谈判完全非完美信息两阶段博弈理论:子博弈精炼对银行的挤提关税和国际市场的不完全竞争工作竞赛重复博弈理论:两阶段重复博弈理论:无限重复博弈古诺双头垄断下的共谋效率工资时间一致性的货币政策完全非完美信息动态博弈博弈的扩展式表述子博弈精炼纳什均衡第二章 完全信息动态博弈完全且完美信息动态博弈理论:逆向归纳法斯塔克尔贝里双头垄断模型有工会企业的工资和就业序贯谈判完全非完美信息两阶段博_两阶段双头垄断模型

Freemarker + xml 实现Java导出word_js中使用xml导出word-程序员宅基地

  前言    最近做了一个调查问卷导出的功能,需求是将维护的题目,答案,导出成word,参考了几种方案之后,选择功能强大的freemarker+固定格式之后的wordxml实现导出功能。导出word的代码是可以直接复用的,于是在此贴出,并进行总结,方便大家拿走。    实现过程概览    先在word上,调整好自己想要的样子。然后存为xml文件。保存为freemarker模板,以ft..._js中使用xml导出word

mongo java 使用@DBRef 关联查询 spring data mongo_@dbentityfieldrefs-程序员宅基地

又得吐槽一下,最近开发项目,技术leader强调数据库使用mongodb作为主数据库,技术leader认为mongo完全可以代替mysql(不知道怎么想的,他mongo都没用过就下如此结论,苦逼的还是我们这些开发,至于这个leader的水分现在已经无力吐槽) 整了这么多天mongo,终于知道它不支持多表查询以及子查询。网上大多数都是迂回的一些方法,而且业务稍微复杂之后,几乎..._@dbentityfieldrefs

Java中调用方法的几种方式_怎么调用方法_心动的偏执的博客-程序员宅基地

一般的,在Java语言中,调用方法有三种方式。第一种:通过对象名.方法名进行调用,这是最普通的也是最常见的一种调用方式。第二种:通过new关键字调用构造方法,这种是在实例化对象时使用的方式。第三种:通过类名.方法名调用,当需要调用的那个方法为静态(有static的)方法时使用。配合实际操作,附如下例子:是不是详细得连一个刚入门的小白都看得懂?是就点个赞再走吧,因为我也是小白(/手动狗头/)..._怎么调用方法

随便推点

Element Plus组件的method(方法)的调用方法_element plus中方法如何定义-程序员宅基地

element-plus组件一般有若干方法,但官方没有写明怎么调用,在网上搜到的都是element UI的调用方法,如下:然后我仔细查阅官方文档,终于在示例代码中找到了用法,以树形控件为例:声明变量"xxx" const treeRef = ref()通过ref="xxx"绑定数据 <el-tree ref="treeRef" :data="data"/>调用通过xxx.value.<方法名>调用内置方法 //getNode为自定义函数,getCurr_element plus中方法如何定义

CRIO脱机计算机工作,LabVIEW和cRIO入门_休斯敦飞行大队的博客-程序员宅基地

LabVIEW和cRIO入门介绍本教程详细介绍了在 LabVIEW 开发环境中使用 RIO 扫描接口开发CompactRIO 应用程序的方法。 应用程序通过 LabVIEW 和CompactRIO 可重配置嵌入式系统创建简单的过程控制 VI。 通过此开发过程,您将逐步了解使用扫描接口开发 CompactRIO 应用程序的基本概念和编程技巧。 通过扫描接口,用户可直接从 LabVIEW RT 模块访..._crio编程案例

在VMware中,双击鼠标左键,ctrl键粘滞问题-程序员宅基地

在虚拟机下开发程序时,发现键盘输入异常。后发现是双击鼠标左键时,ctrl键粘滞所致。网上搜索解决方案是: 在VMvare中 选择“虚拟机” -》 “设置” -》“选项” -》“使用增强型键盘”由于本人VMware中未安装“增强型键盘‘组件,故该解决方案未进行验证。之前虚拟机运行是正常的,于是分析导致该异

遮挡剔除 Unity3d官方教程-程序员宅基地

遮挡剔除 (Occlusion Culling) 功能可在对象因被其他物体遮挡,当前在相机中无法看到时,禁用对象渲染。该功能不会在三维计算机图形中自动开启,因为在大部分情况下,离相机最远的对象最先渲染,离相机近的对象覆盖先前的物体(该步骤称之为“重复渲染 (overdraw)”)。遮挡剔除 (Occlusion Culling) 与视锥体剔除 (Frustum Culling) 不同。视锥体剔

那个「最牛删库跑路事件」的程序员,被判了....-程序员宅基地

大家应该还记得,在今年2月份的时候,国内一则程序员删库的消息传遍了全网。这则消息刷屏的原因很简单——他的几行代码,直接让上市公司微盟的市值一天之内蒸发超10亿元,数百万用户受到直接影..._那些大型的程序员删库跑路事件

yolov5s.pt下载-程序员宅基地

链接:https://pan.baidu.com/s/1sfX9PXKpV7CVf–2EUL08g提取码:1001_yolov5s.pt下载