Возможно ли, "не на глаз" (числено или по привязкам), смаштабировать один объект по другому (сделать одиакового масштаба)?И если да, то каким образом...Высчитывать при помощи калькулятора коэффециенты масштаба трудновато...Заранее спасибо.
Каждый из объектов имеет единичную матрицу для маштабирования вида [x*i,y*j,z*k] т.е. х,y,z определяет во сколько увеличить маштаб вдоль векторов i,j,k.Однако все объекты имеют разные размеры.Как уменьшить объект который в n раз больше другого, что бы они были одинакового размера?Например в автокад команда алигн задает две(три) точки и один объект подгоняется под другой.Это очень важно т.к. иногда приходится собирать все по кускам из разных чертежей.
>Как уменьшить объект который в n раз больше другого, что бы они были одинакового размера?
Ну логически надо уменьшить один объект в n раз, или в n раз увеличить другой..
Хотя я с Автокадом не работаю - и не совсем понимаю что ты имеешь ввиду, но может тебе надо подогнать размеры объектов, т.е. чтобы разные объекты имели одинаковый размер?
Если так - то тут придёться подгонять через bounding Box объектов.
Вот что я имею ввиду в простейшем случае: http://www.gamedev.ru/download/?id=3061
В сложном случае нужно установить камеру наблюдения на кронштейн и т.д.Т.е. уменьшить пропорционально в такое колиство раз что бы совпали крепежные отверстия.
Если бы можно было поднять точку c привязкой:
1)поднять две точки на одном объекте M(Mx,My),N(Nx,Ny)
2)поднять две точки на другом объекте K(Kx,Ky,L(Lx,Ly)
3)вычислить:
deltaX1 = |Mx-Nx|;deltaY1 = |My-Ny|;
deltaX2 = |Kx-Lx|;deltaY2 = |Ky-Ly|
4)если deltaX2*deltaY2 <> 0 then
scaleX = deltaX1/deltaX2;scaleY = deltaY1/deltaY2;
иначе ошибка
5)TargetObject2.scaleX = scaleX;TargetObject2.scaleY = scaleY;//TargetObject2.scaleZ = scaleX+scaleY/2;
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
FuelFire
GoodMan
2. Прописать в строке MaxScript Listenera:
$(Имя маштабируемого объекта).scale = $(Имя объекта с нужным маштабом).scale
Пример: $Sphere01.scale = $Box01.scale
FuelFire
[1,1,1]
$Box01.scale = $Box02.scale
[1,1,1]
Каждый из объектов имеет единичную матрицу для маштабирования вида [x*i,y*j,z*k] т.е. х,y,z определяет во сколько увеличить маштаб вдоль векторов i,j,k.Однако все объекты имеют разные размеры.Как уменьшить объект который в n раз больше другого, что бы они были одинакового размера?Например в автокад команда алигн задает две(три) точки и один объект подгоняется под другой.Это очень важно т.к. иногда приходится собирать все по кускам из разных чертежей.
GoodMan
Ну логически надо уменьшить один объект в n раз, или в n раз увеличить другой..
Хотя я с Автокадом не работаю - и не совсем понимаю что ты имеешь ввиду, но может тебе надо подогнать размеры объектов, т.е. чтобы разные объекты имели одинаковый размер?
Если так - то тут придёться подгонять через bounding Box объектов.
FuelFire
http://www.gamedev.ru/download/?id=3061
В сложном случае нужно установить камеру наблюдения на кронштейн и т.д.Т.е. уменьшить пропорционально в такое колиство раз что бы совпали крепежные отверстия.
GoodMan
Можно в принципе и в ручную так подогнать..
А если модели сложной формы? Или предполагаеться, что они будут идентичные по форме?
Как по твоему можно например привести к одному размеру шар и куб?
По какому алгоритму должно призводиться приведение к одному маштабу (размеру) в таких сложных случаях?
FuelFire
1)поднять две точки на одном объекте M(Mx,My),N(Nx,Ny)
2)поднять две точки на другом объекте K(Kx,Ky,L(Lx,Ly)
3)вычислить:
deltaX1 = |Mx-Nx|;deltaY1 = |My-Ny|;
deltaX2 = |Kx-Lx|;deltaY2 = |Ky-Ly|
4)если deltaX2*deltaY2 <> 0 then
scaleX = deltaX1/deltaX2;scaleY = deltaY1/deltaY2;
иначе ошибка
5)TargetObject2.scaleX = scaleX;TargetObject2.scaleY = scaleY;//TargetObject2.scaleZ = scaleX+scaleY/2;