/
Graphic3DMesh.ts
66 lines (61 loc) · 3.29 KB
/
Graphic3DMesh.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import { Scene3D } from "../../../../../core/Scene3D";
import { Object3D } from "../../../../../core/entities/Object3D";
import { GeometryBase } from "../../../../../core/geometry/GeometryBase";
import { BitmapTexture2DArray } from "../../../../../textures/BitmapTexture2DArray";
import { Graphic3DMeshRenderer } from "./Graphic3DMeshRenderer";
import { Graphic3DRibbonRenderer } from "./Graphic3DRibbonRenderer";
import { Graphic3DFaceRenderer } from "./Graphic3DFaceRenderer";
import { DynamicFaceRenderer } from "./DynamicFaceRenderer";
import { Ctor } from "../../../../..";
import { DynamicDrawStruct } from "./DynamicDrawStruct";
export class Graphic3DMesh {
public static meshMap: Map<GeometryBase, Graphic3DMeshRenderer> = new Map<GeometryBase, Graphic3DMeshRenderer>();
public static meshDrawGroup: Map<string, Graphic3DMeshRenderer> = new Map<string, Graphic3DMeshRenderer>();
public static ribbonMap: Map<string, Graphic3DRibbonRenderer> = new Map<string, Graphic3DRibbonRenderer>();
public static nodeMap: Map<string, DynamicFaceRenderer> = new Map<string, DynamicFaceRenderer>();
public static faceMap: Map<string, Graphic3DFaceRenderer> = new Map<string, Graphic3DFaceRenderer>();
public static draw(scene: Scene3D, geo: GeometryBase, texture: BitmapTexture2DArray, count: number): Graphic3DMeshRenderer {
if (!this.meshMap.has(geo)) {
let object = new Object3D();
let renderNode = object.addComponent(Graphic3DMeshRenderer);
renderNode.create(geo, texture, count);
this.meshMap.set(geo, renderNode);
scene.addChild(object);
return renderNode;
}
}
public static drawRibbon(id: string, scene: Scene3D, texture: BitmapTexture2DArray, trailSegment: number, count: number): Graphic3DRibbonRenderer {
if (!this.ribbonMap.has(id)) {
let object = new Object3D();
let renderNode = object.addComponent(Graphic3DRibbonRenderer);
renderNode.startRibbon(texture, trailSegment, count);
this.ribbonMap.set(id, renderNode);
scene.addChild(object);
return renderNode;
}
}
public static drawShape(id: string, scene: Scene3D, texture: BitmapTexture2DArray): Graphic3DFaceRenderer {
if (!this.faceMap.has(id)) {
let object = new Object3D();
let renderNode = object.addComponent(Graphic3DFaceRenderer);
renderNode.startShape(texture);
this.faceMap.set(id, renderNode);
scene.addChild(object);
return renderNode;
}
}
public static drawNode<T extends DynamicFaceRenderer>(id: string, c: Ctor<T>, nodeStruct: Ctor<DynamicDrawStruct>,
scene: Scene3D, texture: BitmapTexture2DArray, maxNodeCount: number, maxFaceCount?: number, standAloneMatrix?: boolean) {
if (!this.nodeMap.has(id)) {
let object = new Object3D();
let renderNode = object.addComponent(c, {
maxFaceCount: maxFaceCount ? maxFaceCount : 4294967295 / 3, //use index buffer u32
maxNodeCount: maxNodeCount,
}) as T;
renderNode.set(nodeStruct, texture, standAloneMatrix);
this.nodeMap.set(id, renderNode);
scene.addChild(object);
return renderNode;
}
}
}