网上其实有蛮多刷草刷树的工具我也下载了一个,不过是mel写的于是决定自己写一个。把这个问题分解开有以下几步:
1让用户选择一个需要种的树的模型和地面模型。
2用户在maya种树的3d视图中点击一下鼠标,复制一颗树
2,如何求视图中鼠标点击时候与视图中的模型的交互位置
我先查了maya种树 api,在proxy模块裏有MPxContext类可以创建各种鼠标交互事件,不过很可惜的是这个类不能在python中导入,如果有大神指导如何在python api中导入这个类请赐教!
最后我在maya種树.cmds里找到的鼠标点击事件draggerContext,它支持鼠标点击鼠标拖拽,鼠标施放以及鼠标点击之前的事件并且可以获取点击时候鼠标在视窗中的2d位置。
2将鼠标的位置转换成三维空间和地面物体的交互。
maya种树在api中有很多对3d视窗的方法例如:获取视窗的摄像机,获取视窗的widget获取视窗的大小等等。我们需要获取的是鼠标在视窗中的坐标
用viewToWorld方法获取点击鼠标时,视线到鼠标点击位置的射线的起始位置和方向
worldPt就是视線的起始点,worldVector是视线起始点到鼠标点击位置的射线
然后就是求该射线与地面物体的交点,
用该方法可获取射线与物体的交点
剩下的就昰复制物体,移动位置
作为主要功能,基本完成了参考网上的工具,其实后续可以开发随机旋转缩放树的缩略图等等。