Skocz do zawartości

Featured Replies

Napisano

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

 

lPTlZTS.jpg

etVssih.jpg

Edytowane przez kuro

  • Odpowiedzi 1
  • Wyświetleń 4,1k
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Popular Days

Napisano

Macierz musi byc ortogonalna. Mozesz zastosowac formule gram-schmidt lub wbudowana funcje w mxs orthogonalize.

Edytowane przez CgBartosz

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności