From 833170c7d45dd26204ab3b7be47013422a994e95 Mon Sep 17 00:00:00 2001 From: Xing Wang Date: Tue, 9 Jul 2024 23:21:12 +0200 Subject: [PATCH] Add perspective camera (#20) --- demo/demo.js | 6 ++- src/atoms/plugins/vectorField.js | 2 +- src/core/GUIManager.js | 3 +- src/core/blendjs.js | 37 ++++++++++--- src/tools/camera.js | 51 ++++++++++++------ tests/e2e/gui.spec.js | 9 ++++ .../Camera-perspective-chromium-linux.png | Bin 0 -> 39432 bytes 7 files changed, 81 insertions(+), 27 deletions(-) create mode 100644 tests/e2e/gui.spec.js-snapshots/Camera-perspective-chromium-linux.png diff --git a/demo/demo.js b/demo/demo.js index f73f579..4daaaa9 100644 --- a/demo/demo.js +++ b/demo/demo.js @@ -71,6 +71,7 @@ async function updateAtoms(filename, fileContent = null) { editor.avr.atoms = atomsList; // editor.avr.bondManager.settings[1].color1 = "blue"; // editor.avr.VFManager.addSetting({ origins: "positions", vectors: "movement", color: "#ff0000", radius: 0.1 }); + editor.avr.colorType = "CPK"; editor.avr.modelStyle = 1; editor.instancedMeshPrimitive.fromSettings([]); // Clear mesh primitives break; @@ -158,7 +159,7 @@ async function updateAtoms(filename, fileContent = null) { nframes: 50, kpoint: kpoint, // repeat: [1, 1, 1], - repeat: [4, 4, 1], + repeat: [5, 5, 1], }); // control the speed of the animation @@ -169,8 +170,9 @@ async function updateAtoms(filename, fileContent = null) { ]; editor.avr.frameDuration = 50; editor.avr.VFManager.addSetting({ origins: "positions", vectors: "movement", color: "#ff0000", radius: 0.1 }); - editor.avr.modelStyle = 1; editor.avr.bondManager.hideLongBonds = false; + editor.avr.showBondedAtoms = false; + editor.avr.modelStyle = 1; editor.avr.drawModels(); break; case "Primitives": diff --git a/src/atoms/plugins/vectorField.js b/src/atoms/plugins/vectorField.js index d9a91b6..76f412d 100644 --- a/src/atoms/plugins/vectorField.js +++ b/src/atoms/plugins/vectorField.js @@ -133,7 +133,7 @@ export class VectorField { if atomIndex is null, update all bonds if atoms is null, use this.viewer.atoms, otherwise use the provided atoms to update the bonds, e.g. trajectory data */ - // console.log("updateBondMesh: ", atomIndex); + // console.log("updateArrowMesh: ", atomIndex); if (atoms === null) { atoms = this.viewer.atoms; } diff --git a/src/core/GUIManager.js b/src/core/GUIManager.js index 43b0fa9..f4479ae 100644 --- a/src/core/GUIManager.js +++ b/src/core/GUIManager.js @@ -1,4 +1,3 @@ -import * as THREE from "three"; import { GUI } from "dat.gui"; import { setupCameraGUI } from "../tools/camera.js"; // Assuming these are utility functions import { createViewpointButtons } from "../tools/viewpoint.js"; @@ -49,7 +48,7 @@ class GUIManager { addCameraControls() { createViewpointButtons(this.weas, this.gui); - setupCameraGUI(this.gui, this.weas.tjs.camera, this.weas.tjs.scene); + setupCameraGUI(this.weas.tjs, this.gui, this.weas.tjs.camera); } addButtons() { diff --git a/src/core/blendjs.js b/src/core/blendjs.js index 0479166..6166e4b 100644 --- a/src/core/blendjs.js +++ b/src/core/blendjs.js @@ -51,8 +51,27 @@ export class BlendJS { this.meshes = {}; this.lights = {}; this.renderers = {}; // New property to store renderers + this._cameraType = "Orthographic"; //"Perspective" this.init(); } + + get cameraType() { + return this._cameraType; + } + + set cameraType(value) { + this._cameraType = value; + this.controls = new OrbitControls(this.camera, this.renderers["MainRenderer"].renderer.domElement); + this.updateCameraAndControls({}); + } + + get camera() { + if (this._cameraType === "Orthographic") { + return this.orthographicCamera; + } + return this.perspectiveCamera; + } + init() { this.scene.background = new THREE.Color(0xffffff); // Set the scene's background to white // Create a renderer @@ -70,13 +89,14 @@ export class BlendJS { labelRenderer.domElement.style.pointerEvents = "none"; this.addRenderer("LabelRenderer", labelRenderer); // Create a camera - // this.camera = new THREE.PerspectiveCamera(50, this.containerElement.clientWidth / this.containerElement.clientHeight, 1, 500); + this.perspectiveCamera = new THREE.PerspectiveCamera(50, this.containerElement.clientWidth / this.containerElement.clientHeight, 1, 500); + this.perspectiveCamera.layers.enable(1); const frustumSize = 20; // This can be adjusted based on scene's scale const aspect = this.containerElement.clientWidth / this.containerElement.clientHeight; const frustumHalfHeight = frustumSize / 2; const frustumHalfWidth = frustumHalfHeight * aspect; - this.camera = new OrthographicCamera( + this.orthographicCamera = new OrthographicCamera( -frustumHalfWidth, // left frustumHalfWidth, // right frustumHalfHeight, // top @@ -85,12 +105,13 @@ export class BlendJS { 2000, // far clipping plane this, ); + this.orthographicCamera.layers.enable(1); // Set initial camera position this.camera.position.set(0, -100, 0); this.camera.lookAt(0, 0, 0); // Enable layer 1 for the camera // this layer will be used for vertex indicators - this.camera.layers.enable(1); + this.scene.add(this.camera); // Create a light const light = new THREE.DirectionalLight(0xffffff, 2.0); @@ -174,7 +195,7 @@ export class BlendJS { this.render(); } // - updateCameraAndControls({ lookAt = null, direction = [0, 0, 1], distance = null, zoom = 1 }) { + updateCameraAndControls({ lookAt = null, direction = [0, 0, 1], distance = null, zoom = 1, fov = 50 }) { /* Calculate the camera parameters based on the bounding box of the scene and the camera direction The camera to look at the lookAt, and rotate around the lookAt of the atoms. @@ -215,10 +236,14 @@ export class BlendJS { distance = size.z + padding; } let cameraPosition = lookAt.clone().add(direction.multiplyScalar(distance)); - this.camera.updatePosition(cameraPosition.x, cameraPosition.y, cameraPosition.z); + this.camera.position.set(cameraPosition.x, cameraPosition.y, cameraPosition.z); this.camera.lookAt(lookAt); - this.camera.updateZoom(zoom); + if (this.camera.isOrthographicCamera) { + this.camera.updateZoom(zoom); + } else { + this.camera.fov = fov; // Set the new field of view + } this.camera.updateProjectionMatrix(); // Set the camera target to the lookAt of the atoms this.controls.target.set(lookAt.x, lookAt.y, lookAt.z); diff --git a/src/tools/camera.js b/src/tools/camera.js index d805b45..07edaf4 100644 --- a/src/tools/camera.js +++ b/src/tools/camera.js @@ -1,32 +1,51 @@ -export function setupCameraGUI(gui, camera) { +import * as THREE from "three"; + +export function setupCameraGUI(tjs, gui, camera) { // Create a folder for camera parameters const cameraFolder = gui.addFolder("Camera"); // Temp storage for position to use in onChange callbacks const position = { x: camera.position.x, y: camera.position.y, z: camera.position.z }; + // Dropdown for selecting camera type + const cameraType = { type: camera instanceof THREE.PerspectiveCamera ? "Perspective" : "Orthographic" }; + cameraFolder + .add(cameraType, "type", ["Perspective", "Orthographic"]) + .name("Camera Type") + .onChange((newType) => { + tjs.cameraType = newType; + tjs.updateCameraAndControls({}); + }); + + function updateCameraPosition(x, y, z) { + camera.position.set(x, y, z); + position.x = x; + position.y = y; + position.z = z; + } + + // Add GUI controllers for position cameraFolder .add(position, "x", -100, 100) .name("X Position") - .onChange((newValue) => { - camera.updatePosition(newValue, position.y, position.z); - // Update the temp storage to ensure consistency - position.x = newValue; - }); + .onChange((newValue) => updateCameraPosition(newValue, position.y, position.z)); cameraFolder .add(position, "y", -100, 100) .name("Y Position") - .onChange((newValue) => { - camera.updatePosition(position.x, newValue, position.z); - // Update the temp storage to ensure consistency - position.y = newValue; - }); + .onChange((newValue) => updateCameraPosition(position.x, newValue, position.z)); cameraFolder .add(position, "z", -100, 100) .name("Z Position") - .onChange((newValue) => { - camera.updatePosition(position.x, position.y, newValue); - // Update the temp storage to ensure consistency - position.z = newValue; - }); + .onChange((newValue) => updateCameraPosition(position.x, position.y, newValue)); + + function updateCameraType(type) { + if (type === "Perspective") { + camera.fov = camera.fov || 50; // Default fov if not set + camera.updateProjectionMatrix(); + } else if (type === "Orthographic") { + // Specific adjustments for Orthographic camera can be made here + // camera.left, camera.right, camera.top, camera.bottom, etc. + camera.updateProjectionMatrix(); + } + } } diff --git a/tests/e2e/gui.spec.js b/tests/e2e/gui.spec.js index da24a1e..4beb2af 100644 --- a/tests/e2e/gui.spec.js +++ b/tests/e2e/gui.spec.js @@ -6,6 +6,15 @@ test("Gui config", async ({ page }) => { await expect(page).toHaveScreenshot(); }); +test("Camera", async ({ page }) => { + await page.goto("http://127.0.0.1:8080/tests/e2e/testCrystal.html"); + // open gui + await page.evaluate(() => { + window.editor.tjs.cameraType = "perspective"; + }); + await expect(page).toHaveScreenshot("Camera-perspective.png"); +}); + test("Crystal", async ({ page }) => { await page.goto("http://127.0.0.1:8080/tests/e2e/testCrystal.html"); await expect(page).toHaveScreenshot(); diff --git a/tests/e2e/gui.spec.js-snapshots/Camera-perspective-chromium-linux.png b/tests/e2e/gui.spec.js-snapshots/Camera-perspective-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..56757bf86310d15a730d8e89375fb54f744572fe GIT binary patch literal 39432 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 b4T8Vi5gv9r+AC6HK}~8;S3j3^P6