• R/O
  • SSH

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

Revisãoa76a4e8fc80a61f6223846895715265e27ee2024 (tree)
Hora2021-06-13 20:42:03
Autorsebastian_bugiu
Commitersebastian_bugiu

Mensagem de Log

Moved stuff around in preparation for changing from XForm crap to ENG_Quaternion and ENG_Vector3D.

Mudança Sumário

Diff

diff -r 9abe6a2fc3b7 -r a76a4e8fc80a HotshotEditor/src/com/javafx/experiments/jfx3dviewer/ContentModel.java
--- a/HotshotEditor/src/com/javafx/experiments/jfx3dviewer/ContentModel.java Wed Jun 09 01:20:47 2021 +0300
+++ b/HotshotEditor/src/com/javafx/experiments/jfx3dviewer/ContentModel.java Sun Jun 13 14:42:03 2021 +0300
@@ -504,7 +504,7 @@
504504
505505 {
506506 mouseEventHandler = event -> {
507- // System.out.println("MouseEvent ...");
507+// System.out.println("MouseEvent ...");
508508
509509 double flip = -1.0;
510510
@@ -530,17 +530,22 @@
530530 resetCurrentIntersectedNode();
531531 } else {
532532 currentIntersectedNode = pickResult.getIntersectedNode();
533- if (currentIntersectedNode.getTransforms().size() == 0) {
534- currentIntersectedNode.getTransforms().add(new Affine());
533+ Asteroid asteroid = nodeToAsteroidMap.get(currentIntersectedNode);
534+ if (asteroid == null) {
535+ currentIntersectedNode = null;
536+ } else {
537+ if (currentIntersectedNode.getTransforms().size() == 0) {
538+ currentIntersectedNode.getTransforms().add(new Affine());
539+ }
540+ NodeData nodeData = nodeMap.get(currentIntersectedNode);
541+ if (nodeData == null) {
542+ nodeData = new NodeData();
543+ nodeMap.put(currentIntersectedNode, nodeData);
544+ }
545+ currentIntersectedNodeDistance = pickResult.getIntersectedDistance();
546+ currentIntersectedNodeInitialPos = Utility.unProjectDirection(camera, cameraXform.rx, cameraXform.ry, cameraXform.rz, mousePosX, mousePosY,
547+ getSubScene().getWidth(), getSubScene().getHeight());
535548 }
536- NodeData nodeData = nodeMap.get(currentIntersectedNode);
537- if (nodeData == null) {
538- nodeData = new NodeData();
539- nodeMap.put(currentIntersectedNode, nodeData);
540- }
541- currentIntersectedNodeDistance = pickResult.getIntersectedDistance();
542- currentIntersectedNodeInitialPos = Utility.unProjectDirection(camera, cameraXform.rx, cameraXform.ry, mousePosX, mousePosY,
543- getSubScene().getWidth(), getSubScene().getHeight());
544549 }
545550
546551
@@ -563,20 +568,26 @@
563568 mouseDeltaX = (mousePosX - mouseOldX); //*DELTA_MULTIPLIER;
564569 mouseDeltaY = (mousePosY - mouseOldY); //*DELTA_MULTIPLIER;
565570
566-
571+ System.out.println("mouseDeltaX: " + mouseDeltaX + " mouseDeltaY: " + mouseDeltaY);
567572
568573 if (currentIntersectedNode != null) {
569574 NodeData nodeData = nodeMap.get(currentIntersectedNode);
570575 if (currentModifier == Modifier.TRANSLATION) {
571- Point3D vecPos = Utility.unProjectDirection(camera, cameraXform.rx, cameraXform.ry, mousePosX, mousePosY,
576+ Point3D vecPos = Utility.unProjectDirection(camera, cameraXform.rx, cameraXform.ry, cameraXform.rz, mousePosX, mousePosY,
572577 getSubScene().getWidth(), getSubScene().getHeight());
573- Point3D p = vecPos.subtract(currentIntersectedNodeInitialPos).multiply(currentIntersectedNodeDistance);
574- nodeData.getNodePos().addInPlace(new ENG_Vector4D(p.getX(), -1 * p.getY(), p.getZ(), 1.0));
578+ Point3D subtract = vecPos.subtract(currentIntersectedNodeInitialPos);
579+ ENG_Matrix4 rotationMatrix = nodeData.getNodeRotation().toRotationMatrix();
580+ ENG_Vector4D transformedMousePos = rotationMatrix.transform(new ENG_Vector4D(subtract.getX(), subtract.getY(), subtract.getZ(), 1.0f));
581+// Point3D p = subtract.multiply(currentIntersectedNodeDistance);
582+ System.out.println("substract: " + subtract + " transformedMousePos: " + transformedMousePos);
583+ nodeData.getNodePos().addInPlace(new ENG_Vector4D(transformedMousePos.x, -1 * transformedMousePos.y, transformedMousePos.z, 1.0));
575584 // getCurrentIntersectedNodeTransform().appendTranslation(p.getX(), -1 * p.getY(), p.getZ());
576585 Asteroid asteroid = nodeToAsteroidMap.get(currentIntersectedNode);
577- asteroid.getPosition().set(nodeData.getNodePos());
578- currentIntersectedNodeInitialPos = vecPos;
579- currentIntersectedNodeDistance = event.getPickResult().getIntersectedDistance();
586+ if (asteroid != null) {
587+ asteroid.getPosition().set(nodeData.getNodePos());
588+ currentIntersectedNodeInitialPos = vecPos;
589+ currentIntersectedNodeDistance = event.getPickResult().getIntersectedDistance();
590+ }
580591 } else if (currentModifier == Modifier.ROTATION) {
581592 if (mouseDeltaX != 0 || mouseDeltaY != 0) {
582593 Point3D zVec = new Point3D(0, 0, 1);
@@ -592,7 +603,9 @@
592603 nodeRotation.mulInPlace(currentRot);
593604 nodeRotation.mulInPlace(currentOrientationCopy);
594605 Asteroid asteroid = nodeToAsteroidMap.get(currentIntersectedNode);
595- asteroid.getOrientation().set(nodeRotation);
606+ if (asteroid != null) {
607+ asteroid.getOrientation().set(nodeRotation);
608+ }
596609 // Point3D pivot = new Point3D(getCurrentIntersectedNodeTransform().getTx(), getCurrentIntersectedNodeTransform().getTy(), getCurrentIntersectedNodeTransform().getTz());
597610 // System.out.println("rot pivot: " + pivot);
598611 // getCurrentIntersectedNodeTransform().appendRotation(1, new Point3D(0, 0, 0), rotAxis);
@@ -605,22 +618,8 @@
605618 trans.setTrans(nodeData.getNodePos());
606619
607620 Affine transform = getCurrentIntersectedNodeTransform();
608- transform.setMxx(trans.get(0, 0));
609- transform.setMxy(trans.get(0, 1));
610- transform.setMxz(trans.get(0, 2));
611- transform.setTx(trans.get(0, 3));
612- transform.setMyx(trans.get(1, 0));
613- transform.setMyy(trans.get(1, 1));
614- transform.setMyz(trans.get(1, 2));
615- transform.setTy(trans.get(1, 3));
616- transform.setMzx(trans.get(2, 0));
617- transform.setMzy(trans.get(2, 1));
618- transform.setMzz(trans.get(2, 2));
619- transform.setTz(trans.get(2, 3));
621+ Utility.setAffine(trans, transform);
620622 } else {
621-
622-
623-
624623 @SuppressWarnings("unused")
625624 boolean alt = (true || event.isAltDown()); // For now, don't require ALT to be pressed
626625 if (alt && (event.isMiddleButtonDown()
@@ -634,11 +633,11 @@
634633 * modifier * 0.3); // -
635634 } else if (alt && event.isPrimaryButtonDown()) {
636635 cameraXform.ry.setAngle(cameraXform.ry.getAngle()
637- - yFlip * mouseDeltaX
636+ - yFlip * mouseDeltaY
638637 * modifierFactor * modifier
639638 * 2.0); // +
640639 cameraXform.rx.setAngle(cameraXform.rx.getAngle()
641- + flip * mouseDeltaY
640+ + flip * mouseDeltaX
642641 * modifierFactor * modifier
643642 * 2.0); // -
644643 } else if (alt && event.isSecondaryButtonDown()) {
@@ -651,11 +650,14 @@
651650 // camera.setTranslateZ(newZ);
652651 }
653652 }
653+ } else if (event.getEventType() == MouseEvent.MOUSE_RELEASED) {
654654
655655 }
656656 };
657657 }
658658
659+
660+
659661 private void resetCurrentIntersectedNode() {
660662 currentIntersectedNode = null;
661663 currentIntersectedNodeDistance = -1.0;
@@ -668,24 +670,20 @@
668670 camera.setFarClip(10000.0); // TODO: Workaround as per RT-31255
669671 camera.setFieldOfView(90);
670672
671- camera.getTransforms()
672- .addAll(yUpRotate,
673- //cameraXRotate,
674- //cameraYRotate,
675- cameraPosition, cameraLookXRotate, cameraLookZRotate);
673+ camera.getTransforms().addAll(yUpRotate,
674+ //cameraXRotate,
675+ //cameraYRotate,
676+ cameraPosition,
677+ cameraLookXRotate,
678+ cameraLookZRotate);
676679 //root3D.getChildren().add(camera);
677- root3D.getChildren()
678- .add(cameraXform);
679- cameraXform.getChildren()
680- .add(cameraXform2);
681- cameraXform2.getChildren()
682- .add(cameraXform3);
683- cameraXform3.getChildren()
684- .add(camera);
680+ root3D.getChildren().add(cameraXform);
681+ cameraXform.getChildren().add(cameraXform2);
682+ cameraXform2.getChildren().add(cameraXform3);
683+ cameraXform3.getChildren().add(camera);
685684 cameraPosition.setZ(-cameraDistance);
686685 // camera.setTranslateZ(-cameraDistance);
687- root3D.getChildren()
688- .add(autoScalingGroup);
686+ root3D.getChildren().add(autoScalingGroup);
689687
690688 SessionManager sessionManager = SessionManager.getSessionManager();
691689 sessionManager.bind(cameraLookXRotate.angleProperty(),
@@ -1054,4 +1052,16 @@
10541052 // asteroidList.add(new Asteroid("Asteroid1", new ENG_Vector3D(1500.0f -200.0f -250.0f), new ENG_Quaternion(true), 50));
10551053 templateContext.put("asteroids", asteroidList);
10561054 }
1055+
1056+ public Xform getCameraXform() {
1057+ return cameraXform;
1058+ }
1059+
1060+ public Xform getCameraXform2() {
1061+ return cameraXform2;
1062+ }
1063+
1064+ public Xform getCameraXform3() {
1065+ return cameraXform3;
1066+ }
10571067 }
diff -r 9abe6a2fc3b7 -r a76a4e8fc80a HotshotEditor/src/com/javafx/experiments/jfx3dviewer/NavigationController.java
--- a/HotshotEditor/src/com/javafx/experiments/jfx3dviewer/NavigationController.java Wed Jun 09 01:20:47 2021 +0300
+++ b/HotshotEditor/src/com/javafx/experiments/jfx3dviewer/NavigationController.java Sun Jun 13 14:42:03 2021 +0300
@@ -78,16 +78,16 @@
7878 camNav.setListener((direction, amount) -> {
7979 switch (direction) {
8080 case TOP:
81- contentModel.getCameraXRotate().setAngle(contentModel.getCameraXRotate().getAngle()-amount);
81+ contentModel.getCameraXform().rx.setAngle(contentModel.getCameraXform().rx.getAngle()-amount);
8282 break;
8383 case BOTTOM:
84- contentModel.getCameraXRotate().setAngle(contentModel.getCameraXRotate().getAngle()+amount);
84+ contentModel.getCameraXform().rx.setAngle(contentModel.getCameraXform().rx.getAngle()+amount);
8585 break;
8686 case LEFT:
87- contentModel.getCameraYRotate().setAngle(contentModel.getCameraYRotate().getAngle()+amount);
87+ contentModel.getCameraXform().ry.setAngle(contentModel.getCameraXform().ry.getAngle()+amount);
8888 break;
8989 case RIGHT:
90- contentModel.getCameraYRotate().setAngle(contentModel.getCameraYRotate().getAngle()-amount);
90+ contentModel.getCameraXform().ry.setAngle(contentModel.getCameraXform().ry.getAngle()-amount);
9191 break;
9292 }
9393 });
diff -r 9abe6a2fc3b7 -r a76a4e8fc80a HotshotEditor/src/com/javafx/experiments/utils3d/Utility.java
--- a/HotshotEditor/src/com/javafx/experiments/utils3d/Utility.java Wed Jun 09 01:20:47 2021 +0300
+++ b/HotshotEditor/src/com/javafx/experiments/utils3d/Utility.java Sun Jun 13 14:42:03 2021 +0300
@@ -1,7 +1,9 @@
11 package com.javafx.experiments.utils3d;
22
3+import headwayent.hotshotengine.ENG_Matrix4;
34 import javafx.geometry.Point3D;
45 import javafx.scene.PerspectiveCamera;
6+import javafx.scene.transform.Affine;
57 import javafx.scene.transform.Rotate;
68
79 public class Utility {
@@ -11,12 +13,32 @@
1113 * in the Scene space
1214 */
1315
14- public static Point3D unProjectDirection(PerspectiveCamera camera, Rotate cameraXOrientation, Rotate cameraYOrientation, double sceneX, double sceneY,
16+ public static Point3D unProjectDirection(PerspectiveCamera camera,
17+ Rotate cameraXOrientation,
18+ Rotate cameraYOrientation,
19+ Rotate cameraZOrientation,
20+ double sceneX, double sceneY,
1521 double sWidth, double sHeight) {
1622 double tanOfHalfFOV = Math.tan(Math.toRadians(camera.getFieldOfView()) * 0.5f);
17- Point3D vMouse = new Point3D(tanOfHalfFOV*(2*sceneX/sWidth-1), tanOfHalfFOV*(2*sceneY/sWidth-sHeight/sWidth), 1);
18- vMouse = cameraYOrientation.transform(vMouse);
19- vMouse = cameraXOrientation.transform(vMouse);
23+ Point3D vMouse = new Point3D(tanOfHalfFOV*(2*sceneX/sWidth-1), tanOfHalfFOV*(2*sceneY/sWidth-sHeight/sWidth), 0);
24+// vMouse = cameraZOrientation.transform(vMouse);
25+// vMouse = cameraYOrientation.transform(vMouse);
26+// vMouse = cameraXOrientation.transform(vMouse);
2027 return vMouse;
2128 }
29+
30+ public static void setAffine(ENG_Matrix4 trans, Affine transform) {
31+ transform.setMxx(trans.get(0, 0));
32+ transform.setMxy(trans.get(0, 1));
33+ transform.setMxz(trans.get(0, 2));
34+ transform.setTx(trans.get(0, 3));
35+ transform.setMyx(trans.get(1, 0));
36+ transform.setMyy(trans.get(1, 1));
37+ transform.setMyz(trans.get(1, 2));
38+ transform.setTy(trans.get(1, 3));
39+ transform.setMzx(trans.get(2, 0));
40+ transform.setMzy(trans.get(2, 1));
41+ transform.setMzz(trans.get(2, 2));
42+ transform.setTz(trans.get(2, 3));
43+ }
2244 }