maya中的种树脚本
来源:互联网 发布:刷水软件 编辑:程序博客网 时间:2024/05/29 14:28
题记:
公司项目要求,做场景时候需要ass的代理,于是需要一个刷树的脚本。
思路:
网上其实有蛮多刷草刷树的工具,我也下载了一个,不过是mel写的。于是决定自己写一个。把这个问题分解开有以下几步:
1,让用户选择一个需要种的树的模型和地面模型。
2,用户在maya的3d视图中点击一下鼠标,复制一颗树。
3,将树移到鼠标点击的地面模型位置。
问题的关键:
1,如何在maya中实现鼠标点击的事件。
2,如何求视图中鼠标点击时候,与视图中的模型的交互位置
解决:
1,鼠标的点击事件。
我先查了maya api,在proxy模块里有MPxContext类,可以创建各种鼠标交互事件,不过很可惜的是,这个类不能在python中导入,如果有大神指导如何在python api中导入这个类,请赐教!
最后我在maya.cmds里找到的鼠标点击事件draggerContext,它支持鼠标点击,鼠标拖拽,鼠标施放以及鼠标点击之前的事件。并且可以获取点击时候鼠标在视窗中的2d位置。
2,将鼠标的位置转换成三维空间和地面物体的交互。
maya在api中有很多对3d视窗的方法,例如:获取视窗的摄像机,获取视窗的widget,获取视窗的大小等等。我们需要获取的是鼠标在视窗中的坐标。
创建一个view对象
import maya.OpenMayaUI as omUIview = omUI.M3dView.active3dView()
用viewToWorld方法获取点击鼠标时,视线到鼠标点击位置的射线的起始位置和方向。
worldPt = om.MPoint()worldVector = om.MVector()view.viewToWorld(x_pos,y_pos,worldPt,worldVector)
worldPt就是视线的起始点,worldVector是视线起始点到鼠标点击位置的射线。
然后就是求该射线与地面物体的交点,
import maya.OpenMaya as omom.MFnMesh.closestIntersection()
用该方法可获取射线与物体的交点。
剩下的就是复制物体,移动位置。
上张截图:
后记:
作为主要功能,基本完成了。参考网上的工具,其实后续可以开发随机旋转缩放,树的缩略图等等。
0 0
- maya中的种树脚本
- maya中种树脚本思路
- 数据结构中的几种树
- maya自动安装脚本
- 种树
- 种树
- 数据结构中的四种树的概念
- maya中的桥接命令
- MAYA 创建脚本节点 自定义右键菜单
- maya win10下的路径脚本
- MAYA教程——Hypershade中的Maya渲染节点
- maya
- maya
- maya和Unity中的坐标系旋转
- Maya脚本学习——团队截屏工具
- [堆]种树
- 种树问题
- [bzoj2151]种树
- C#中如何把XML转化成强类型操作
- 一个简洁实用的PHP缓存类
- 把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间
- linux 下串口编程VTIME和VMIN的设置
- JAVA 学习模块十五: 内部类
- maya中的种树脚本
- Tomcat集群之Apache篇(一)
- CSS3饼状图loading旋转动画
- Java @SuppressWarnings作用
- [4]-虚拟机垃圾回收
- CSDN-Markdown编辑器中如何使图片居中
- 定义一个表示学生信息的类Student,要求如下: (1)类Student的成员变量: sNO 表示学号;sName表示姓名;sSex表示性别;sAge表示年龄;sJava:表示Java课程成绩。
- 从程序员到架构师,架构师绝对不会告诉程序的秘密
- 身份证实名认证