1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Клонировать один объект по вершинам другого

Тема в разделе "Maya", создана пользователем Hasan Akniyev, 28 июл 2006.

Модераторы: Dark™, Skif
  1. Hasan Akniyev

    Hasan Akniyev Активный участник

    С нами с:
    31.03.2006
    Сообщения:
    195
    Симпатии:
    0
    Баллы:
    11
    Есть задача - размножить один объект так, чтобы все его копии находились в вершинах другого.

    Я не знаю, есть ли в майке стандартная функция на этот счет, поэтому решил сделать так: проходимся циклом "for" по всем вершинам объекта и при каждой итерации клонируем объект и назначаем ему координаты текущей вершины.

    А теперь вопросы:
    1. Как получить кол-во вершин?
    2. Как получить доступ к координатам текущей вершины?

    P.S. Даже если есть стандартная процедура для такого дела, прошу тем не менее ответить на мои вопросы, так как хочу углубить свои знания в MEL.
     
  2. Hasan Akniyev

    Hasan Akniyev Активный участник

    С нами с:
    31.03.2006
    Сообщения:
    195
    Симпатии:
    0
    Баллы:
    11
    И еще один вопрос. Как получить кол-во и координаты каждой частицы в системе частиц?
    Это на случай, если нужно сделать что-то вроде инстансера, но без привязки к частицам.

    Поясню:
    Делаю гору, далее Emit from Object, Emitter type=Surface. И в первом-втором кадре запускаю скрипт, распологающий деревья или камни по поверхности горы.

    Если есть другой способ, так же укажите.
     
  3. Решатель

    Решатель Знаток

    С нами с:
    20.04.2005
    Сообщения:
    1.413
    Симпатии:
    0
    Баллы:
    44
    http://localhost:4449/Maya7.0/en_US/Nodes/
     
  4. Hasan Akniyev

    Hasan Akniyev Активный участник

    С нами с:
    31.03.2006
    Сообщения:
    195
    Симпатии:
    0
    Баллы:
    11
    2Решатель
    Ну открыл я хелп. Там какой-то список отсортированный по алфавиту. На какой элемент щелкать.

    А если не трудно опиши одной-двумя строчкой синтаксис чем посылать на четыре буквы :)

    int $i;
    for ($i=0, $i<=<количество вершин>, i++)
    {
    Вершина[$i].X
    Вершина[$i].Y
    Вершина[$i].Z
    }
    Как узнать кол-во вершин и их координаты?

    Благодарю за внимание.
     
  5. Решатель

    Решатель Знаток

    С нами с:
    20.04.2005
    Сообщения:
    1.413
    Симпатии:
    0
    Баллы:
    44
    Во-первых: эта тема тут уже обсуждалась не далее как месяц назад. Так как вы не хотите пользоваться поиском, я внёс её в FAQ.
    Во-вторых: "отсортированный список" - это ноды Maya, о которых там всё написано - какие атрибуты в них есть, и как их использовать.
    В-третьих: есть такой же "отсортированный список" для MEL-команд, где очень быстро и продуктивно можно искать нужные команды. Например ввести "poly" в строчке поиска этого списка.
    В-четвёртых: всё что ты делаешь в Maya, отражается в script editor'е, поэтому выдели точки и посмотри - как к ним обращаться.
    И в пятых: так как ты упорно не хочешь утруждать себя чтением документации, то я даже скажу тебе команду. Даже три команды: polyEvaluate, getAttr и xform. Нет, даже четыре: pointPosition. А дальше - смотри документацию.
     
  6. Ghostfly

    Ghostfly Активный участник

    С нами с:
    31.10.2005
    Сообщения:
    461
    Симпатии:
    0
    Баллы:
    16
    Хочу научиться читать. Но все буквы учить лень и решил выучить первые 5. На первое время прокатит.
     
  7. Alexz 8447

    Alexz 8447 Активный участник

    С нами с:
    01.06.2005
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    5
    Вот как просто в синеме такое делать, просто для сравнения, майщики ногами не бейте (могу ответить :)
     

    Вложения:

    • 7551.jpg
      7551.jpg
      Размер файла:
      109 КБ
      Просмотров:
      46
  8. Покатигорошек

    Покатигорошек Активный участник

    С нами с:
    09.12.2005
    Сообщения:
    232
    Симпатии:
    3
    Баллы:
    15
    Что-то сомнительно, что сферки по вершинам тора расположены... С вайерфреймом счелкни, пожалуйста.
     
  9. Alexz 8447

    Alexz 8447 Активный участник

    С нами с:
    01.06.2005
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    5
    можно и в вершинках :)
     

    Вложения:

    • 7601.jpg
      7601.jpg
      Размер файла:
      67,1 КБ
      Просмотров:
      43
  10. SAFE

    SAFE Активный участник

    С нами с:
    11.09.2004
    Сообщения:
    223
    Симпатии:
    0
    Баллы:
    11
    Теребим справку на тему geometryPaint
     

    Вложения:

    • 7671.jpg
      7671.jpg
      Размер файла:
      193,9 КБ
      Просмотров:
      44
  11. Решатель

    Решатель Знаток

    С нами с:
    20.04.2005
    Сообщения:
    1.413
    Симпатии:
    0
    Баллы:
    44
    Alexz: а в первой картинке они как расположены? По UV с каким-то шагом?
     
  12. Alexz 8447

    Alexz 8447 Активный участник

    С нами с:
    01.06.2005
    Сообщения:
    44
    Симпатии:
    0
    Баллы:
    5
    В первой расположены по центру каждого ребра (режим edge)
     
  13. DiMay

    DiMay Активный участник

    С нами с:
    24.10.2005
    Сообщения:
    37
    Симпатии:
    0
    Баллы:
    5
    Soft Body, Instancer...
    Единственное, чтобы "инстансируемый" объект располагался вдоль нормалей - необходимо, скорее всего, ввести новый атрибут (РР), котрый будет отвечать за ориентацию частиц вдоль нормалей..
     

    Вложения:

    • 8761.jpg
      8761.jpg
      Размер файла:
      185,1 КБ
      Просмотров:
      46
  14. Hasan Akniyev

    Hasan Akniyev Активный участник

    С нами с:
    31.03.2006
    Сообщения:
    195
    Симпатии:
    0
    Баллы:
    11
    Оригинальное решение :)
     
  15. Решатель

    Решатель Знаток

    С нами с:
    20.04.2005
    Сообщения:
    1.413
    Симпатии:
    0
    Баллы:
    44
    Только с инстансером ничего сделать нельзя.
     
  16. Lakoske

    Lakoske Знаток

    С нами с:
    12.05.2005
    Сообщения:
    142
    Симпатии:
    0
    Баллы:
    21
    int $stp=1;
    makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 -jointOrient;
    $nm=`ls -sl`;
    $pr="";
    $tr=`getAttr $nm.translate`;
    int $vmax[]=`polyEvaluate -v`;
    for ($i=0; $i<=$vmax[0]-1;$i+=$stp){
    $n0=`duplicate sp -name ("sp"+$i)`;
    $nm_s="sp"+($i);
    rename $n0 $nm_s;
    float $tr_v[]=`getAttr ($nm[0]+".vt["+$i+"]")`;
    float $tr_p[]=`getAttr ($nm[0]+".pt["+$i+"]")`;
    $tr_v[0]+=$tr_p[0]; $tr_v[1]+=$tr_p[1]; $tr_v[2]+=$tr_p[2];
    setAttr ($nm_s+".translate") -type "double3" ($tr[0]+$tr_v[0]) ($tr[1]+$tr_v[1]) ($tr[2]+$tr_v[2]);
    $pr+=($nm_s+" ");
    }
    eval ("select "+$pr);
    group -name "nodes1";

    //только убогий скрипт довольно получился. дублируемый объект должен называться sp, объект, по вертексам которого размещаются дубликаты должен быть выделен
     
  17. Hasan Akniyev

    Hasan Akniyev Активный участник

    С нами с:
    31.03.2006
    Сообщения:
    195
    Симпатии:
    0
    Баллы:
    11
    2Lakoske
    Спасибо
     
  18. Решатель

    Решатель Знаток

    С нами с:
    20.04.2005
    Сообщения:
    1.413
    Симпатии:
    0
    Баллы:
    44
    А сделать так, чтобы размножаемый обьект был просто последним в селекшне?

    И потом - getAttr не всегда корректно работает. Проще брать координаты и двигать в worldSpace.
    Вместо eval("select.. можно просто select $pr;
     
Модераторы: Dark™, Skif

Поделиться этой страницей