【问题标题】:Maya: How to query the y value of a point on a mesh if I have the x and z coordinates?Maya:如果我有 x 和 z 坐标,如何查询网格上一个点的 y 值?
【发布时间】:2019-04-17 21:54:09
【问题描述】:

我在 Maya 中工作,我有一条曲线和一个“地板”网格。在曲线上的任何一点,我都有 x 和 z 值(世界空间),为我提供了该点的自上而下的 2D 位置。我想将曲线向下投影到地板上,以找到地板在任何点的 y 值(即高度)。

也就是说,给定一个 x 和 z 值,我想查询一个网格来给我表面上对应的 y 值。

这些图像是使用多边形表面制作的,但主要是说明性的,就我的目的而言,地板是多边形网格还是多边形/NURBS 表面并不重要,所以如果更合适,请说。 (不过最好能对所有这些都有答案!)

我尝试使用 pointOnSurface、xform 和 pointPosition 命令,但没有成功。我也尝试过使用最近点OnSurface 节点,但我不想要任何方向上的最近点,我特别想要在精确的 x 和 z 点处的 y 值。我知道在我自己构建曲线和网格/曲面时有一个 y 满足这些条件。

我有以下代码来获取沿曲线 50 个样本点的 [x,z] 坐标:

import maya.cmds as cmds

# Returns x and z coordinates of points along path
def getPathPos():
    path = 'curve1'
    point_dist = 1.0/50
    path_pos = []

    for i in range(50):
        param = i * point_dist
        pos = cmds.pointOnCurve(path, parameter=param, turnOnPercentage=True, position=True)
        path_pos.append([pos[0], pos[2]])

    return path_pos

但后来我被困住了。我不知道如何使用这些点来查询网格上的点。

对 Python 或 MEL 中的答案感到满意。

【问题讨论】:

  • 你能包含一些你尝试过的代码吗?
  • 抱歉所有通知,我尝试在评论中添加代码,但格式已关闭。现在将编辑帖子。

标签: python maya mel


【解决方案1】:

我不明白为什么最近的PointOnMesh 不起作用,它将你的曲线点投影到表面上,这段代码对你不起作用:

def vec(p1, p2):
    return (p1[0]-p2[0], p1[1]-p2[1], p1[2]-p2[2])

curve, plane = cmds.ls(sl=True)
clst = cmds.createNode('closestPointOnMesh')
plane_sh = cmds.listRelatives(plane)[0]
cmds.connectAttr('{}.worldMesh[0]'.format(plane_sh),
                  '{}.inMesh'.format(clst))

cvs=cmds.ls('{}.ep[*]'.format(curve), fl=True)
cvs_orig_pos = [cmds.pointPosition(c) for c in cvs]
diff = []
for cv, pos in zip(cvs, cvs_orig_pos):
    cmds.setAttr('{}.inPosition'.format(clst), *pos)
    proj = cmds.getAttr('{}.position'.format(clst))[0]
    new_pos= [pos[0], proj[1], pos[2]]
    cmds.xform(cv, t=new_pos)

    value = vec(new_pos, pos)[1]
    if value > 0:
        print('above the floor')
    elif value<0:
        print('below the floor')

编辑:我已经看到你的地板东西的图片,所以我添加了一个 proc 来验证这一点

【讨论】:

    猜你喜欢
    • 2011-06-20
    • 1970-01-01
    • 2019-04-10
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    相关资源
    最近更新 更多