gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:16:16 30 4
gpt4 key购买 nike

正在研究从鼠标光标位置到光线转换命中的第一个对象的世界点。也许 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com