如何在3dMax中实现创建对象时自动指定材质?

如何在3dMax中实现创建对象时自动指定材质?

我们在某些情况下是否希望为创建的对象指定默认材质呢?如果有这样的需求请不用担心,解决方案就在这里啦。它并不有多么复杂,但展示了如何使用NodeEventCallback在使用此回调系统的节点上执行操作。代码非常简单,不言自明,所以我不会详细介绍。

我们使用添加的回调,每次在场景中创建新对象时都会发生这种情况,我们用两个参数ev和nd传递要在回调中使用的函数,第一个是调用该函数的事件,第二个是AnimHandles的列表。

我们可以使用GetAnimByHandle nodeHandle来获取该句柄的节点对象,之后,我们就可以开始了!在这种情况下,我只是反复检查我们正在创建的节点是否为几何体,否则什么都不做!

出于观看的目的,我使用了completeRedraw(),我建议在重场景中不要使用它,或者根本不使用它。如果去掉它,唯一的区别是只有在视口中执行某些操作后才会重新绘制,但材质指定已经完成,不用担心🙂

我使用了两个与场景一起保存的持久变量,这样我们就可以避免每次创建对象、加载/重新加载场景时都有多个“默认”标准材质。

费话少说,还是直接上代码吧,您可以将其放在启动脚本文件夹中,也可以将其分配给宏。享受

(	
	if acMat == undefined then (
		persistent global acColor = color 30 30 30
		persistent global acMat = StandardMaterial()
		acMat.diffuse = acColor
	)

	fn setStandardMaterial ev nd = (	
		local acObj = GetAnimByHandle nd[1]
		if superclassof(acObj) == GeometryClass then (
			acObj.material = acMat
			acObj.wireColor = acColor
            completeRedraw()
		)
	)

	callbackItem = NodeEventCallback mouseUp:true added:setStandardMaterial
)

若要删除回调,在Macroscript编辑器中执行callbackItem=undefined就可以了,acMat和acColor也是这样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐风老师

真诚赞赏,手有余香!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值