vrRigMode.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { Matrix } from "../../Maths/math.vector.js";
  2. import { VRDistortionCorrectionPostProcess } from "../../PostProcesses/vrDistortionCorrectionPostProcess.js";
  3. import { VRMultiviewToSingleviewPostProcess } from "../../PostProcesses/vrMultiviewToSingleviewPostProcess.js";
  4. import { VRCameraMetrics } from "../VR/vrCameraMetrics.js";
  5. import { Logger } from "../../Misc/logger.js";
  6. import { Viewport } from "../../Maths/math.viewport.js";
  7. /**
  8. * @internal
  9. */
  10. export function setVRRigMode(camera, rigParams) {
  11. const metrics = rigParams.vrCameraMetrics || VRCameraMetrics.GetDefault();
  12. camera._rigCameras[0]._cameraRigParams.vrMetrics = metrics;
  13. camera._rigCameras[0].viewport = new Viewport(0, 0, 0.5, 1.0);
  14. camera._rigCameras[0]._cameraRigParams.vrWorkMatrix = new Matrix();
  15. camera._rigCameras[0]._cameraRigParams.vrHMatrix = metrics.leftHMatrix;
  16. camera._rigCameras[0]._cameraRigParams.vrPreViewMatrix = metrics.leftPreViewMatrix;
  17. camera._rigCameras[0].getProjectionMatrix = camera._rigCameras[0]._getVRProjectionMatrix;
  18. camera._rigCameras[1]._cameraRigParams.vrMetrics = metrics;
  19. camera._rigCameras[1].viewport = new Viewport(0.5, 0, 0.5, 1.0);
  20. camera._rigCameras[1]._cameraRigParams.vrWorkMatrix = new Matrix();
  21. camera._rigCameras[1]._cameraRigParams.vrHMatrix = metrics.rightHMatrix;
  22. camera._rigCameras[1]._cameraRigParams.vrPreViewMatrix = metrics.rightPreViewMatrix;
  23. camera._rigCameras[1].getProjectionMatrix = camera._rigCameras[1]._getVRProjectionMatrix;
  24. // For multiview camera
  25. // First multiview will be rendered to camera._multiviewTexture
  26. // Then this postprocess will run on each eye to copy the right texture to each eye
  27. if (metrics.multiviewEnabled) {
  28. if (!camera.getScene().getEngine().getCaps().multiview) {
  29. Logger.Warn("Multiview is not supported, falling back to standard rendering");
  30. metrics.multiviewEnabled = false;
  31. }
  32. else {
  33. camera._useMultiviewToSingleView = true;
  34. camera._rigPostProcess = new VRMultiviewToSingleviewPostProcess("VRMultiviewToSingleview", camera, metrics.postProcessScaleFactor);
  35. }
  36. }
  37. if (metrics.compensateDistortion) {
  38. camera._rigCameras[0]._rigPostProcess = new VRDistortionCorrectionPostProcess("VR_Distort_Compensation_Left", camera._rigCameras[0], false, metrics);
  39. camera._rigCameras[1]._rigPostProcess = new VRDistortionCorrectionPostProcess("VR_Distort_Compensation_Right", camera._rigCameras[1], true, metrics);
  40. }
  41. }
  42. //# sourceMappingURL=vrRigMode.js.map