Всем доброго времени суток. Сначала расскажу, что нужно сделать.
Есть мешь рук насаженные на кости. Необходимо вывести позицию вершины (vertex) кончика пальцев.
Итак, известно точное расстояние от кости фаланги пальца до этой вершины.
Я решил просто при помощи for сравнить расстояние всех вершин с заданным.
Скрипт такой:
for i in objects do if classOf i == Editable_Mesh do obj=i -- получаю объект на котором ищу вершину (в сцене всего один объект класса Editable_Mesh)
z_dist = [0.0327497,-0.0125671,0.0100674] -- заданная дистанция от фаланги до вершины
for v = 1 to getNumVerts obj do -- ковыряю каждую вершину по порядку
(
dist = getVert obj v - $bip01_l_finger12.pos -- получаю дистанцию
rd = dist - z_dist -- должно получится [0,0,0]
if v == 1044 do b = rd -- специально поставил для проверки так как точно знаю индекс вершины 1044 в данной сцене, но в разных сценах индекс может изменяться поэтому нельзя применять одно и то же число
if rd == [0,0,0] do messagebox ("Index: "+(v as string)) -- этот if должен срабатывать когда rd = [0,0,0], т.е. разница между искомым и найденным расстоянием равна нулю, но сообщения messagebox нет
)
f = b -- MAXScript Listener здесь показывает [0,0,0] значит всё правильно считает, а if не срабатывает
Никак не могу понять что за беда, почему if не срабатывает?
Оказывается MAX имеет свойство округлять числа, поэтому и не работало. В общем, если кому нужно, решил как всегда через задний проход:
obj=0
v=0
for i in objects do if classOf i == Editable_Mesh do obj=i
z_dist = [0.0327497,-0.0125671,0.0100674]
z_dl = sqrt(z_dist.x^2+z_dist.y^2+z_dist.z^2)
dopusk = 0.001 -- %
do
(
v+=1
v_pos = getVert obj v - $bip01_l_finger12.pos
dl = sqrt(v_pos.x^2+v_pos.y^2+v_pos.z^2)
)
while dl<z_dl*(100-dopusk)/100 or dl>z_dl*(100+dopusk)/100
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
Турбо_ХХХ
Есть мешь рук насаженные на кости. Необходимо вывести позицию вершины (vertex) кончика пальцев.
Итак, известно точное расстояние от кости фаланги пальца до этой вершины.
Я решил просто при помощи for сравнить расстояние всех вершин с заданным.
Скрипт такой:
for i in objects do if classOf i == Editable_Mesh do obj=i -- получаю объект на котором ищу вершину (в сцене всего один объект класса Editable_Mesh) z_dist = [0.0327497,-0.0125671,0.0100674] -- заданная дистанция от фаланги до вершины for v = 1 to getNumVerts obj do -- ковыряю каждую вершину по порядку ( dist = getVert obj v - $bip01_l_finger12.pos -- получаю дистанцию rd = dist - z_dist -- должно получится [0,0,0] if v == 1044 do b = rd -- специально поставил для проверки так как точно знаю индекс вершины 1044 в данной сцене, но в разных сценах индекс может изменяться поэтому нельзя применять одно и то же число if rd == [0,0,0] do messagebox ("Index: "+(v as string)) -- этот if должен срабатывать когда rd = [0,0,0], т.е. разница между искомым и найденным расстоянием равна нулю, но сообщения messagebox нет ) f = b -- MAXScript Listener здесь показывает [0,0,0] значит всё правильно считает, а if не срабатываетНикак не могу понять что за беда, почему if не срабатывает?Прошу помощи в решение проблемы. Заранее спасибо!
Турбо_ХХХ
obj=0 v=0 for i in objects do if classOf i == Editable_Mesh do obj=i z_dist = [0.0327497,-0.0125671,0.0100674] z_dl = sqrt(z_dist.x^2+z_dist.y^2+z_dist.z^2) dopusk = 0.001 -- % do ( v+=1 v_pos = getVert obj v - $bip01_l_finger12.pos dl = sqrt(v_pos.x^2+v_pos.y^2+v_pos.z^2) ) while dl<z_dl*(100-dopusk)/100 or dl>z_dl*(100+dopusk)/100