作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Mel 或 Python 中寻找一种方法来确定特定的 UV 壳是否跨越 Maya 中的多个纹理图 block 。我知道 Mudbox 对此进行了检查,但我在 Maya 的界面或脚本中找不到执行此操作的简单命令。
我想到的一种方法是比较每个图 block 中的贝壳,看看是否有贝壳出现在多个图 block 中。
我在这里找到了一个页面,有人弄清楚了如何在给定的一组纹理图 block 中选择每个 UV,但它在 UV 上运行,而不是在壳上运行。这是页面: http://forums.cgsociety.org/showthread.php?t=1123235
谢谢,迈克
最佳答案
没有一种简单的方法可以做到这一点。
这是一个在 Python 中获取 shell 的 uv 边界框的方法示例。它使用 API 来获取对象中所有 uv 壳的边界框(注意——它应该是一个网格形状对象,我没有添加任何检查)。
import maya.api.OpenMaya as api
from math import floor
def get_shells(obj, uvset = ''):
selected = api.MGlobal.getSelectionListByName(obj)
node = selected.getDependNode(0)
mesh = api.MFnMesh(node)
howmany, shell_ids = mesh.getUvShellsIds(uvset)
u_list, v_list = mesh.getUVs()
shells = []
for shell_num in range(howmany):
umin = vmin = 9999999999999
umax= vmax = -9999999999999
for idx, value in enumerate(shell_ids):
if value == shell_num:
umin = min(umin, u_list[idx])
umax = max(umax, u_list[idx])
vmin = min(vmin, v_list[idx])
vmax = max(vmax, v_list[idx])
shells.append ( (umin, vmin, umax, vmax) )
return shells
print get_shells('pCylinderShape1')
# [(0.3437499701976776, -7.450580596923828e-08, 0.65625, 0.3125), (0.375, 0.3125, 0.6249997615814209, 0.6884398460388184), (0.3437499701976776, 0.6874999403953552, 0.65625, 1.0)]
结果是一个 4 项元组列表,它们是存储为 ( u min, v min, u max, v max ) 的对象中 uv shell 的边界框
。要捕捉图 block 边界,只需检查最小和最大角是否是相同的整数值:
for shell in get_shells('pCylinderShape1'):
mintile = int(shell[0]), int(shell[1])
maxtile = int(shell[2]), int(shell[3])
if mintile != maxtile:
print "shell crosses UV boundary", shell
关于python - 在 Maya 中,如何查找 UV 平铺中的所有贝壳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49932107/
我一直在尝试在 Matlab 中绘制 3d 贝壳,但我遇到了很多麻烦,因为我对 Matlab 很陌生。到目前为止,这是我尝试将代码与开头注释的参数和方程放在一起... clear all close
我是一名优秀的程序员,十分优秀!