UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

86 lines (81 loc) 3.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _EquirectUVNode = require("../../nodes/utils/EquirectUVNode.js"); var _TextureNode = require("../../nodes/accessors/TextureNode.js"); var _Position = require("../../nodes/accessors/Position.js"); var _NodeMaterial = _interopRequireDefault(require("../../materials/nodes/NodeMaterial.js")); var _WebGLCubeRenderTarget = require("../../renderers/WebGLCubeRenderTarget.js"); var _Scene = require("../../scenes/Scene.js"); var _CubeCamera = require("../../cameras/CubeCamera.js"); var _BoxGeometry = require("../../geometries/BoxGeometry.js"); var _Mesh = require("../../objects/Mesh.js"); var _constants = require("../../constants.js"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // @TODO: Consider rename WebGLCubeRenderTarget to just CubeRenderTarget /** * This class represents a cube render target. It is a special version * of `WebGLCubeRenderTarget` which is compatible with `WebGPURenderer`. * * @augments WebGLCubeRenderTarget */ class CubeRenderTarget extends _WebGLCubeRenderTarget.WebGLCubeRenderTarget { /** * Constructs a new cube render target. * * @param {number} [size=1] - The size of the render target. * @param {RenderTarget~Options} [options] - The configuration object. */ constructor(size = 1, options = {}) { super(size, options); /** * This flag can be used for type testing. * * @type {boolean} * @readonly * @default true */ this.isCubeRenderTarget = true; } /** * Converts the given equirectangular texture to a cube map. * * @param {Renderer} renderer - The renderer. * @param {Texture} texture - The equirectangular texture. * @return {CubeRenderTarget} A reference to this cube render target. */ fromEquirectangularTexture(renderer, texture) { const currentMinFilter = texture.minFilter; const currentGenerateMipmaps = texture.generateMipmaps; texture.generateMipmaps = true; this.texture.type = texture.type; this.texture.colorSpace = texture.colorSpace; this.texture.generateMipmaps = texture.generateMipmaps; this.texture.minFilter = texture.minFilter; this.texture.magFilter = texture.magFilter; const geometry = new _BoxGeometry.BoxGeometry(5, 5, 5); const uvNode = (0, _EquirectUVNode.equirectUV)(_Position.positionWorldDirection); const material = new _NodeMaterial.default(); material.colorNode = (0, _TextureNode.texture)(texture, uvNode, 0); material.side = _constants.BackSide; material.blending = _constants.NoBlending; const mesh = new _Mesh.Mesh(geometry, material); const scene = new _Scene.Scene(); scene.add(mesh); // Avoid blurred poles if (texture.minFilter === _constants.LinearMipmapLinearFilter) texture.minFilter = _constants.LinearFilter; const camera = new _CubeCamera.CubeCamera(1, 10, this); const currentMRT = renderer.getMRT(); renderer.setMRT(null); camera.update(renderer, scene); renderer.setMRT(currentMRT); texture.minFilter = currentMinFilter; texture.currentGenerateMipmaps = currentGenerateMipmaps; mesh.geometry.dispose(); mesh.material.dispose(); return this; } } var _default = exports.default = CubeRenderTarget;