bg2e-js 2.3.11 → 2.3.13
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/dist/bg2e-js.js +356 -326
- package/dist/bg2e-js.js.map +1 -1
- package/package.json +56 -56
- package/src/app/AppController.ts +39 -39
- package/src/app/Bg2KeyboardEvent.ts +54 -54
- package/src/app/Bg2MouseEvent.ts +82 -82
- package/src/app/Bg2TouchEvent.ts +18 -18
- package/src/app/Canvas.ts +108 -108
- package/src/app/EventBase.ts +10 -10
- package/src/app/MainLoop.ts +273 -273
- package/src/app/index.ts +24 -24
- package/src/base/Color.ts +134 -134
- package/src/base/Environment.ts +183 -183
- package/src/base/Light.ts +192 -192
- package/src/base/Material.ts +620 -620
- package/src/base/PolyList.ts +365 -365
- package/src/base/Texture.ts +620 -620
- package/src/base/index.ts +81 -81
- package/src/db/Bg2LoaderPlugin.ts +143 -143
- package/src/db/DBPluginApi.ts +48 -48
- package/src/db/Loader.ts +116 -116
- package/src/db/LoaderPlugin.ts +34 -34
- package/src/db/MtlParser.ts +7 -7
- package/src/db/ObjLoaderPlugin.ts +54 -54
- package/src/db/ObjParser.ts +252 -252
- package/src/db/ObjWriterPlugin.ts +18 -18
- package/src/db/VitscnjLoaderPlugin.ts +112 -112
- package/src/db/Writer.ts +52 -52
- package/src/db/WriterPlugin.ts +22 -22
- package/src/db/index.ts +44 -44
- package/src/debug/DebugRenderer.ts +173 -173
- package/src/debug/WebGLTextureViewer.ts +75 -75
- package/src/debug/index.ts +6 -6
- package/src/index.html +11 -11
- package/src/index.ts +33 -33
- package/src/manipulation/SelectionBuffer.ts +81 -81
- package/src/manipulation/SelectionHighlight.ts +105 -84
- package/src/manipulation/SelectionIdAssignVisitor.ts +96 -96
- package/src/manipulation/SelectionManager.ts +196 -188
- package/src/manipulation/SelectionMode.ts +6 -6
- package/src/math/Mat3.ts +259 -259
- package/src/math/Mat4.ts +710 -710
- package/src/math/MatrixStrategy.ts +25 -25
- package/src/math/Quat.ts +65 -65
- package/src/math/Vec.ts +753 -753
- package/src/math/constants.ts +46 -46
- package/src/math/functions.ts +103 -103
- package/src/math/index.ts +74 -74
- package/src/phsics/joint.ts +137 -137
- package/src/primitives/arrow.ts +57 -57
- package/src/primitives/cone.ts +138 -138
- package/src/primitives/cube.ts +60 -60
- package/src/primitives/cylinder.ts +216 -216
- package/src/primitives/index.ts +13 -13
- package/src/primitives/plane.ts +31 -31
- package/src/primitives/sphere.ts +809 -809
- package/src/react/useBg2e.ts +69 -69
- package/src/render/BRDFIntegrationMap.ts +4 -4
- package/src/render/Environment.ts +135 -135
- package/src/render/FrameBuffer.ts +35 -35
- package/src/render/MaterialRenderer.ts +34 -34
- package/src/render/Pipeline.ts +108 -108
- package/src/render/PolyListRenderer.ts +47 -47
- package/src/render/RenderBuffer.ts +197 -197
- package/src/render/RenderQueue.ts +198 -198
- package/src/render/RenderState.ts +116 -116
- package/src/render/Renderer.ts +248 -248
- package/src/render/SceneAppController.ts +250 -250
- package/src/render/SceneRenderer.ts +387 -387
- package/src/render/Shader.ts +32 -32
- package/src/render/ShadowRenderer.ts +176 -176
- package/src/render/SkyCube.ts +105 -105
- package/src/render/SkySphere.ts +117 -117
- package/src/render/TextureMergerRenderer.ts +70 -70
- package/src/render/TextureRenderer.ts +34 -34
- package/src/render/index.ts +67 -67
- package/src/render/webgl/FrameBuffer.ts +9 -9
- package/src/render/webgl/MaterialRenderer.ts +112 -112
- package/src/render/webgl/Pipeline.ts +88 -88
- package/src/render/webgl/PolyListRenderer.ts +260 -260
- package/src/render/webgl/RenderBuffer.ts +226 -226
- package/src/render/webgl/Renderer.ts +262 -262
- package/src/render/webgl/SceneRenderer.ts +67 -67
- package/src/render/webgl/ShaderProgram.ts +424 -424
- package/src/render/webgl/ShadowRenderer.ts +6 -6
- package/src/render/webgl/SkyCube.ts +15 -15
- package/src/render/webgl/SkySphere.ts +15 -15
- package/src/render/webgl/State.ts +152 -152
- package/src/render/webgl/TextureRenderer.ts +167 -167
- package/src/render/webgl/VertexBuffer.ts +137 -137
- package/src/render/webgl/index.ts +35 -35
- package/src/scene/Camera.ts +458 -458
- package/src/scene/Chain.ts +44 -44
- package/src/scene/ChainJoint.ts +58 -58
- package/src/scene/Component.ts +177 -177
- package/src/scene/ComponentMap.ts +106 -106
- package/src/scene/Drawable.ts +154 -154
- package/src/scene/EnvironmentComponent.ts +141 -141
- package/src/scene/FindNodeVisitor.ts +59 -59
- package/src/scene/LightComponent.ts +154 -154
- package/src/scene/MatrixState.ts +46 -46
- package/src/scene/Node.ts +328 -328
- package/src/scene/NodeVisitor.ts +15 -15
- package/src/scene/OrbitCameraController.ts +450 -450
- package/src/scene/SmoothOrbitCameraController.ts +99 -99
- package/src/scene/Transform.ts +73 -73
- package/src/scene/index.ts +60 -60
- package/src/shaders/BasicDiffuseColorShader.ts +111 -111
- package/src/shaders/BasicPBRLightShader.ts +276 -276
- package/src/shaders/DebugRenderShader.ts +97 -97
- package/src/shaders/DepthRenderShader.ts +127 -127
- package/src/shaders/IrradianceMapCubeShader.ts +115 -115
- package/src/shaders/PBRLightIBLShader.ts +486 -486
- package/src/shaders/PickSelectionShader.ts +101 -101
- package/src/shaders/PresentDebugFramebufferShader.ts +118 -118
- package/src/shaders/PresentTextureShader.ts +99 -99
- package/src/shaders/SelectionHighlightShader.ts +143 -127
- package/src/shaders/ShaderFunction.ts +318 -318
- package/src/shaders/SkyCubeShader.ts +93 -93
- package/src/shaders/SkySphereShader.ts +102 -102
- package/src/shaders/SpecularMapCubeShader.ts +164 -164
- package/src/shaders/TextureMergerShader.ts +171 -171
- package/src/shaders/index.ts +36 -36
- package/src/shaders/webgl/color_correction.glsl +47 -47
- package/src/shaders/webgl/constants.glsl +6 -6
- package/src/shaders/webgl/index.ts +70 -70
- package/src/shaders/webgl/normal_map.glsl +9 -9
- package/src/shaders/webgl/pbr.glsl +173 -173
- package/src/shaders/webgl/uniforms.glsl +91 -91
- package/src/shaders/webgl_shader_lib.ts +213 -213
- package/src/tools/BinaryResourceProvider.ts +14 -14
- package/src/tools/ImageResourceProvider.ts +66 -66
- package/src/tools/MaterialModifier.ts +446 -446
- package/src/tools/Resource.ts +203 -203
- package/src/tools/ResourceProvider.ts +69 -69
- package/src/tools/TextResourceProvider.ts +24 -24
- package/src/tools/TextureCache.ts +51 -51
- package/src/tools/TextureResourceDatabase.ts +100 -100
- package/src/tools/UserAgent.ts +362 -362
- package/src/tools/VideoResourceProvider.ts +50 -50
- package/src/tools/WriteStrategy.ts +22 -22
- package/src/tools/base64.ts +11 -11
- package/src/tools/crypto.ts +19 -19
- package/src/tools/endiantess.ts +13 -13
- package/src/tools/image.ts +18 -18
- package/src/tools/index.ts +41 -41
- package/src/tools/processType.ts +39 -39
- package/src/vite-env.d.ts +12 -12
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
import { RenderLayer } from "../base/PolyList";
|
|
2
|
-
import Texture, { TextureComponentFormat, TextureRenderTargetAttachment, TextureWrap } from "../base/Texture";
|
|
3
|
-
import PickSelectionShader from "../shaders/PickSelectionShader";
|
|
4
|
-
import { FrameVisitor } from "../render/SceneRenderer";
|
|
5
|
-
import RenderQueue from "../render/RenderQueue";
|
|
6
|
-
import Vec from "../math/Vec";
|
|
7
|
-
import Mat4 from "../math/Mat4";
|
|
8
|
-
import Transform from "../scene/Transform";
|
|
9
|
-
import Renderer from "../render/Renderer";
|
|
10
|
-
import RenderBuffer from "../render/RenderBuffer";
|
|
11
|
-
import Camera from "../scene/Camera";
|
|
12
|
-
import Node from "../scene/Node";
|
|
13
|
-
|
|
14
|
-
export default class SelectionBuffer {
|
|
15
|
-
protected _renderer: Renderer;
|
|
16
|
-
protected _targetTexture: Texture | null = null;
|
|
17
|
-
protected _renderBuffer: RenderBuffer | null = null;
|
|
18
|
-
protected _shader: PickSelectionShader | null = null
|
|
19
|
-
protected _renderQueue: RenderQueue | null = null;
|
|
20
|
-
protected _frameVisitor: FrameVisitor | null = null;
|
|
21
|
-
|
|
22
|
-
constructor(renderer: Renderer) {
|
|
23
|
-
this._renderer = renderer;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
async init() {
|
|
27
|
-
const renderer = this._renderer;
|
|
28
|
-
this._targetTexture = new Texture();
|
|
29
|
-
this._targetTexture.renderTargetAttachment = TextureRenderTargetAttachment.COLOR_ATTACHMENT_0;
|
|
30
|
-
this._targetTexture.componentFormat = TextureComponentFormat.UNSIGNED_BYTE;
|
|
31
|
-
this._targetTexture.wrapModeXY = TextureWrap.CLAMP;
|
|
32
|
-
|
|
33
|
-
this._renderBuffer = renderer.factory.renderBuffer();
|
|
34
|
-
|
|
35
|
-
await this._renderBuffer.attachTexture(this._targetTexture);
|
|
36
|
-
|
|
37
|
-
this._shader = new PickSelectionShader(renderer);
|
|
38
|
-
await this._shader.load();
|
|
39
|
-
|
|
40
|
-
this._renderQueue = new RenderQueue(renderer);
|
|
41
|
-
this._renderQueue.enableQueue(RenderLayer.SELECTION_DEFAULT, this._shader);
|
|
42
|
-
|
|
43
|
-
this._frameVisitor = new FrameVisitor(this._renderQueue);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
reshape(width: number, height: number) {
|
|
47
|
-
if (!this._renderBuffer) {
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
this._renderBuffer.size = new Vec(width,height);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
draw(scene: Node, camera: Camera, x: number, y: number, width = 1, height = 1) {
|
|
54
|
-
if (!this._renderQueue || !this._frameVisitor || !this._renderBuffer) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
const cameraView = Mat4.GetInverted(Transform.GetWorldMatrix(camera.node));
|
|
58
|
-
this._renderQueue.viewMatrix = cameraView;
|
|
59
|
-
this._renderQueue.projectionMatrix = camera.projectionMatrix;
|
|
60
|
-
this._renderQueue.newFrame();
|
|
61
|
-
this._frameVisitor.modelMatrix.identity();
|
|
62
|
-
scene.accept(this._frameVisitor);
|
|
63
|
-
|
|
64
|
-
let result = null;
|
|
65
|
-
this._renderBuffer.update(() => {
|
|
66
|
-
this._renderBuffer?.frameBuffer.clear();
|
|
67
|
-
this._renderQueue?.draw(RenderLayer.SELECTION_DEFAULT);
|
|
68
|
-
result = this._renderBuffer?.readPixels(x, y, width, height);
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
return result;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
destroy() {
|
|
75
|
-
this._renderBuffer?.destroy();
|
|
76
|
-
this._targetTexture?.destroy();
|
|
77
|
-
this._renderBuffer = null;
|
|
78
|
-
this._targetTexture = null;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
1
|
+
import { RenderLayer } from "../base/PolyList";
|
|
2
|
+
import Texture, { TextureComponentFormat, TextureRenderTargetAttachment, TextureWrap } from "../base/Texture";
|
|
3
|
+
import PickSelectionShader from "../shaders/PickSelectionShader";
|
|
4
|
+
import { FrameVisitor } from "../render/SceneRenderer";
|
|
5
|
+
import RenderQueue from "../render/RenderQueue";
|
|
6
|
+
import Vec from "../math/Vec";
|
|
7
|
+
import Mat4 from "../math/Mat4";
|
|
8
|
+
import Transform from "../scene/Transform";
|
|
9
|
+
import Renderer from "../render/Renderer";
|
|
10
|
+
import RenderBuffer from "../render/RenderBuffer";
|
|
11
|
+
import Camera from "../scene/Camera";
|
|
12
|
+
import Node from "../scene/Node";
|
|
13
|
+
|
|
14
|
+
export default class SelectionBuffer {
|
|
15
|
+
protected _renderer: Renderer;
|
|
16
|
+
protected _targetTexture: Texture | null = null;
|
|
17
|
+
protected _renderBuffer: RenderBuffer | null = null;
|
|
18
|
+
protected _shader: PickSelectionShader | null = null
|
|
19
|
+
protected _renderQueue: RenderQueue | null = null;
|
|
20
|
+
protected _frameVisitor: FrameVisitor | null = null;
|
|
21
|
+
|
|
22
|
+
constructor(renderer: Renderer) {
|
|
23
|
+
this._renderer = renderer;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async init() {
|
|
27
|
+
const renderer = this._renderer;
|
|
28
|
+
this._targetTexture = new Texture();
|
|
29
|
+
this._targetTexture.renderTargetAttachment = TextureRenderTargetAttachment.COLOR_ATTACHMENT_0;
|
|
30
|
+
this._targetTexture.componentFormat = TextureComponentFormat.UNSIGNED_BYTE;
|
|
31
|
+
this._targetTexture.wrapModeXY = TextureWrap.CLAMP;
|
|
32
|
+
|
|
33
|
+
this._renderBuffer = renderer.factory.renderBuffer();
|
|
34
|
+
|
|
35
|
+
await this._renderBuffer.attachTexture(this._targetTexture);
|
|
36
|
+
|
|
37
|
+
this._shader = new PickSelectionShader(renderer);
|
|
38
|
+
await this._shader.load();
|
|
39
|
+
|
|
40
|
+
this._renderQueue = new RenderQueue(renderer);
|
|
41
|
+
this._renderQueue.enableQueue(RenderLayer.SELECTION_DEFAULT, this._shader);
|
|
42
|
+
|
|
43
|
+
this._frameVisitor = new FrameVisitor(this._renderQueue);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
reshape(width: number, height: number) {
|
|
47
|
+
if (!this._renderBuffer) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
this._renderBuffer.size = new Vec(width,height);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
draw(scene: Node, camera: Camera, x: number, y: number, width = 1, height = 1) {
|
|
54
|
+
if (!this._renderQueue || !this._frameVisitor || !this._renderBuffer) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const cameraView = Mat4.GetInverted(Transform.GetWorldMatrix(camera.node));
|
|
58
|
+
this._renderQueue.viewMatrix = cameraView;
|
|
59
|
+
this._renderQueue.projectionMatrix = camera.projectionMatrix;
|
|
60
|
+
this._renderQueue.newFrame();
|
|
61
|
+
this._frameVisitor.modelMatrix.identity();
|
|
62
|
+
scene.accept(this._frameVisitor);
|
|
63
|
+
|
|
64
|
+
let result = null;
|
|
65
|
+
this._renderBuffer.update(() => {
|
|
66
|
+
this._renderBuffer?.frameBuffer.clear();
|
|
67
|
+
this._renderQueue?.draw(RenderLayer.SELECTION_DEFAULT);
|
|
68
|
+
result = this._renderBuffer?.readPixels(x, y, width, height);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
destroy() {
|
|
75
|
+
this._renderBuffer?.destroy();
|
|
76
|
+
this._targetTexture?.destroy();
|
|
77
|
+
this._renderBuffer = null;
|
|
78
|
+
this._targetTexture = null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
@@ -1,84 +1,105 @@
|
|
|
1
|
-
|
|
2
|
-
import { RenderLayer } from "../base/PolyList";
|
|
3
|
-
import Texture, { TextureRenderTargetAttachment, TextureComponentFormat, TextureWrap } from "../base/Texture";
|
|
4
|
-
import Mat4 from "../math/Mat4";
|
|
5
|
-
import Vec from "../math/Vec";
|
|
6
|
-
import RenderQueue from "../render/RenderQueue";
|
|
7
|
-
import { FrameVisitor } from "../render/SceneRenderer";
|
|
8
|
-
import Transform from "../scene/Transform";
|
|
9
|
-
import PickSelectionShader from "../shaders/PickSelectionShader";
|
|
10
|
-
import SelectionHighlightShader from "../shaders/SelectionHighlightShader";
|
|
11
|
-
import Renderer from "../render/Renderer";
|
|
12
|
-
import RenderBuffer from "../render/RenderBuffer";
|
|
13
|
-
import Node from "../scene/Node";
|
|
14
|
-
import Camera from "../scene/Camera";
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
protected
|
|
19
|
-
protected
|
|
20
|
-
protected
|
|
21
|
-
protected
|
|
22
|
-
protected
|
|
23
|
-
protected
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
this.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
this.
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
this.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
this.
|
|
63
|
-
|
|
64
|
-
this._renderQueue
|
|
65
|
-
this.
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
1
|
+
|
|
2
|
+
import { RenderLayer } from "../base/PolyList";
|
|
3
|
+
import Texture, { TextureRenderTargetAttachment, TextureComponentFormat, TextureWrap } from "../base/Texture";
|
|
4
|
+
import Mat4 from "../math/Mat4";
|
|
5
|
+
import Vec from "../math/Vec";
|
|
6
|
+
import RenderQueue from "../render/RenderQueue";
|
|
7
|
+
import { FrameVisitor } from "../render/SceneRenderer";
|
|
8
|
+
import Transform from "../scene/Transform";
|
|
9
|
+
import PickSelectionShader from "../shaders/PickSelectionShader";
|
|
10
|
+
import SelectionHighlightShader from "../shaders/SelectionHighlightShader";
|
|
11
|
+
import Renderer from "../render/Renderer";
|
|
12
|
+
import RenderBuffer from "../render/RenderBuffer";
|
|
13
|
+
import Node from "../scene/Node";
|
|
14
|
+
import Camera from "../scene/Camera";
|
|
15
|
+
import Color from "../base/Color";
|
|
16
|
+
|
|
17
|
+
export default class SelectionHighlight {
|
|
18
|
+
protected _renderer: Renderer;
|
|
19
|
+
protected _targetTexture: Texture | null = null
|
|
20
|
+
protected _renderBuffer: RenderBuffer | null = null;
|
|
21
|
+
protected _shader: PickSelectionShader | null = null;
|
|
22
|
+
protected _renderQueue: RenderQueue | null = null
|
|
23
|
+
protected _frameVisitor: FrameVisitor | null = null;
|
|
24
|
+
protected _selectionDrawShader: SelectionHighlightShader | null = null;
|
|
25
|
+
|
|
26
|
+
constructor(renderer: Renderer) {
|
|
27
|
+
this._renderer = renderer;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
get borderColor() : Color {
|
|
31
|
+
return this._selectionDrawShader?.borderColor || new Vec(1,0,0,1);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
set borderColor(color: Color) {
|
|
35
|
+
if (this._selectionDrawShader) {
|
|
36
|
+
this._selectionDrawShader.borderColor = color;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
get borderWidth() : number {
|
|
41
|
+
return this._selectionDrawShader?.borderWidth || 3;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
set borderWidth(width: number) {
|
|
45
|
+
if (this._selectionDrawShader) {
|
|
46
|
+
this._selectionDrawShader.borderWidth = width;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async init() {
|
|
51
|
+
const renderer = this._renderer;
|
|
52
|
+
this._targetTexture = new Texture();
|
|
53
|
+
this._targetTexture.renderTargetAttachment = TextureRenderTargetAttachment.COLOR_ATTACHMENT_0;
|
|
54
|
+
this._targetTexture.componentFormat = TextureComponentFormat.UNSIGNED_BYTE;
|
|
55
|
+
this._targetTexture.wrapModeXY = TextureWrap.CLAMP;
|
|
56
|
+
|
|
57
|
+
this._renderBuffer = renderer.factory.renderBuffer();
|
|
58
|
+
await this._renderBuffer.attachTexture(this._targetTexture);
|
|
59
|
+
|
|
60
|
+
this._shader = new PickSelectionShader(renderer);
|
|
61
|
+
await this._shader.load();
|
|
62
|
+
this._shader.forceDraw = false;
|
|
63
|
+
|
|
64
|
+
this._renderQueue = new RenderQueue(renderer);
|
|
65
|
+
this._renderQueue.enableQueue(RenderLayer.SELECTION_DEFAULT, this._shader);
|
|
66
|
+
|
|
67
|
+
this._frameVisitor = new FrameVisitor(this._renderQueue);
|
|
68
|
+
|
|
69
|
+
this._selectionDrawShader = new SelectionHighlightShader(renderer);
|
|
70
|
+
await this._selectionDrawShader.load();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
setViewportSize(width: number, height: number) {
|
|
74
|
+
this._renderBuffer!.size = new Vec(width,height);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
draw(scene: Node, camera: Camera) {
|
|
78
|
+
if (!this._renderQueue || !this._frameVisitor || !this._renderBuffer || !this._targetTexture) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const cameraView = Mat4.GetInverted(Transform.GetWorldMatrix(camera.node));
|
|
83
|
+
this._renderQueue.viewMatrix = cameraView;
|
|
84
|
+
this._renderQueue.projectionMatrix = camera.projectionMatrix;
|
|
85
|
+
this._renderQueue.newFrame();
|
|
86
|
+
this._frameVisitor.modelMatrix.identity();
|
|
87
|
+
scene.accept(this._frameVisitor);
|
|
88
|
+
|
|
89
|
+
this._renderBuffer.update(() => {
|
|
90
|
+
this._renderBuffer?.frameBuffer.clear();
|
|
91
|
+
this._renderQueue?.draw(RenderLayer.SELECTION_DEFAULT);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// TODO: Draw target texture using a border detection shader
|
|
95
|
+
const shader = this._selectionDrawShader;
|
|
96
|
+
this._renderer.presentTexture(this._targetTexture, { clearBuffers: false, shader });
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
destroy() {
|
|
100
|
+
this._renderBuffer?.destroy();
|
|
101
|
+
this._targetTexture?.destroy();
|
|
102
|
+
this._renderBuffer = null;
|
|
103
|
+
this._targetTexture = null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -1,97 +1,97 @@
|
|
|
1
|
-
import NodeVisitor from "../scene/NodeVisitor";
|
|
2
|
-
import SelectionMode from "./SelectionMode";
|
|
3
|
-
import Color from "../base/Color";
|
|
4
|
-
import Node from "../scene/Node";
|
|
5
|
-
|
|
6
|
-
const getColor = (comps: number[]) => "" + comps[0] + comps[1] + comps[2];
|
|
7
|
-
|
|
8
|
-
export default class SelectionAssignVisitor extends NodeVisitor {
|
|
9
|
-
protected _selectionMode: SelectionMode;
|
|
10
|
-
protected _elements: Record<string, any>;
|
|
11
|
-
protected _r: number = 0;
|
|
12
|
-
protected _g: number = 0;
|
|
13
|
-
protected _b: number = 0;
|
|
14
|
-
|
|
15
|
-
constructor() {
|
|
16
|
-
super();
|
|
17
|
-
|
|
18
|
-
this._selectionMode = SelectionMode.POLY_LIST;
|
|
19
|
-
this._elements = {};
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
set selectionMode(mode) {
|
|
23
|
-
this._selectionMode = mode;
|
|
24
|
-
this.clear();
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
get selectionMode() {
|
|
28
|
-
return this._selectionMode;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
clear() {
|
|
32
|
-
this._r = 0;
|
|
33
|
-
this._g = 0;
|
|
34
|
-
this._b = 0;
|
|
35
|
-
this._elements = {};
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
getNextColor() {
|
|
39
|
-
const getId = () => {
|
|
40
|
-
return [ Math.round(Math.random()*255),
|
|
41
|
-
Math.round(Math.random()*255),
|
|
42
|
-
Math.round(Math.random()*255)];
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
let components = getId();
|
|
46
|
-
let color = getColor(components);
|
|
47
|
-
while (this._elements[color]) {
|
|
48
|
-
components = getId();
|
|
49
|
-
color = getColor(components);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
this._r = components[0];
|
|
53
|
-
this._g = components[1];
|
|
54
|
-
this._b = components[2];
|
|
55
|
-
|
|
56
|
-
return new Color([components[0]/255, components[1]/255, components[2]/255, 1]);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
findElement(pickedColor: Uint8Array | undefined | null) {
|
|
60
|
-
if (!pickedColor) {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const color = [
|
|
65
|
-
pickedColor[0],
|
|
66
|
-
pickedColor[1],
|
|
67
|
-
pickedColor[2]
|
|
68
|
-
];
|
|
69
|
-
return this._elements[getColor(color)];
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
visit(node: Node) {
|
|
73
|
-
const { drawable } = node;
|
|
74
|
-
if (drawable) {
|
|
75
|
-
let color = this.getNextColor();
|
|
76
|
-
drawable.items.forEach(({polyList}, i, array) => {
|
|
77
|
-
if (polyList.isSelectable) {
|
|
78
|
-
polyList.colorCode = color;
|
|
79
|
-
polyList.selected = false;
|
|
80
|
-
const colorCode = getColor([
|
|
81
|
-
Math.round(color[0] * 255),
|
|
82
|
-
Math.round(color[1] * 255),
|
|
83
|
-
Math.round(color[2] * 255)
|
|
84
|
-
]);
|
|
85
|
-
this._elements[colorCode] = { polyList, drawable };
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Get new color code for the next polyList, only if this is not the
|
|
89
|
-
// last item, and the selection mode is POLY_LIST, otherwise we'll
|
|
90
|
-
// use the same color code for all polyList in the drawable
|
|
91
|
-
if (i<array.length-1 && this._selectionMode == SelectionMode.POLY_LIST) {
|
|
92
|
-
color = this.getNextColor();
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
}
|
|
1
|
+
import NodeVisitor from "../scene/NodeVisitor";
|
|
2
|
+
import SelectionMode from "./SelectionMode";
|
|
3
|
+
import Color from "../base/Color";
|
|
4
|
+
import Node from "../scene/Node";
|
|
5
|
+
|
|
6
|
+
const getColor = (comps: number[]) => "" + comps[0] + comps[1] + comps[2];
|
|
7
|
+
|
|
8
|
+
export default class SelectionAssignVisitor extends NodeVisitor {
|
|
9
|
+
protected _selectionMode: SelectionMode;
|
|
10
|
+
protected _elements: Record<string, any>;
|
|
11
|
+
protected _r: number = 0;
|
|
12
|
+
protected _g: number = 0;
|
|
13
|
+
protected _b: number = 0;
|
|
14
|
+
|
|
15
|
+
constructor() {
|
|
16
|
+
super();
|
|
17
|
+
|
|
18
|
+
this._selectionMode = SelectionMode.POLY_LIST;
|
|
19
|
+
this._elements = {};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
set selectionMode(mode) {
|
|
23
|
+
this._selectionMode = mode;
|
|
24
|
+
this.clear();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
get selectionMode() {
|
|
28
|
+
return this._selectionMode;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
clear() {
|
|
32
|
+
this._r = 0;
|
|
33
|
+
this._g = 0;
|
|
34
|
+
this._b = 0;
|
|
35
|
+
this._elements = {};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
getNextColor() {
|
|
39
|
+
const getId = () => {
|
|
40
|
+
return [ Math.round(Math.random()*255),
|
|
41
|
+
Math.round(Math.random()*255),
|
|
42
|
+
Math.round(Math.random()*255)];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
let components = getId();
|
|
46
|
+
let color = getColor(components);
|
|
47
|
+
while (this._elements[color]) {
|
|
48
|
+
components = getId();
|
|
49
|
+
color = getColor(components);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
this._r = components[0];
|
|
53
|
+
this._g = components[1];
|
|
54
|
+
this._b = components[2];
|
|
55
|
+
|
|
56
|
+
return new Color([components[0]/255, components[1]/255, components[2]/255, 1]);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
findElement(pickedColor: Uint8Array | undefined | null) {
|
|
60
|
+
if (!pickedColor) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const color = [
|
|
65
|
+
pickedColor[0],
|
|
66
|
+
pickedColor[1],
|
|
67
|
+
pickedColor[2]
|
|
68
|
+
];
|
|
69
|
+
return this._elements[getColor(color)];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
visit(node: Node) {
|
|
73
|
+
const { drawable } = node;
|
|
74
|
+
if (drawable) {
|
|
75
|
+
let color = this.getNextColor();
|
|
76
|
+
drawable.items.forEach(({polyList}, i, array) => {
|
|
77
|
+
if (polyList.isSelectable) {
|
|
78
|
+
polyList.colorCode = color;
|
|
79
|
+
polyList.selected = false;
|
|
80
|
+
const colorCode = getColor([
|
|
81
|
+
Math.round(color[0] * 255),
|
|
82
|
+
Math.round(color[1] * 255),
|
|
83
|
+
Math.round(color[2] * 255)
|
|
84
|
+
]);
|
|
85
|
+
this._elements[colorCode] = { polyList, drawable };
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Get new color code for the next polyList, only if this is not the
|
|
89
|
+
// last item, and the selection mode is POLY_LIST, otherwise we'll
|
|
90
|
+
// use the same color code for all polyList in the drawable
|
|
91
|
+
if (i<array.length-1 && this._selectionMode == SelectionMode.POLY_LIST) {
|
|
92
|
+
color = this.getNextColor();
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
97
|
}
|