[Java3D]Centre de rotation
Bonjour,
Je cherche à faire une rotation selon un centre en mouvement.
Donc comment prendre les coordonnées d'un point (pointe de mon volume)?
Puis, où le mettre dans le code qui suit (J'ai reécrit la classe MouseRotate) ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| if ((id == MouseEvent.MOUSE_DRAGGED) &&
!evt.isMetaDown() && !evt.isAltDown() && !evt.isControlDown()) {
x = evt.getX();
y = evt.getY();
dx = x - x_last;
dy = y - y_last;
if (!reset) {
x_angle = dy * y_factor;
AxisAngle4f axis = new AxisAngle4f(1, 0, 0, (float) (x_angle));
transformX.set(axis);
transformGroup.getTransform(currXform);
Matrix4d mat = new Matrix4d();
// Remember old matrix
currXform.get(mat);
// Translate to origin
if (invert) {
currXform.mul(currXform, transformX);
} else {
currXform.mul(transformX, currXform);
}
// Set old translation back
Vector3d translation = new Vector3d(mat.m03, mat.m13, mat.m23);
currXform.setTranslation(translation);
// Update xform
transformGroup.setTransform(currXform);
transformChanged(currXform);
if (callback != null) {
callback.transformChanged(MouseBehaviorCallback.ROTATE,
currXform);
}
} else {
reset = false;
}
x_last = x;
y_last = y;
} else if (id == MouseEvent.MOUSE_PRESSED) {
x_last = evt.getX();
y_last = evt.getY();
} |
Merci
Edit:
Avec ce code, le centre de rotation est toujours au centre de notre volume. Pouvons nous choisir le centre de rotation ?