Napisano 20 Kwiecień 20159 l Witam, dzisiaj mam pytanie odnośnie niedużego pluginu który piszę do Maxa w Maxscript-cie. Głównym jego zadaniem jest importowanie z innej aplikacji geometrii, jej przetwarzanie i na koniec dopasowywanie istniejących już elementów na scenie do niektórych zaimportowanych siatek. W tym celu importuję trzy proste sześciany z punktami pivot na środku (tą część mogę zmodyfikować na potrzeby innego rozwiązania) i staram się dopasować pozycję (prosta rzecz) i rotację point helpera do centralnego, największego sześcianu. Manualnie jest z tym trochę roboty, bo zawsze można się pomylić, więc chciałem rozwiązać to automatycznie. I tu problem, bo o ile jedną oś mogę prosto ustawić używając look-at constraint i wskazując na jeden z mniejszych sześcianów ("front") to nie mogę wymyślić sposobu na opanowanie drugiej osi ("side"). Załączam dwa screeny przedstawiające sytuację, jeśli ktoś miałby jakikolwiek pomysł w którą stronę to pchnąć lub co zmienić - będę ogromnie wdzięczny. Edit: zacząłem eksperymenty z określaniem normal dla jednej ze ścian sześcianu docelowego, żeby określić pozycję i orientację. Mniej więcej działa, ale zniekształca okrutnie siatkę i... no, nie do końca. objNormal = polyOp.getFaceNormal $targetCube 1 objCenter = $targetCube.pos objMatrix = matrix3 (cross objNormal [0,0,1]) [0,0,1] objNormal objCenter $fitCube.transform = objMatrix --lub $fitCube.transform *= objMatrix Pozdrawiam, kuro Edytowane 20 Kwiecień 20159 l przez kuro
Napisano 7 Czerwiec 20159 l Macierz musi byc ortogonalna. Mozesz zastosowac formule gram-schmidt lub wbudowana funcje w mxs orthogonalize. Edytowane 7 Czerwiec 20159 l przez CgBartosz
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto