当前位置: 首页 > article >正文

如何在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也是这样的。


http://www.kler.cn/a/151942.html

相关文章:

  • Sealos 云操作系统私有化部署教程
  • 开闭原则:提高扩展性的小技巧
  • shared_ptr子类指针转换成父类指针
  • 主流数据库类型总结
  • 【Web】攻防世界Web_php_wrong_nginx_config
  • Windows Terminal CMD 终端配置方案: 不只是酷炫外观
  • 论文导读 | 10月专题内容精选:人的预测
  • 论文笔记:详解NEUPSL DSI
  • 【MySQL:从零开始练级】环境安装与基础认识
  • redis运维(二十)redis 的扩展应用 lua(二)
  • Windows系列:windows2003-建立域
  • Python streamlit指南,构建令人惊叹的可视化Web界面!
  • python-元组和列表的异同
  • Linux下将Java项目(Jar包)打包成服务
  • 删除list中除最后一个之外所有的数据
  • 非空断言,
  • 五种多目标优化算法(MSSA、MOAHA、MOPSO、NSGA3、NSGA2)求解微电网多目标优化调度(MATLAB)
  • 交叉熵损失函数(Cross-Entropy Loss Function)
  • 如何在VS2022上的MFC项目中操作Excel(VS2010、VS2012、VS2015、VS2017、VS2019使用方法一样)
  • RabbitMQ之延迟消息