| import {_testFinish, DepthBufferPlugin, downloadBlob, HalfFloatType, ThreeViewer} from 'threepipe' | |||||
| import { | |||||
| _testFinish, | |||||
| DepthBufferPlugin, | |||||
| downloadBlob, | |||||
| HalfFloatType, | |||||
| RenderTargetPreviewPlugin, | |||||
| ThreeViewer, | |||||
| } from 'threepipe' | |||||
| import {createSimpleButtons} from '../examples-utils/simple-bottom-buttons.js' | import {createSimpleButtons} from '../examples-utils/simple-bottom-buttons.js' | ||||
| const viewer = new ThreeViewer({ | const viewer = new ThreeViewer({ | ||||
| canvas: document.getElementById('mcanvas') as HTMLCanvasElement, | canvas: document.getElementById('mcanvas') as HTMLCanvasElement, | ||||
| msaa: true, | |||||
| msaa: false, | |||||
| rgbm: true, | rgbm: true, | ||||
| zPrepass: false, | zPrepass: false, | ||||
| }) | }) | ||||
| async function init() { | async function init() { | ||||
| viewer.addPluginSync(new DepthBufferPlugin(HalfFloatType, true)) | |||||
| const depth = viewer.addPluginSync(new DepthBufferPlugin(HalfFloatType, true)) | |||||
| await viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr') | await viewer.setEnvironmentMap('https://threejs.org/examples/textures/equirectangular/venice_sunset_1k.hdr') | ||||
| await viewer.load('https://threejs.org/examples/models/gltf/kira.glb', { | await viewer.load('https://threejs.org/examples/models/gltf/kira.glb', { | ||||
| viewer.renderManager.autoBuildPipeline = false | viewer.renderManager.autoBuildPipeline = false | ||||
| viewer.renderManager.pipeline = ['render', 'screen'] | viewer.renderManager.pipeline = ['render', 'screen'] | ||||
| const targetPreview = viewer.addPluginSync(RenderTargetPreviewPlugin) | |||||
| targetPreview.addTarget(()=>depth.target, 'depth', false, true) | |||||
| targetPreview.addTarget(()=>viewer.renderManager.composerTarget, 'composer-1', false, false) | |||||
| createSimpleButtons({ | createSimpleButtons({ | ||||
| ['depth']: () => { | ['depth']: () => { | ||||
| viewer.renderManager.pipeline = ['depth'] | viewer.renderManager.pipeline = ['depth'] |
| { | { | ||||
| "name": "threepipe", | "name": "threepipe", | ||||
| "version": "0.0.30", | |||||
| "version": "0.0.31", | |||||
| "description": "A 3D viewer framework built on top of three.js in TypeScript with a focus on quality rendering, modularity and extensibility.", | "description": "A 3D viewer framework built on top of three.js in TypeScript with a focus on quality rendering, modularity and extensibility.", | ||||
| "main": "dist/index.js", | "main": "dist/index.js", | ||||
| "module": "dist/index.mjs", | "module": "dist/index.mjs", |
| { | { | ||||
| "name": "@threepipe/plugin-configurator", | "name": "@threepipe/plugin-configurator", | ||||
| "description": "Plugins for creating material and object configurators in threepipe.", | "description": "Plugins for creating material and object configurators in threepipe.", | ||||
| "version": "0.1.0", | |||||
| "version": "0.1.1", | |||||
| "devDependencies": { | "devDependencies": { | ||||
| }, | }, | ||||
| "dependencies": { | "dependencies": { |
| if (Array.isArray(tex)) { | if (Array.isArray(tex)) { | ||||
| // todo support multi target | // todo support multi target | ||||
| this._viewer.dialog.alert('Multi target not supported yet') | this._viewer.dialog.alert('Multi target not supported yet') | ||||
| this._viewer.console.warn('support multi target export') | |||||
| this._viewer.console.warn('todo: support multi target export') | |||||
| return this | return this | ||||
| } | } | ||||
| const canvas = this._viewer?.canvas | const canvas = this._viewer?.canvas |
| super.render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) | super.render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) | ||||
| this._lastReadBuffer = readBuffer | this._lastReadBuffer = readBuffer | ||||
| renderer.outputColorSpace = colorSpace | renderer.outputColorSpace = colorSpace | ||||
| this._needsReRender = false | |||||
| } | } | ||||
| reRender(renderer: IWebGLRenderer, writeBuffer?: WebGLMultipleRenderTargets | WebGLRenderTarget | null, deltaTime?: number, maskActive?: boolean) { | reRender(renderer: IWebGLRenderer, writeBuffer?: WebGLMultipleRenderTargets | WebGLRenderTarget | null, deltaTime?: number, maskActive?: boolean) { |
| * @param deleteOnFalse - sets to undefined instead of '0' when false. Note deleteOnFalse doesn't work with tweakpane ui because the value will be undefined. | * @param deleteOnFalse - sets to undefined instead of '0' when false. Note deleteOnFalse doesn't work with tweakpane ui because the value will be undefined. | ||||
| */ | */ | ||||
| export function matDefineBool(key?: string|symbol, customDefines?: any, thisMat = false, onChange?: (...args: any[]) => any, deleteOnFalse = false): PropertyDecorator { | export function matDefineBool(key?: string|symbol, customDefines?: any, thisMat = false, onChange?: (...args: any[]) => any, deleteOnFalse = false): PropertyDecorator { | ||||
| return matDefine(key, customDefines, thisMat, onChange, (v: any)=>v ? '1' : deleteOnFalse ? undefined : '0', (v: any)=>v && v !== '0') | |||||
| // noinspection RedundantConditionalExpressionJS | |||||
| return matDefine(key, customDefines, thisMat, onChange, (v: any)=>v ? '1' : deleteOnFalse ? undefined : '0', (v: any|undefined)=>v && v !== '0' ? true : false) | |||||
| } | } | ||||
| /** | /** |
| export const VERSION = '0.0.30' | |||||
| export const VERSION = '0.0.31' |