@damienmortini/three 0.1.183 → 0.1.185
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +4 -4
- package/copyExamples.js +17 -17
- package/ecs/THREEView.js +31 -31
- package/gpgpu/THREEGPGPUSystem.js +175 -175
- package/loader/THREELoader.js +117 -117
- package/loader/meshoptimizerdecoder/THREE.EXT_meshopt_compression.js +41 -41
- package/loader/meshoptimizerdecoder/meshopt_decoder.js +129 -129
- package/material/THREEBaseMaterial.js +75 -75
- package/material/THREEPBRMaterial.js +107 -107
- package/material/THREEShaderMaterial.js +97 -97
- package/object/THREELine.js +113 -113
- package/object/THREEMotionVectorObject.js +284 -284
- package/object/THREERibbon.js +49 -49
- package/object/THREESky.js +281 -281
- package/object/THREESprite.js +96 -96
- package/object/THREESpriteAnimation.js +103 -103
- package/object/THREEText.js +241 -241
- package/package.json +5 -6
- package/renderer/THREERenderer.js +123 -123
- package/renderer/THREEStereoRenderer.js +60 -60
- package/renderer/WebGLRenderTarget2D.js +63 -63
- package/shader/THREEBaseShader.js +33 -33
- package/types/index.d.ts +1 -1
- package/types/renderer/WebGLRenderTarget2D.d.ts +42 -42
|
@@ -1,123 +1,123 @@
|
|
|
1
|
-
import {
|
|
2
|
-
WebGLRenderer,
|
|
3
|
-
WebGLRenderTarget,
|
|
4
|
-
DepthTexture,
|
|
5
|
-
RGBAFormat,
|
|
6
|
-
LinearFilter,
|
|
7
|
-
UnsignedShortType,
|
|
8
|
-
Scene,
|
|
9
|
-
OrthographicCamera,
|
|
10
|
-
Mesh,
|
|
11
|
-
PlaneGeometry,
|
|
12
|
-
} from '../../../three/src/Three.js'
|
|
13
|
-
|
|
14
|
-
export default class THREERenderer extends WebGLRenderer {
|
|
15
|
-
constructor(options) {
|
|
16
|
-
super(Object.assign({ antialias: true }, options))
|
|
17
|
-
|
|
18
|
-
this.filters = []
|
|
19
|
-
this._renderTargets = new Map()
|
|
20
|
-
|
|
21
|
-
const renderTargetIn = new WebGLRenderTarget(this.domElement.width, this.domElement.height, {
|
|
22
|
-
format: RGBAFormat,
|
|
23
|
-
minFilter: LinearFilter,
|
|
24
|
-
magFilter: LinearFilter,
|
|
25
|
-
stencilBuffer: false,
|
|
26
|
-
})
|
|
27
|
-
renderTargetIn.texture.generateMipmaps = false
|
|
28
|
-
|
|
29
|
-
const renderTargetOut = renderTargetIn.clone()
|
|
30
|
-
renderTargetOut.texture.generateMipmaps = false
|
|
31
|
-
|
|
32
|
-
if (this.context.getExtension('WEBGL_depth_texture')) {
|
|
33
|
-
renderTargetIn.depthTexture = new DepthTexture()
|
|
34
|
-
renderTargetIn.depthTexture.type = UnsignedShortType
|
|
35
|
-
renderTargetOut.depthTexture = new DepthTexture()
|
|
36
|
-
renderTargetOut.depthTexture.type = UnsignedShortType
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
this._renderTargets.set(this, {
|
|
40
|
-
in: renderTargetIn,
|
|
41
|
-
out: renderTargetOut,
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
this.scene = new Scene()
|
|
45
|
-
this.scene.camera = new OrthographicCamera(-1, 1, 1, -1, 0, 1)
|
|
46
|
-
this._quad = new Mesh(new PlaneGeometry(2, 2))
|
|
47
|
-
this._quad.frustumCulled = false
|
|
48
|
-
this.scene.add(this._quad)
|
|
49
|
-
|
|
50
|
-
// Fix to make WebGLRenderer.render extendable
|
|
51
|
-
this._render = this.render
|
|
52
|
-
delete this.render
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
applyFilter(filter, renderTargetIn, renderTargetOut) {
|
|
56
|
-
this._quad.material = filter
|
|
57
|
-
if (filter.renderTargetTexture) {
|
|
58
|
-
filter.renderTargetTexture = renderTargetIn.texture
|
|
59
|
-
}
|
|
60
|
-
if (filter.renderTargetDepthTexture && renderTargetIn.depthTexture) {
|
|
61
|
-
filter.renderTargetDepthTexture = renderTargetIn.depthTexture
|
|
62
|
-
}
|
|
63
|
-
this._render(this.scene, this.scene.camera, renderTargetOut)
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
resize(width, height) {
|
|
67
|
-
this.setSize(width, height, false)
|
|
68
|
-
const renderTargets = this._renderTargets.get(this)
|
|
69
|
-
renderTargets.in.setSize(width, height)
|
|
70
|
-
renderTargets.out.setSize(width, height)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
render({ scene, camera = undefined, filters = this.filters, renderTarget = undefined, viewport = undefined, scissor = viewport } = {}) {
|
|
74
|
-
if (arguments.length > 1) {
|
|
75
|
-
this._render(...arguments)
|
|
76
|
-
return
|
|
77
|
-
}
|
|
78
|
-
let renderTargets = this._renderTargets.get(renderTarget || this)
|
|
79
|
-
if (!renderTargets) {
|
|
80
|
-
renderTargets = {
|
|
81
|
-
in: renderTarget.clone(),
|
|
82
|
-
out: renderTarget.clone(),
|
|
83
|
-
}
|
|
84
|
-
renderTargets.in.texture.generateMipmaps = false
|
|
85
|
-
renderTargets.out.texture.generateMipmaps = false
|
|
86
|
-
this._renderTargets.set(renderTarget, renderTargets)
|
|
87
|
-
}
|
|
88
|
-
if (viewport || scissor) {
|
|
89
|
-
if (viewport) {
|
|
90
|
-
if (renderTarget) {
|
|
91
|
-
renderTarget.viewport.set(viewport[0], viewport[1], viewport[2], viewport[3])
|
|
92
|
-
} else {
|
|
93
|
-
this.setViewport(viewport[0], viewport[1], viewport[2], viewport[3])
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
if (renderTarget) {
|
|
97
|
-
renderTarget.scissor.set(scissor[0], scissor[1], scissor[2], scissor[3])
|
|
98
|
-
renderTarget.scissorTest = true
|
|
99
|
-
} else {
|
|
100
|
-
this.setScissor(scissor[0], scissor[1], scissor[2], scissor[3])
|
|
101
|
-
this.setScissorTest(true)
|
|
102
|
-
}
|
|
103
|
-
} else {
|
|
104
|
-
if (renderTarget) {
|
|
105
|
-
renderTarget.viewport.set(0, 0, renderTarget.width, renderTarget.height)
|
|
106
|
-
renderTarget.scissor.set(0, 0, renderTarget.width, renderTarget.height)
|
|
107
|
-
renderTarget.scissorTest = false
|
|
108
|
-
} else {
|
|
109
|
-
this.setViewport(0, 0, this.domElement.width, this.domElement.height)
|
|
110
|
-
this.setScissor(0, 0, this.domElement.width, this.domElement.height)
|
|
111
|
-
this.setScissorTest(false)
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
if (scene) {
|
|
115
|
-
camera = camera || scene.camera
|
|
116
|
-
this._render(scene, camera, filters.length ? renderTargets.in : renderTarget)
|
|
117
|
-
}
|
|
118
|
-
for (const [i, filter] of filters.entries()) {
|
|
119
|
-
this.applyFilter(filter, renderTargets.in, i < filters.length - 1 ? renderTargets.out : renderTarget);
|
|
120
|
-
[renderTargets.in, renderTargets.out] = [renderTargets.out, renderTargets.in]
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
WebGLRenderer,
|
|
3
|
+
WebGLRenderTarget,
|
|
4
|
+
DepthTexture,
|
|
5
|
+
RGBAFormat,
|
|
6
|
+
LinearFilter,
|
|
7
|
+
UnsignedShortType,
|
|
8
|
+
Scene,
|
|
9
|
+
OrthographicCamera,
|
|
10
|
+
Mesh,
|
|
11
|
+
PlaneGeometry,
|
|
12
|
+
} from '../../../three/src/Three.js'
|
|
13
|
+
|
|
14
|
+
export default class THREERenderer extends WebGLRenderer {
|
|
15
|
+
constructor(options) {
|
|
16
|
+
super(Object.assign({ antialias: true }, options))
|
|
17
|
+
|
|
18
|
+
this.filters = []
|
|
19
|
+
this._renderTargets = new Map()
|
|
20
|
+
|
|
21
|
+
const renderTargetIn = new WebGLRenderTarget(this.domElement.width, this.domElement.height, {
|
|
22
|
+
format: RGBAFormat,
|
|
23
|
+
minFilter: LinearFilter,
|
|
24
|
+
magFilter: LinearFilter,
|
|
25
|
+
stencilBuffer: false,
|
|
26
|
+
})
|
|
27
|
+
renderTargetIn.texture.generateMipmaps = false
|
|
28
|
+
|
|
29
|
+
const renderTargetOut = renderTargetIn.clone()
|
|
30
|
+
renderTargetOut.texture.generateMipmaps = false
|
|
31
|
+
|
|
32
|
+
if (this.context.getExtension('WEBGL_depth_texture')) {
|
|
33
|
+
renderTargetIn.depthTexture = new DepthTexture()
|
|
34
|
+
renderTargetIn.depthTexture.type = UnsignedShortType
|
|
35
|
+
renderTargetOut.depthTexture = new DepthTexture()
|
|
36
|
+
renderTargetOut.depthTexture.type = UnsignedShortType
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
this._renderTargets.set(this, {
|
|
40
|
+
in: renderTargetIn,
|
|
41
|
+
out: renderTargetOut,
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
this.scene = new Scene()
|
|
45
|
+
this.scene.camera = new OrthographicCamera(-1, 1, 1, -1, 0, 1)
|
|
46
|
+
this._quad = new Mesh(new PlaneGeometry(2, 2))
|
|
47
|
+
this._quad.frustumCulled = false
|
|
48
|
+
this.scene.add(this._quad)
|
|
49
|
+
|
|
50
|
+
// Fix to make WebGLRenderer.render extendable
|
|
51
|
+
this._render = this.render
|
|
52
|
+
delete this.render
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
applyFilter(filter, renderTargetIn, renderTargetOut) {
|
|
56
|
+
this._quad.material = filter
|
|
57
|
+
if (filter.renderTargetTexture) {
|
|
58
|
+
filter.renderTargetTexture = renderTargetIn.texture
|
|
59
|
+
}
|
|
60
|
+
if (filter.renderTargetDepthTexture && renderTargetIn.depthTexture) {
|
|
61
|
+
filter.renderTargetDepthTexture = renderTargetIn.depthTexture
|
|
62
|
+
}
|
|
63
|
+
this._render(this.scene, this.scene.camera, renderTargetOut)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
resize(width, height) {
|
|
67
|
+
this.setSize(width, height, false)
|
|
68
|
+
const renderTargets = this._renderTargets.get(this)
|
|
69
|
+
renderTargets.in.setSize(width, height)
|
|
70
|
+
renderTargets.out.setSize(width, height)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
render({ scene, camera = undefined, filters = this.filters, renderTarget = undefined, viewport = undefined, scissor = viewport } = {}) {
|
|
74
|
+
if (arguments.length > 1) {
|
|
75
|
+
this._render(...arguments)
|
|
76
|
+
return
|
|
77
|
+
}
|
|
78
|
+
let renderTargets = this._renderTargets.get(renderTarget || this)
|
|
79
|
+
if (!renderTargets) {
|
|
80
|
+
renderTargets = {
|
|
81
|
+
in: renderTarget.clone(),
|
|
82
|
+
out: renderTarget.clone(),
|
|
83
|
+
}
|
|
84
|
+
renderTargets.in.texture.generateMipmaps = false
|
|
85
|
+
renderTargets.out.texture.generateMipmaps = false
|
|
86
|
+
this._renderTargets.set(renderTarget, renderTargets)
|
|
87
|
+
}
|
|
88
|
+
if (viewport || scissor) {
|
|
89
|
+
if (viewport) {
|
|
90
|
+
if (renderTarget) {
|
|
91
|
+
renderTarget.viewport.set(viewport[0], viewport[1], viewport[2], viewport[3])
|
|
92
|
+
} else {
|
|
93
|
+
this.setViewport(viewport[0], viewport[1], viewport[2], viewport[3])
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (renderTarget) {
|
|
97
|
+
renderTarget.scissor.set(scissor[0], scissor[1], scissor[2], scissor[3])
|
|
98
|
+
renderTarget.scissorTest = true
|
|
99
|
+
} else {
|
|
100
|
+
this.setScissor(scissor[0], scissor[1], scissor[2], scissor[3])
|
|
101
|
+
this.setScissorTest(true)
|
|
102
|
+
}
|
|
103
|
+
} else {
|
|
104
|
+
if (renderTarget) {
|
|
105
|
+
renderTarget.viewport.set(0, 0, renderTarget.width, renderTarget.height)
|
|
106
|
+
renderTarget.scissor.set(0, 0, renderTarget.width, renderTarget.height)
|
|
107
|
+
renderTarget.scissorTest = false
|
|
108
|
+
} else {
|
|
109
|
+
this.setViewport(0, 0, this.domElement.width, this.domElement.height)
|
|
110
|
+
this.setScissor(0, 0, this.domElement.width, this.domElement.height)
|
|
111
|
+
this.setScissorTest(false)
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (scene) {
|
|
115
|
+
camera = camera || scene.camera
|
|
116
|
+
this._render(scene, camera, filters.length ? renderTargets.in : renderTarget)
|
|
117
|
+
}
|
|
118
|
+
for (const [i, filter] of filters.entries()) {
|
|
119
|
+
this.applyFilter(filter, renderTargets.in, i < filters.length - 1 ? renderTargets.out : renderTarget);
|
|
120
|
+
[renderTargets.in, renderTargets.out] = [renderTargets.out, renderTargets.in]
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
import { WebGLRenderer, StereoCamera } from '../../../three/src/Three.js'
|
|
2
|
-
|
|
3
|
-
export default class THREEStereoRenderer {
|
|
4
|
-
constructor(renderer = new WebGLRenderer()) {
|
|
5
|
-
this.renderer = renderer
|
|
6
|
-
|
|
7
|
-
this._stereoCamera = new StereoCamera()
|
|
8
|
-
this._stereoCamera.aspect = 0.5
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
set eyeOffset(value) {
|
|
12
|
-
this._stereoCamera.eyeSep = value
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
setSize(width, height) {
|
|
16
|
-
this.renderer.setSize(width, height)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
render(scene, camera, renderTarget) {
|
|
20
|
-
scene.updateMatrixWorld()
|
|
21
|
-
|
|
22
|
-
if (camera.parent === null) camera.updateMatrixWorld()
|
|
23
|
-
|
|
24
|
-
this._stereoCamera.update(camera)
|
|
25
|
-
|
|
26
|
-
const size = this.renderer.getSize()
|
|
27
|
-
|
|
28
|
-
this.renderer.clear()
|
|
29
|
-
|
|
30
|
-
if (renderTarget) {
|
|
31
|
-
renderTarget.scissorTest = true
|
|
32
|
-
renderTarget.scissor.set(0, 0, size.width * .5, size.height)
|
|
33
|
-
renderTarget.viewport.set(0, 0, size.width * .5, size.height)
|
|
34
|
-
} else {
|
|
35
|
-
this.renderer.setScissorTest(true)
|
|
36
|
-
this.renderer.setScissor(0, 0, size.width * .5, size.height)
|
|
37
|
-
this.renderer.setViewport(0, 0, size.width * .5, size.height)
|
|
38
|
-
}
|
|
39
|
-
this.renderer.render(scene, this._stereoCamera.cameraL, renderTarget)
|
|
40
|
-
|
|
41
|
-
if (renderTarget) {
|
|
42
|
-
renderTarget.scissor.set(size.width * .5, 0, size.width * .5, size.height)
|
|
43
|
-
renderTarget.viewport.set(size.width * .5, 0, size.width * .5, size.height)
|
|
44
|
-
} else {
|
|
45
|
-
this.renderer.setScissor(size.width * .5, 0, size.width * .5, size.height)
|
|
46
|
-
this.renderer.setViewport(size.width * .5, 0, size.width * .5, size.height)
|
|
47
|
-
}
|
|
48
|
-
this.renderer.render(scene, this._stereoCamera.cameraR, renderTarget)
|
|
49
|
-
|
|
50
|
-
if (renderTarget) {
|
|
51
|
-
renderTarget.scissorTest = false
|
|
52
|
-
renderTarget.scissor.set(0, 0, size.width, size.height)
|
|
53
|
-
renderTarget.viewport.set(0, 0, size.width, size.height)
|
|
54
|
-
} else {
|
|
55
|
-
this.renderer.setScissorTest(false)
|
|
56
|
-
this.renderer.setScissor(0, 0, size.width, size.height)
|
|
57
|
-
this.renderer.setViewport(0, 0, size.width, size.height)
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
1
|
+
import { WebGLRenderer, StereoCamera } from '../../../three/src/Three.js'
|
|
2
|
+
|
|
3
|
+
export default class THREEStereoRenderer {
|
|
4
|
+
constructor(renderer = new WebGLRenderer()) {
|
|
5
|
+
this.renderer = renderer
|
|
6
|
+
|
|
7
|
+
this._stereoCamera = new StereoCamera()
|
|
8
|
+
this._stereoCamera.aspect = 0.5
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
set eyeOffset(value) {
|
|
12
|
+
this._stereoCamera.eyeSep = value
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
setSize(width, height) {
|
|
16
|
+
this.renderer.setSize(width, height)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
render(scene, camera, renderTarget) {
|
|
20
|
+
scene.updateMatrixWorld()
|
|
21
|
+
|
|
22
|
+
if (camera.parent === null) camera.updateMatrixWorld()
|
|
23
|
+
|
|
24
|
+
this._stereoCamera.update(camera)
|
|
25
|
+
|
|
26
|
+
const size = this.renderer.getSize()
|
|
27
|
+
|
|
28
|
+
this.renderer.clear()
|
|
29
|
+
|
|
30
|
+
if (renderTarget) {
|
|
31
|
+
renderTarget.scissorTest = true
|
|
32
|
+
renderTarget.scissor.set(0, 0, size.width * .5, size.height)
|
|
33
|
+
renderTarget.viewport.set(0, 0, size.width * .5, size.height)
|
|
34
|
+
} else {
|
|
35
|
+
this.renderer.setScissorTest(true)
|
|
36
|
+
this.renderer.setScissor(0, 0, size.width * .5, size.height)
|
|
37
|
+
this.renderer.setViewport(0, 0, size.width * .5, size.height)
|
|
38
|
+
}
|
|
39
|
+
this.renderer.render(scene, this._stereoCamera.cameraL, renderTarget)
|
|
40
|
+
|
|
41
|
+
if (renderTarget) {
|
|
42
|
+
renderTarget.scissor.set(size.width * .5, 0, size.width * .5, size.height)
|
|
43
|
+
renderTarget.viewport.set(size.width * .5, 0, size.width * .5, size.height)
|
|
44
|
+
} else {
|
|
45
|
+
this.renderer.setScissor(size.width * .5, 0, size.width * .5, size.height)
|
|
46
|
+
this.renderer.setViewport(size.width * .5, 0, size.width * .5, size.height)
|
|
47
|
+
}
|
|
48
|
+
this.renderer.render(scene, this._stereoCamera.cameraR, renderTarget)
|
|
49
|
+
|
|
50
|
+
if (renderTarget) {
|
|
51
|
+
renderTarget.scissorTest = false
|
|
52
|
+
renderTarget.scissor.set(0, 0, size.width, size.height)
|
|
53
|
+
renderTarget.viewport.set(0, 0, size.width, size.height)
|
|
54
|
+
} else {
|
|
55
|
+
this.renderer.setScissorTest(false)
|
|
56
|
+
this.renderer.setScissor(0, 0, size.width, size.height)
|
|
57
|
+
this.renderer.setViewport(0, 0, size.width, size.height)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
import { Scene, Mesh, PlaneGeometry, WebGLRenderTarget, OrthographicCamera } from 'three'
|
|
2
|
-
|
|
3
|
-
export class WebGLRenderTarget2D extends WebGLRenderTarget {
|
|
4
|
-
#scene
|
|
5
|
-
#camera
|
|
6
|
-
#quad
|
|
7
|
-
|
|
8
|
-
constructor({
|
|
9
|
-
renderer,
|
|
10
|
-
material = undefined,
|
|
11
|
-
width = 1024,
|
|
12
|
-
height = 1024,
|
|
13
|
-
wrapS = undefined,
|
|
14
|
-
wrapT = undefined,
|
|
15
|
-
magFilter = undefined,
|
|
16
|
-
minFilter = undefined,
|
|
17
|
-
format = undefined,
|
|
18
|
-
type = undefined,
|
|
19
|
-
anisotropy = undefined,
|
|
20
|
-
encoding = undefined,
|
|
21
|
-
generateMipmaps = undefined,
|
|
22
|
-
depthBuffer = undefined,
|
|
23
|
-
stencilBuffer = undefined,
|
|
24
|
-
depthTexture = undefined,
|
|
25
|
-
}) {
|
|
26
|
-
super(width, height, {
|
|
27
|
-
wrapS,
|
|
28
|
-
wrapT,
|
|
29
|
-
magFilter,
|
|
30
|
-
minFilter,
|
|
31
|
-
format,
|
|
32
|
-
type,
|
|
33
|
-
anisotropy,
|
|
34
|
-
encoding,
|
|
35
|
-
generateMipmaps,
|
|
36
|
-
depthBuffer,
|
|
37
|
-
stencilBuffer,
|
|
38
|
-
depthTexture,
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
this.renderer = renderer
|
|
42
|
-
|
|
43
|
-
this.#scene = new Scene()
|
|
44
|
-
this.#camera = new OrthographicCamera(-1, 1, 1, -1, 0, 1)
|
|
45
|
-
|
|
46
|
-
this.#quad = new Mesh(new PlaneGeometry(2, 2), material)
|
|
47
|
-
this.#scene.add(this.#quad)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
get material() {
|
|
51
|
-
return this.#quad.material
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
set material(value) {
|
|
55
|
-
this.#quad.material = value
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
render({ debug = false } = {}) {
|
|
59
|
-
if (!debug) this.renderer.setRenderTarget(this)
|
|
60
|
-
this.renderer.render(this.#scene, this.#camera)
|
|
61
|
-
this.renderer.setRenderTarget(null)
|
|
62
|
-
}
|
|
63
|
-
}
|
|
1
|
+
import { Scene, Mesh, PlaneGeometry, WebGLRenderTarget, OrthographicCamera } from 'three'
|
|
2
|
+
|
|
3
|
+
export class WebGLRenderTarget2D extends WebGLRenderTarget {
|
|
4
|
+
#scene
|
|
5
|
+
#camera
|
|
6
|
+
#quad
|
|
7
|
+
|
|
8
|
+
constructor({
|
|
9
|
+
renderer,
|
|
10
|
+
material = undefined,
|
|
11
|
+
width = 1024,
|
|
12
|
+
height = 1024,
|
|
13
|
+
wrapS = undefined,
|
|
14
|
+
wrapT = undefined,
|
|
15
|
+
magFilter = undefined,
|
|
16
|
+
minFilter = undefined,
|
|
17
|
+
format = undefined,
|
|
18
|
+
type = undefined,
|
|
19
|
+
anisotropy = undefined,
|
|
20
|
+
encoding = undefined,
|
|
21
|
+
generateMipmaps = undefined,
|
|
22
|
+
depthBuffer = undefined,
|
|
23
|
+
stencilBuffer = undefined,
|
|
24
|
+
depthTexture = undefined,
|
|
25
|
+
}) {
|
|
26
|
+
super(width, height, {
|
|
27
|
+
wrapS,
|
|
28
|
+
wrapT,
|
|
29
|
+
magFilter,
|
|
30
|
+
minFilter,
|
|
31
|
+
format,
|
|
32
|
+
type,
|
|
33
|
+
anisotropy,
|
|
34
|
+
encoding,
|
|
35
|
+
generateMipmaps,
|
|
36
|
+
depthBuffer,
|
|
37
|
+
stencilBuffer,
|
|
38
|
+
depthTexture,
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
this.renderer = renderer
|
|
42
|
+
|
|
43
|
+
this.#scene = new Scene()
|
|
44
|
+
this.#camera = new OrthographicCamera(-1, 1, 1, -1, 0, 1)
|
|
45
|
+
|
|
46
|
+
this.#quad = new Mesh(new PlaneGeometry(2, 2), material)
|
|
47
|
+
this.#scene.add(this.#quad)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
get material() {
|
|
51
|
+
return this.#quad.material
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
set material(value) {
|
|
55
|
+
this.#quad.material = value
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
render({ debug = false } = {}) {
|
|
59
|
+
if (!debug) this.renderer.setRenderTarget(this)
|
|
60
|
+
this.renderer.render(this.#scene, this.#camera)
|
|
61
|
+
this.renderer.setRenderTarget(null)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
export default {
|
|
2
|
-
vertexChunks: [
|
|
3
|
-
['start', `
|
|
4
|
-
out vec3 vPosition;
|
|
5
|
-
out vec3 vNormal;
|
|
6
|
-
out vec2 vUV;
|
|
7
|
-
out vec3 vWorldPosition;
|
|
8
|
-
out vec3 vViewDirection;
|
|
9
|
-
out float vFresnel;
|
|
10
|
-
`],
|
|
11
|
-
['end', `
|
|
12
|
-
vec3 worldPosition = (modelMatrix * vec4(position, 1.)).xyz;
|
|
13
|
-
gl_Position = projectionMatrix * viewMatrix * vec4(worldPosition, 1.);
|
|
14
|
-
|
|
15
|
-
vWorldPosition = worldPosition;
|
|
16
|
-
vViewDirection = normalize(worldPosition - cameraPosition);
|
|
17
|
-
vPosition = position;
|
|
18
|
-
vNormal = normalize(mat3(modelMatrix) * normal);
|
|
19
|
-
vUV = uv;
|
|
20
|
-
vFresnel = max(0., 1. - dot(-vViewDirection, vNormal));
|
|
21
|
-
`],
|
|
22
|
-
],
|
|
23
|
-
fragmentChunks: [
|
|
24
|
-
['start', `
|
|
25
|
-
in vec3 vPosition;
|
|
26
|
-
in vec3 vNormal;
|
|
27
|
-
in vec2 vUV;
|
|
28
|
-
in vec3 vWorldPosition;
|
|
29
|
-
in vec3 vViewDirection;
|
|
30
|
-
in float vFresnel;
|
|
31
|
-
`],
|
|
32
|
-
],
|
|
33
|
-
}
|
|
1
|
+
export default {
|
|
2
|
+
vertexChunks: [
|
|
3
|
+
['start', `
|
|
4
|
+
out vec3 vPosition;
|
|
5
|
+
out vec3 vNormal;
|
|
6
|
+
out vec2 vUV;
|
|
7
|
+
out vec3 vWorldPosition;
|
|
8
|
+
out vec3 vViewDirection;
|
|
9
|
+
out float vFresnel;
|
|
10
|
+
`],
|
|
11
|
+
['end', `
|
|
12
|
+
vec3 worldPosition = (modelMatrix * vec4(position, 1.)).xyz;
|
|
13
|
+
gl_Position = projectionMatrix * viewMatrix * vec4(worldPosition, 1.);
|
|
14
|
+
|
|
15
|
+
vWorldPosition = worldPosition;
|
|
16
|
+
vViewDirection = normalize(worldPosition - cameraPosition);
|
|
17
|
+
vPosition = position;
|
|
18
|
+
vNormal = normalize(mat3(modelMatrix) * normal);
|
|
19
|
+
vUV = uv;
|
|
20
|
+
vFresnel = max(0., 1. - dot(-vViewDirection, vNormal));
|
|
21
|
+
`],
|
|
22
|
+
],
|
|
23
|
+
fragmentChunks: [
|
|
24
|
+
['start', `
|
|
25
|
+
in vec3 vPosition;
|
|
26
|
+
in vec3 vNormal;
|
|
27
|
+
in vec2 vUV;
|
|
28
|
+
in vec3 vWorldPosition;
|
|
29
|
+
in vec3 vViewDirection;
|
|
30
|
+
in float vFresnel;
|
|
31
|
+
`],
|
|
32
|
+
],
|
|
33
|
+
}
|
package/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { WebGLRenderTarget2D } from "./renderer/WebGLRenderTarget2D.js";
|
|
1
|
+
export { WebGLRenderTarget2D } from "./renderer/WebGLRenderTarget2D.js";
|
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
export class WebGLRenderTarget2D {
|
|
2
|
-
constructor({
|
|
3
|
-
renderer,
|
|
4
|
-
material,
|
|
5
|
-
width,
|
|
6
|
-
height,
|
|
7
|
-
wrapS,
|
|
8
|
-
wrapT,
|
|
9
|
-
magFilter,
|
|
10
|
-
minFilter,
|
|
11
|
-
format,
|
|
12
|
-
type,
|
|
13
|
-
anisotropy,
|
|
14
|
-
encoding,
|
|
15
|
-
generateMipmaps,
|
|
16
|
-
depthBuffer,
|
|
17
|
-
stencilBuffer,
|
|
18
|
-
depthTexture,
|
|
19
|
-
}: {
|
|
20
|
-
renderer: any
|
|
21
|
-
material?: any
|
|
22
|
-
width?: number
|
|
23
|
-
height?: number
|
|
24
|
-
wrapS?: any
|
|
25
|
-
wrapT?: any
|
|
26
|
-
magFilter?: any
|
|
27
|
-
minFilter?: any
|
|
28
|
-
format?: any
|
|
29
|
-
type?: any
|
|
30
|
-
anisotropy?: any
|
|
31
|
-
encoding?: any
|
|
32
|
-
generateMipmaps?: any
|
|
33
|
-
depthBuffer?: any
|
|
34
|
-
stencilBuffer?: any
|
|
35
|
-
depthTexture?: any
|
|
36
|
-
})
|
|
37
|
-
renderer: any
|
|
38
|
-
set material(arg: any)
|
|
39
|
-
get material(): any
|
|
40
|
-
render({ debug }?: { debug?: boolean }): void
|
|
41
|
-
#private
|
|
42
|
-
}
|
|
1
|
+
export class WebGLRenderTarget2D {
|
|
2
|
+
constructor({
|
|
3
|
+
renderer,
|
|
4
|
+
material,
|
|
5
|
+
width,
|
|
6
|
+
height,
|
|
7
|
+
wrapS,
|
|
8
|
+
wrapT,
|
|
9
|
+
magFilter,
|
|
10
|
+
minFilter,
|
|
11
|
+
format,
|
|
12
|
+
type,
|
|
13
|
+
anisotropy,
|
|
14
|
+
encoding,
|
|
15
|
+
generateMipmaps,
|
|
16
|
+
depthBuffer,
|
|
17
|
+
stencilBuffer,
|
|
18
|
+
depthTexture,
|
|
19
|
+
}: {
|
|
20
|
+
renderer: any
|
|
21
|
+
material?: any
|
|
22
|
+
width?: number
|
|
23
|
+
height?: number
|
|
24
|
+
wrapS?: any
|
|
25
|
+
wrapT?: any
|
|
26
|
+
magFilter?: any
|
|
27
|
+
minFilter?: any
|
|
28
|
+
format?: any
|
|
29
|
+
type?: any
|
|
30
|
+
anisotropy?: any
|
|
31
|
+
encoding?: any
|
|
32
|
+
generateMipmaps?: any
|
|
33
|
+
depthBuffer?: any
|
|
34
|
+
stencilBuffer?: any
|
|
35
|
+
depthTexture?: any
|
|
36
|
+
})
|
|
37
|
+
renderer: any
|
|
38
|
+
set material(arg: any)
|
|
39
|
+
get material(): any
|
|
40
|
+
render({ debug }?: { debug?: boolean }): void
|
|
41
|
+
#private
|
|
42
|
+
}
|