Render.ru

Получение параметров меша. Проблеммы.

#1
1. Нормали.
Как получить нормаль к вертексу в заданном фэйсе? getNormal как-то странно работает... Как ему сказать о каком фэйсе идет речь?

2. Анимация.
Как в заданый момент времени получить матрицу меша, соответствующую его трансформации в этот самый момент времени?
 
#2
Со вторым вопросом разобрался. Оказалось так просто, что возникла новая проблемма :) Как узнать, а есть ли вобще у объекта анимация?
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#3
1. Втаком случае это просто нормаль к фэйсу getFaceNormal

2. проверить нужный контроллер параметра $.transform.isAnimated
 
#4
1. Не, это не getFaceNormal. Давай объясню поподробнее. На примере любимого чайника. У него есть галка "Smooth". Если ее убрать то действительно, для каждой тройки вертексов любого фэйса будет одна и та же нормаль - getFaceNormal этого фэйса, поэтому он такой "граненый". Если же поставить "Smooth" то чайник будет гладкий, потому что на одном и том же фэйсе у всех трех вертексов будет разная нормаль. Вот как их узнать?
Когда экспортируешь в ASE он пишет и FaceNormal-и и VertexNormal-и.

2. Спасибо за подсказку :)
 
#5
Появилось еще пара вопросов по скрипту. Чтобы не спамить спрошу тут.

1. Как узнать первый и последний кадр анимации? (которые по дефолту 0 - 100)
2. Как узнать количество кадров в секунду?
3. Можно ли запускать скрипт или его часть в отдельном потоке? Типа CreateThread в Win32 API, а то пока скрипт выполняется - MAX виснет нафиг :(
4. Как принудительно заставить перерисоваться Rollout?

Главный вопрос. У меня есть бегающий человечик сделанный с помошью плагина C.A.T. Скелет + обшивка. Написал на скрипте простейший экспортер с анимацией. Запускаю и смотрю фильм ужасов - тело стоит на месте, из него выходит скелет и идет гулять :) Тоесть ситуация такая:

at time i
matrix = geometry[n].transform
WriteFloat ...

Так вот этот geometry[n].transform не зависит от того, какой у меня at time. Типа "ан нэту у нас анымацыи", хотя в максе она есть. В чем может быть проблемма?
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#6
1. Не, это не getFaceNormal
значит считаеш их сам.

1. Как узнать первый и последний кадр анимации
animationRange.start --Get the start frame of the range
animationRange.end

3. Можно ли запускать скрипт или его часть в отдельном потоке? Типа CreateThread в Win32 API, а то пока скрипт выполняется - MAX виснет нафиг :(
нет
4. Как принудительно заставить перерисоваться Rollout?
интелигентно нет, Интерфейс на полном автомате

5. geometry[n].transform не зависит от того, какой у меня at time
значит применяют какойто нетипичный контроллер
нужно работать с ним напрямую если есть возможность
 
#7
Denis, спасибо за ответы :)

По поводу getFaceNormal... Я думаю что все же можно получить smooth нормаль. Есть ведь getVertexNormal. И как мне кажется ему надо каким-то образом сообщить о каком фэйсе идет речь.

Кадры в секунду нашел. Просто переменная frameRate :)

По поводу перерисовки... Очень неприятная бага - если после GetSaveFileName сразу уйти в долгий цикл то окно скорее всего не перерисуется. Смотрится убого :( Надо попробовать вариации на тему GetDialogPos - SetDialogPos...

По поводу вильма ужасов - все в порядке. Это плагин глючит. Экспортировал его в 3DS а потом импортировал - увидел то же что и в своей проге.

Еще два вопросика:

1. Вот перебираю я массивы geometry, cameras, lights... Как узнать, выделен ли объект? Не считая извратного способа на тему поиска объекта среди selection?

2. Можно ли свой скрипт встроить в панель макса? Типа как плагин. Чтобы при загрузке появлялся?
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#8
1. Смотри общие свойства обьектов
.isSelected

2. только если писать как скрипт-плаг
принято оформлять в виде макроскрипта
 
#9
Поделись ссылочкой на простенький пример макроскрипта? :)

Ну и все же о отичках, точнее о нормалях...
В файлике MAXScript Reference 6.0 сказано следующее:

getNormal <mesh> <vert_index_integer>

Returns the normal at the indexed vertex’s position as a point3. The normal is based on the faces that use the vertex and the smoothing groups assigned to those faces.

Главная фраза - The normal is _based on the faces_ that use the vertex... Значит все же как-то можно указать о каком фэйсе идет речь?... ВОТ КАК???..
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#10
>Поделись ссылочкой на простенький пример макроскрипта? :)
3dsmax\UI\marcroscripts
полнное описание с примерами найдеш в хелпе

собственно итегрирует твой скрипт в итерфейс макса
что позволит настроить его через меню cutomize UI
на клавишу, вытащить на туллбар или RC меню.

getNormal
Никак.Забуть этот метод.
Если хочеш работать с vertx Normals
прийдется либо счиать их
либо работать через модификатор Edit_Normals
 
Сверху