@openhps/core
Version:
Open Hybrid Positioning System - Core component
86 lines (81 loc) • 3.35 kB
JavaScript
;
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;