현재 임의의 행렬로 객체의 피벗을 변환하려고합니다.전체 객체 오프셋 변환에 대한 Maxscript 액세스 (비 균일 스케일)
지금까지는 비 균일 스케일을 적용하지 않고 객체에 대해 수행 할 수 있었지만 대상 객체에 일정하지 않은 비늘이있는 경우 중단됩니다.
나는이 작업을 위해, 이것은 scalerotationpart
MAXScript를에 unavalaible 것 같다 objectOffset,의에 액세스 할 필요가, 인상을 가지고있다. objectOffset 규모가 ScaleValue
로 표현 된 바와 같이
이
은 (a 규모 벡터 및 쿼터니언 포함 SDK docs 참조)가 C++ SDK를 사용하여 행할 수있다.나는 분명한 뭔가를 놓치고 있습니까? 아니면 작동하도록 maxscript 플러그인 확장을 만들어야합니까?
감사합니다,
내 출발점이었다 다음과 같은 기능 :
fn AlignPivotTo Obj Trgt =
(
-- http://forums.cgsociety.org/archive/index.php/t-636495.html
--This fails miserably for any objects having a negative or non-uniform scale, but it seems to work well in any other case I have tested:
-- Get matrix from object
if classOf Trgt != matrix3 then Trgt = Trgt.transform
-- Store child transforms
local ChldTms = in coordSys Trgt (for Chld in Obj.children collect Chld.transform)
-- Current offset transform matrix
local TmScale = scaleMatrix Obj.objectOffsetScale
local TmRot = Obj.objectOffsetRot as matrix3
local TmPos = transMatrix Obj.objectOffsetPos
local TmOffset = TmScale * TmRot * TmPos
-- New offset transform matrix
local deltaTransform = obj.transform * inverse Trgt
TmOffset *= deltaTransform
-- Apply matrix
Obj.transform = Trgt
-- Restore offsets
Obj.objectOffsetPos = TmOffset.translationPart * inverse TmOffset.scalerotationpart
Obj.objectOffsetRot = TmOffset.rotationPart * invers eTmOffset.scalerotationpart
Obj.objectOffsetScale = TmOffset.scalePart
-- Restore child transforms
for i = 1 to Obj.children.count do (Obj.children[i].transform = ChldTms[i] * inverse Trgt * Obj.transform)
)
또한 obj-offset에 대해 C++에서 회전 된 스케일을 만드는 경우 아티스트가이를 제거 할 수 없음을 잊지 마십시오. – FrozenKiwi
통찰력을 가져 주셔서 감사 드리며, 일정하지 않은 비늘이있는 객체에서 실패한 피벗 정렬을 스크립트로 작성하는 동안이 문제가 발생했습니다. 기본적으로 안전한 경로를 가져 와서 ResetXForm을 적용했습니다. 난 maxscript obj - 오프셋 조작 C++보다 덜 표현 있는지 확인하려고 해요. – rotoglup