raycasting - getClosestPoint 从鼠标光标位置到光线转换命中的第一个对象(maya mel 脚本)

标签 raycasting mel closest-points maya-api

正在研究从鼠标光标位置到光线转换命中的第一个对象的世界点。也许 api func getClosestPoint 或 rayIntersect 可以完成这项工作?如果可以的话怎么做? (谢谢)

最佳答案

我找到了这段代码,但我不确定是谁写的。不管怎样,这可能就是您正在寻找的。

import maya.OpenMaya as om
import maya.OpenMayaUI as omui
import maya.cmds as cmds

ctx = 'myCtx'

def onPress():
    vpX, vpY, _ = cmds.draggerContext(ctx, query=True, anchorPoint=True)
    print(vpX, vpY)

    pos = om.MPoint()
    dir = om.MVector()
    hitpoint = om.MFloatPoint()
    omui.M3dView().active3dView().viewToWorld(int(vpX), int(vpY), pos, dir)
    pos2 = om.MFloatPoint(pos.x, pos.y, pos.z)
    for mesh in cmds.ls(type='mesh'):
        selectionList = om.MSelectionList()
        selectionList.add(mesh)
        dagPath = om.MDagPath()
        selectionList.getDagPath(0, dagPath)
        fnMesh = om.MFnMesh(dagPath)
        intersection = fnMesh.closestIntersection(
        om.MFloatPoint(pos2),
        om.MFloatVector(dir),
        None,
        None,
        False,
        om.MSpace.kWorld,
        99999,
        False,
        None,
        hitpoint,
        None,
        None,
        None,
        None,
        None)
        if intersection:
            x = hitpoint.x
            y = hitpoint.y
            z = hitpoint.z
            cmds.spaceLocator(p=(x,y,z))


if cmds.draggerContext(ctx, exists=True):
    cmds.deleteUI(ctx)
cmds.draggerContext(ctx, pressCommand=onPress, name=ctx, cursor='crossHair')
cmds.setToolTo(ctx)

关于raycasting - getClosestPoint 从鼠标光标位置到光线转换命中的第一个对象(maya mel 脚本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34635250/

相关文章:

go - 如何增加光线转换渲染距离?

graphics - 将 y 剪切地平线偏移转换为光线转换器中的俯仰角

algorithm - 近似最近对算法

string - 如何找到彼此接近的两个字符串

three.js - Raycast 对象以使用 Three.js 启用鼠标单击事件

javascript - 打开时运行命令的 Illustrator 文件

maya - 您可以在 Maya 中更改自定义属性的枚举列表吗?

python - HTC Vive 的 Maya 为 90 fps

java - 迭代二维列表并将元素放入哈希表中

python - 寻找最近的交叉路口时出现问题