用grasshopper制作的软包算法,用这个算法可以制作表皮曲面上鼓包的效果,比如水立方的表皮,沙发或者床背景等。
算法原理:
把曲面分割成多个小四边形面,再将四边形面划分等分点,选择曲面最中心的等分点(假设为点C),把中心等分点C沿着小四边形面的中心法线运动,运动后得到的点数据(假设为点Y)去替换原四边形面的中心等分点C,最终的点阵列重组(Surface FromPoints运算器)为一个曲面。
运算结果:


用grasshopper制作的软包算法,用这个算法可以制作表皮曲面上鼓包的效果,比如水立方的表皮,沙发或者床背景等。
算法原理:
把曲面分割成多个小四边形面,再将四边形面划分等分点,选择曲面最中心的等分点(假设为点C),把中心等分点C沿着小四边形面的中心法线运动,运动后得到的点数据(假设为点Y)去替换原四边形面的中心等分点C,最终的点阵列重组(Surface FromPoints运算器)为一个曲面。
运算结果:


grasshopper按分组生成模型。
该算法也是比较实用的,通过这个算法可以把一个分组数据按照特定的分组分离出来,从而可以的针对各组进行变化,如下图,网格按照间隔的排列生成不同的形态,当然如果有必要的话也可以随机生成不同的模型。

算法解释:
首先有一串数据(网格点),默认生成的网格点是按一排为一组的数据构成的,这组数据输入“Param Viewer(数据观察运算器)”,Param Viewer可以查看数据的路径构成和所属路径下的Item(元素)数量,它输出的是路径数据。
把路径数据再输入“Dispath”里面,路径数据被Dispatch分流为两路数据(数据分流不单单用dispatch的,也可以用其他的代替)。分流后的数据导入Tree Branch中,Tree Branch 会根据导入的数据路径对原分组数据流(网格点)进行筛选,最终得到的就是按分组的数据流了,没有数据流分支都可以独立操作和修改。
关键字:grasshopper教程,grasshopper算法教程

重新编写一段关于editpoly间隔一格取一个面的算法,我之前也写过一个类似的算法,但是觉得算法太过于依赖数学运算而不是3dsmax maxscript的运算流程的,数学运算的通用性感觉不大好,而且修改繁琐,这次改进的算法就简练多了,可重用性还不错,只要稍微修改几个参数就能得到各式各样的效果,
算法分解:
–建立空数组
n=#()
–分列数。就是一个网格格子纵向的数量
k=32
–数组n的系列排序,初始量为1
u=1
–for循环 a的值等于网格的行数量
for a =0 to 20 do
(
–mod是取余数的运算,当余数等于0时运算代码,不等于0时运行代码
if (mod a 2)==0 then
(
–在if语句中嵌套for循环函数,当等于0时,做k值范围内的循环运算,b的值每次加2取值
for b=1 to k by 2 do
(
–数组赋值
n[u]=a*k+b
u+=1
)
)
else
(
–同上
for b=2 to k by 2 do
(
n[u]=a*k+b
u+=1
)
)
)
–定义变量m,把n数组的数据类型转化为bitarray
m=n as bitarray
–选择bitarray值的曲面
$.EditablePoly.SetSelection #Face m

如何获取grasshopper分组数据的路径
在grasshopper中经常会遇到数据的分组,而且会不停的对数据进行抽取,筛选,再组合等一系列操作,而这个编辑过程如果能借助“路径”的力量,编辑分组数据那肯定是事半功倍的。
路径它记录是每一个分组数据在“大数据”中的位置,数据之间“匹配关系”都跟路径的位置很有关系。
路径的表现:大括号{路径}
如下图:下图是一个树形数据结构,数据第一层路径是{0},第二层数据是{0;0}….{0;4},{0;0}….{0;4}里面分别有一些数据,这些数据的数量都不禁相同。

获取路径数据我们一般使用Param Viewer,数据导入Param Viewer后得到下列的几个数据Structure (Paths = 5)
path {0;0} (N = 4)
path {0;1} (N = 3)
path {0;2} (N = 5)
path {0;3} (N = 2)
path {0;4} (N = 3)


