〖求助〗如何使用Maxscript判断两个物体是否相交呢
3dmax吧
全部回复
仅看楼主
level 4
无道狂天 楼主
maxcript新手请教
请问如何在maxscript判断这俩个物体是否相交呢?
是需要自己写逻辑还是有相应的方法函数能处理呢?
2014年11月05日 06点11分 1
level 11
判断相交需要一定的数学知识。。规则的物体还算简单,但是不规则的物体就比较蛋疼了。。
2014年11月05日 08点11分 2
level 11
之前的回复不太正确。。。
有个很容易的方法判断 两个物体是否相交。。。我试一下是不是所有形状都可行。
2014年11月05日 08点11分 3
level 11
fn isIntersect =(
isInts = false
c = for i in selection collect (copy i)
if selection.count == 2 then (
c[1]*c[2]
isInts = ((meshop.getNumVerts c[1]) != 0)
)
else messagebox("Select two objects")
return isInts
delete c
)
调用 isIntersect() 后 如果相交 返回True 如果不相交返回False
主要就是把两个物体复制出来,然后做相交操作。 如果 相交后的物体 顶点数为0 说明 交集为空,也就是两者不相交。 不然就相交
2014年11月05日 08点11分 5
大神哪儿学的maxscript?
2014年11月05日 09点11分
回复 感谢宇宙1 :自学- -看Max自带的MaxScript Help。。一些需要的功能里面基本都能查到 - -
2014年11月05日 09点11分
回复 Dreadnought97 : 内容那么多……帮助还是英文的
2014年11月05日 11点11分
大神出现了…我去试试啦
2014年11月05日 11点11分
level 11

2014年11月06日 01点11分 6
level 11
就这几个玩意 用了将近2分钟时间来生成。。
2014年11月06日 10点11分 8
level 11
fn isIntersect o1 o2 =(
converttomesh o1
converttomesh o2
c = copy o2
c * o1
isInts = ((meshop.getNumVerts c) != 0)
delete c
return isInts
)
fn pixelize o1 o2 = (
if o2.count > 0 do(
for o in o2 do (if (isIntersect o1 o) == false do delete o)
)
)
这是全部的代码。。 调用的时候 o1 是传物体 o2是传方块的数组。。
方块少的时候运行很快,,方块超过100个 就非常吃力了。。
2014年11月06日 10点11分 9
回复 IP_URL : 我试过了,数值小于一定的时候,运算是瞬间的,一个loop 一下子运算180次以上,max就不响应了。。我还试了下把函数拆分成几个100次。。还是不行。只能手动更新数值。估计要运行这么多次loop需要用什么特殊的方法。。。 ------ From Nokia
2014年11月06日 16点11分
回复 IP_URL :Max有cos sin函数的 。不过什么叫box实现cos sin?
2014年11月07日 08点11分
回复 IP_URL :噢- -你说的box3 是那个粒子系统吧。。我对粒子系统不熟悉。。所以也不太清楚呃。。
2014年11月07日 08点11分
回复 IP_URL :重建这种算法,肯定要用相对低级一点的语言才行。。比如C++。。因为毕竟这种矩阵运算如果复杂一些,还是很消耗内存的。
2014年11月07日 08点11分
level 11
2014年11月07日 23点11分 10
level 11
@IP_URL
2014年11月08日 00点11分 11
好吧,原谅我的眼瞎,原来要把函数节点关闭参数2,设置参数1为实数才能弹出cos类函数的选项,之前怪不得找不到呢。谢谢,我滚回去研究分形了
2014年11月08日 01点11分
回复 苏醒de记忆 : sin cos算法肯定只能用于实数
2014年11月08日 01点11分
1