#javascript #matrix #three.js #autodesk-forge #matrix-multiplication
Вопрос:
Я создал набор инструментов, который может поворачивать и перемещать сетку с осью посередине. Когда я разделю вращение и положение, положение вернется к предыдущему. Однако это вызывает вращение не на сетке. Поэтому я использую умножение. Но это не то, что я ожидал, потому что положение сетки должно быть там, где я его отметил (не на оси сетки). Как повернуть и расположить объект так, чтобы он оставался в указанном положении и вращался в этом месте ? Вот мой код :
const translation = new THREE.Matrix4().makeTranslation( this.valueAOA_X, this.valueAOA_Y, this.valueAOA_Z ); const angleRadian = CoordinateConverter.degreeToRadian( this.valueAOA_Rotation ); const rotationAOA = new THREE.Matrix4().makeRotationZ(angleRadian); this.selectedModel.setPlacementTransform( rotationAOA.multiply(translation) );
Комментарии:
1. С кем вы работаете
Matrix4
? Есть ли что-то неправильное в использовании простогоselectedModel.position.set(x, y, z);
и затемselectedModel.rotation.set(x, y, z);
?2. Потому что я использовал Autodesk Forge Scene Builder. Поэтому, чтобы иметь возможность взаимодействовать с viewerm, я должен использовать Matrix4.
3. Хорошо, я добавил
[autodesk-forge]
тег, надеюсь, кто-нибудь из службы поддержки Autodesk сможет помочь вам с их платформой.4. Привет, Маркиззо. Я исправил это путем перевода умножения вращения
Ответ №1:
Исправлено этой строкой:
this.selectedModel.setPlacementTransform( translation.multiply(rotationAOA) );