本实例是做原子运动穿越薄片的效果。制作的原理和上次类似。
这次被穿越的方块不做高低变化,而是体积“坍缩”为零,当原子穿越之后方块体积又恢复到原始状态。这样的变化同样是通过距离来判定的。
select $box*
for t=0 to 100 do
animate on
at time t
for a in selection do
(
x=distance $sphere01 a
if x < 300 then
(
a.width=0
a.length=0
a.height=0
)
else
(
a.width=100
a.length=100
a.height=100
)
)
3dsmax 动画基础,3dsmax脚本动画制作教程


本实例中有点土拨鼠在地底钻洞时地面泥土隆起的效果。
也是使用脚本的逐帧动画,脚本原理跟上一次的那篇文章差不多,大家可以这里《随小球运动而塌陷的方块地面动画-maxscript》查看原理。
其中distance控制方块和球体之间的距离,if判断语句控制球体和方块的位置关系,当两者距离小于某设定值时,高度做相应变化,否则做另一种变化。
for t=0 to 100 by 2 do
animate on
at time t
(
for a in selection do
(
d=(distance $sphere01 a)
h=a.height
if d<100 then
(a.height=200
a.wirecolor=white)
else
(a.height=h
)
)
)


为做出上图的效果,花了点时间想了个算法,相比之前的几个实例算法稍微深了个层次。
算法描述:
n=#() –新建空数组
u=1 –定义变量起始量为1
for t=0 to 100 do –for循环语句,这里是指在0到100帧做循环计算
(
animate on–开启动画关键帧
at time t–在第t帧时做什么
(
for a in selection do –在第t帧时执行for循环语句,这里指的是所有被选择的物体做循环计算
(
x=distance $sphere01 a–定义x变量,变量赋值为球体01和方块的距离,distance是计算距离的变量
y=200–定义y变量,这个变量做下面的比较运算
if x>y then –if条件表达式,表示如果…那么…否则,当x>y是,执行then后面的语句,否则执行else后面的语句
(n[u]=y) –给n数组赋予y的值
else n[u]=x–给n数组赋予x的值
a.height=n[u]–给a(指方块)的高度赋予n数组的当前值(x)
u+=1–递增表达式
)
)
)
wordpress cubepoints插件
[mycred_sell_this price=”10″ expire=”24″]This content is available for you for 24 hours from the time of purchase. Enjoy![/mycred_sell_this]

[intense_image imageurl=”http://pic-7niu.3dscg.com/sin_curve.gif” /]
喷射出正弦函数曲线的粒子曲线算法
算法解释:animate on 开启关键帧开关,定义一个时间函数t ,时间函数t在0到100帧递增,递增等差为2,在递增的关键帧中“do”一件事情:at time t中复制$(指的是选择的方块),复制后的位置为[5*u , 500*(sin u) ,0],其中u的增量是45,增量的写法是u+=45或者u=u+45这两者都行。
代码
u=0
animate on
for t=0 to 100 by 2 do
(
at time t
copy $ pos:[5*u , 500*(sin u) ,0]
u+=45
)
关键字:maxscript,3dsmax 动画脚本

还是移动帧动画,先看效果

模型建模:制作两层50*50*10的方块,上层贴一张贴图,下层贴另一张贴图,并都赋予UVW贴图坐标,注意下层的效果更上一层有所不同。由于每个方块都要经过10帧动画就要做y轴翻转180°的角度,因此每个方块在翻转前要做自身X轴的“镜像”处理。处理效果如下图

从这个图片看出,方块之间拼接不能构成完整的图形,但是做y轴方向翻转180°之后就刚好还原图形了。
模型完成后,上层方块和下层方块分别执行下面的maxscript脚本,完成动画操作
u=0
for a in selection do
(
movekeys a u
u=u+2
)
本文完
代码备份:之前原以为要把上层下层抽取个一个分别组块,后来发现不用组块也能执行上面的movekeys的命令,那下面这段代码就可以不用了。但写好的代码还是留下备份了。
n=$ as array –定义一个n的数组变量
m=n.count –计算出n数组的数量
b=m/2
for a=1 to m/2 do –for循环
(
y=#(n[a],n[a+b]) –选择集数组
group y –群组命令
)