1 |
- {"ast":null,"code":"import { Camera } from \"../../Cameras/camera.js\";\nimport { UniversalCamera } from \"../../Cameras/universalCamera.js\";\nimport { Matrix, Vector3 } from \"../../Maths/math.vector.js\";\nimport { TargetCamera } from \"../targetCamera.js\";\nimport { TransformNode } from \"../../Meshes/transformNode.js\";\nimport { Viewport } from \"../../Maths/math.viewport.js\";\n/**\n * Camera used to simulate stereoscopic rendering on real screens (based on UniversalCamera)\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras\n */\nexport class StereoscopicScreenUniversalCamera extends UniversalCamera {\n set distanceBetweenEyes(newValue) {\n this._distanceBetweenEyes = newValue;\n }\n /**\n * distance between the eyes\n */\n get distanceBetweenEyes() {\n return this._distanceBetweenEyes;\n }\n set distanceToProjectionPlane(newValue) {\n this._distanceToProjectionPlane = newValue;\n }\n /**\n * Distance to projection plane (should be the same units the like distance between the eyes)\n */\n get distanceToProjectionPlane() {\n return this._distanceToProjectionPlane;\n }\n /**\n * Creates a new StereoscopicScreenUniversalCamera\n * @param name defines camera name\n * @param position defines initial position\n * @param scene defines the hosting scene\n * @param distanceToProjectionPlane defines distance between each color axis. The rig cameras will receive this as their negative z position!\n * @param distanceBetweenEyes defines is stereoscopic is done side by side or over under\n */\n constructor(name, position, scene, distanceToProjectionPlane = 1, distanceBetweenEyes = 0.065) {\n super(name, position, scene);\n this._distanceBetweenEyes = distanceBetweenEyes;\n this._distanceToProjectionPlane = distanceToProjectionPlane;\n this.setCameraRigMode(Camera.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL, {\n stereoHalfAngle: 0\n });\n this._cameraRigParams.stereoHalfAngle = 0;\n this._cameraRigParams.interaxialDistance = distanceBetweenEyes;\n }\n /**\n * Gets camera class name\n * @returns StereoscopicScreenUniversalCamera\n */\n getClassName() {\n return \"StereoscopicUniversalCamera\";\n }\n /**\n * @internal\n */\n createRigCamera(name) {\n const camera = new TargetCamera(name, Vector3.Zero(), this.getScene());\n const transform = new TransformNode(\"tm_\" + name, this.getScene());\n camera.parent = transform;\n transform.setPivotMatrix(Matrix.Identity(), false);\n camera.isRigCamera = true;\n camera.rigParent = this;\n return camera;\n }\n /**\n * @internal\n */\n _updateRigCameras() {\n for (let cameraIndex = 0; cameraIndex < this._rigCameras.length; cameraIndex++) {\n const cam = this._rigCameras[cameraIndex];\n cam.minZ = this.minZ;\n cam.maxZ = this.maxZ;\n cam.fov = this.fov;\n cam.upVector.copyFrom(this.upVector);\n if (cam.rotationQuaternion) {\n cam.rotationQuaternion.copyFrom(this.rotationQuaternion);\n } else {\n cam.rotation.copyFrom(this.rotation);\n }\n this._updateCamera(this._rigCameras[cameraIndex], cameraIndex);\n }\n }\n _updateCamera(camera, cameraIndex) {\n const b = this.distanceBetweenEyes / 2;\n const z = b / this.distanceToProjectionPlane;\n camera.position.copyFrom(this.position);\n camera.position.addInPlaceFromFloats(cameraIndex === 0 ? -b : b, 0, -this._distanceToProjectionPlane);\n const transform = camera.parent;\n const m = transform.getPivotMatrix();\n m.setTranslationFromFloats(cameraIndex === 0 ? b : -b, 0, 0);\n m.setRowFromFloats(2, cameraIndex === 0 ? z : -z, 0, 1, 0);\n transform.setPivotMatrix(m, false);\n }\n _setRigMode() {\n this._rigCameras[0].viewport = new Viewport(0, 0, 0.5, 1);\n this._rigCameras[1].viewport = new Viewport(0.5, 0, 0.5, 1.0);\n for (let cameraIndex = 0; cameraIndex < this._rigCameras.length; cameraIndex++) {\n this._updateCamera(this._rigCameras[cameraIndex], cameraIndex);\n }\n }\n}","map":{"version":3,"names":["Camera","UniversalCamera","Matrix","Vector3","TargetCamera","TransformNode","Viewport","StereoscopicScreenUniversalCamera","distanceBetweenEyes","newValue","_distanceBetweenEyes","distanceToProjectionPlane","_distanceToProjectionPlane","constructor","name","position","scene","setCameraRigMode","RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL","stereoHalfAngle","_cameraRigParams","interaxialDistance","getClassName","createRigCamera","camera","Zero","getScene","transform","parent","setPivotMatrix","Identity","isRigCamera","rigParent","_updateRigCameras","cameraIndex","_rigCameras","length","cam","minZ","maxZ","fov","upVector","copyFrom","rotationQuaternion","rotation","_updateCamera","b","z","addInPlaceFromFloats","m","getPivotMatrix","setTranslationFromFloats","setRowFromFloats","_setRigMode","viewport"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js"],"sourcesContent":["import { Camera } from \"../../Cameras/camera.js\";\nimport { UniversalCamera } from \"../../Cameras/universalCamera.js\";\nimport { Matrix, Vector3 } from \"../../Maths/math.vector.js\";\nimport { TargetCamera } from \"../targetCamera.js\";\nimport { TransformNode } from \"../../Meshes/transformNode.js\";\nimport { Viewport } from \"../../Maths/math.viewport.js\";\n/**\n * Camera used to simulate stereoscopic rendering on real screens (based on UniversalCamera)\n * @see https://doc.babylonjs.com/features/featuresDeepDive/cameras\n */\nexport class StereoscopicScreenUniversalCamera extends UniversalCamera {\n set distanceBetweenEyes(newValue) {\n this._distanceBetweenEyes = newValue;\n }\n /**\n * distance between the eyes\n */\n get distanceBetweenEyes() {\n return this._distanceBetweenEyes;\n }\n set distanceToProjectionPlane(newValue) {\n this._distanceToProjectionPlane = newValue;\n }\n /**\n * Distance to projection plane (should be the same units the like distance between the eyes)\n */\n get distanceToProjectionPlane() {\n return this._distanceToProjectionPlane;\n }\n /**\n * Creates a new StereoscopicScreenUniversalCamera\n * @param name defines camera name\n * @param position defines initial position\n * @param scene defines the hosting scene\n * @param distanceToProjectionPlane defines distance between each color axis. The rig cameras will receive this as their negative z position!\n * @param distanceBetweenEyes defines is stereoscopic is done side by side or over under\n */\n constructor(name, position, scene, distanceToProjectionPlane = 1, distanceBetweenEyes = 0.065) {\n super(name, position, scene);\n this._distanceBetweenEyes = distanceBetweenEyes;\n this._distanceToProjectionPlane = distanceToProjectionPlane;\n this.setCameraRigMode(Camera.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL, {\n stereoHalfAngle: 0,\n });\n this._cameraRigParams.stereoHalfAngle = 0;\n this._cameraRigParams.interaxialDistance = distanceBetweenEyes;\n }\n /**\n * Gets camera class name\n * @returns StereoscopicScreenUniversalCamera\n */\n getClassName() {\n return \"StereoscopicUniversalCamera\";\n }\n /**\n * @internal\n */\n createRigCamera(name) {\n const camera = new TargetCamera(name, Vector3.Zero(), this.getScene());\n const transform = new TransformNode(\"tm_\" + name, this.getScene());\n camera.parent = transform;\n transform.setPivotMatrix(Matrix.Identity(), false);\n camera.isRigCamera = true;\n camera.rigParent = this;\n return camera;\n }\n /**\n * @internal\n */\n _updateRigCameras() {\n for (let cameraIndex = 0; cameraIndex < this._rigCameras.length; cameraIndex++) {\n const cam = this._rigCameras[cameraIndex];\n cam.minZ = this.minZ;\n cam.maxZ = this.maxZ;\n cam.fov = this.fov;\n cam.upVector.copyFrom(this.upVector);\n if (cam.rotationQuaternion) {\n cam.rotationQuaternion.copyFrom(this.rotationQuaternion);\n }\n else {\n cam.rotation.copyFrom(this.rotation);\n }\n this._updateCamera(this._rigCameras[cameraIndex], cameraIndex);\n }\n }\n _updateCamera(camera, cameraIndex) {\n const b = this.distanceBetweenEyes / 2;\n const z = b / this.distanceToProjectionPlane;\n camera.position.copyFrom(this.position);\n camera.position.addInPlaceFromFloats(cameraIndex === 0 ? -b : b, 0, -this._distanceToProjectionPlane);\n const transform = camera.parent;\n const m = transform.getPivotMatrix();\n m.setTranslationFromFloats(cameraIndex === 0 ? b : -b, 0, 0);\n m.setRowFromFloats(2, cameraIndex === 0 ? z : -z, 0, 1, 0);\n transform.setPivotMatrix(m, false);\n }\n _setRigMode() {\n this._rigCameras[0].viewport = new Viewport(0, 0, 0.5, 1);\n this._rigCameras[1].viewport = new Viewport(0.5, 0, 0.5, 1.0);\n for (let cameraIndex = 0; cameraIndex < this._rigCameras.length; cameraIndex++) {\n this._updateCamera(this._rigCameras[cameraIndex], cameraIndex);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|