vislite 0.4.1 → 0.5.0
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/.editorconfig +18 -18
- package/AUTHORS.txt +6 -6
- package/CHANGELOG +16 -0
- package/LICENSE +20 -20
- package/README.md +69 -69
- package/lib/Buffer/index.umd.js +3 -3
- package/lib/Buffer/index.umd.min.js +3 -3
- package/lib/Canvas/index.umd.js +3 -3
- package/lib/Canvas/index.umd.min.js +3 -3
- package/lib/Cardinal/index.umd.js +3 -3
- package/lib/Cardinal/index.umd.min.js +3 -3
- package/lib/Eoap/index.umd.js +3 -3
- package/lib/Eoap/index.umd.min.js +3 -3
- package/lib/Geometry/index.umd.js +205 -0
- package/lib/Geometry/index.umd.min.js +11 -0
- package/lib/Hermite/index.umd.js +3 -3
- package/lib/Hermite/index.umd.min.js +3 -3
- package/lib/Matrix4/index.umd.js +3 -3
- package/lib/Matrix4/index.umd.min.js +3 -3
- package/lib/Mercator/index.umd.js +5 -4
- package/lib/Mercator/index.umd.min.js +4 -4
- package/lib/OralCanvas/index.es.js +3 -3
- package/lib/OralCanvas/index.es.min.js +3 -3
- package/lib/OralWebGL/index.es.js +11 -11
- package/lib/OralWebGL/index.es.min.js +4 -4
- package/lib/SVG/index.umd.js +10 -4
- package/lib/SVG/index.umd.min.js +4 -4
- package/lib/Shader/index.umd.js +11 -11
- package/lib/Shader/index.umd.min.js +4 -4
- package/lib/Texture/index.umd.js +3 -3
- package/lib/Texture/index.umd.min.js +3 -3
- package/lib/TreeLayout/index.umd.js +8 -5
- package/lib/TreeLayout/index.umd.min.js +4 -4
- package/lib/WebGL/index.umd.js +11 -11
- package/lib/WebGL/index.umd.min.js +4 -4
- package/lib/animation/index.umd.js +3 -3
- package/lib/animation/index.umd.min.js +3 -3
- package/lib/formatColor/index.umd.js +3 -3
- package/lib/formatColor/index.umd.min.js +3 -3
- package/lib/getLoopColors/index.umd.js +3 -3
- package/lib/getLoopColors/index.umd.min.js +3 -3
- package/lib/getWebGLContext/index.umd.js +3 -3
- package/lib/getWebGLContext/index.umd.min.js +3 -3
- package/lib/index.umd.js +166 -16
- package/lib/index.umd.min.js +4 -4
- package/lib/resizeObserver/index.umd.js +3 -3
- package/lib/resizeObserver/index.umd.min.js +3 -3
- package/lib/rotate/index.umd.js +3 -3
- package/lib/rotate/index.umd.min.js +3 -3
- package/lib/ruler/index.umd.js +3 -3
- package/lib/ruler/index.umd.min.js +3 -3
- package/lib/throttle/index.umd.js +3 -3
- package/lib/throttle/index.umd.min.js +3 -3
- package/lib/viewHandler/index.umd.js +3 -3
- package/lib/viewHandler/index.umd.min.js +3 -3
- package/miniprogram/ui-canvas/index.js +107 -107
- package/miniprogram/ui-canvas/index.json +4 -4
- package/miniprogram/ui-canvas/index.wxml +4 -4
- package/miniprogram/ui-canvas/index.wxss +5 -5
- package/package/Buffer/index.ts +2 -2
- package/package/Canvas/index.ts +2 -2
- package/package/Cardinal/index.ts +2 -2
- package/package/Eoap/index.ts +2 -2
- package/package/Geometry/index.ts +3 -0
- package/package/Hermite/index.ts +2 -2
- package/package/Matrix4/index.ts +2 -2
- package/package/Mercator/index.ts +2 -2
- package/package/OralCanvas/index.ts +2 -2
- package/package/OralWebGL/index.ts +2 -2
- package/package/SVG/index.ts +2 -2
- package/package/Shader/index.ts +39 -39
- package/package/Texture/index.ts +2 -2
- package/package/TreeLayout/index.ts +2 -2
- package/package/WebGL/index.ts +2 -2
- package/package/animation/index.ts +2 -2
- package/package/formatColor/index.ts +2 -2
- package/package/getLoopColors/index.ts +2 -2
- package/package/getWebGLContext/index.ts +39 -39
- package/package/index.ts +6 -1
- package/package/resizeObserver/index.ts +2 -2
- package/package/rotate/index.ts +2 -2
- package/package/ruler/index.ts +2 -2
- package/package/throttle/index.ts +2 -2
- package/package/viewHandler/index.ts +2 -2
- package/package.json +3 -1
- package/src/Canvas.ts +67 -67
- package/src/Eoap.ts +1 -1
- package/src/Geometry.ts +83 -0
- package/src/Matrix4/index.ts +2 -2
- package/src/Matrix4/move.ts +12 -12
- package/src/Matrix4/rotate.ts +15 -15
- package/src/Matrix4/scale.ts +11 -11
- package/src/Matrix4/transform.ts +64 -64
- package/src/Mercator.ts +3 -2
- package/src/SVG.ts +24 -24
- package/src/TreeLayout/index.ts +4 -3
- package/src/WebGL.ts +66 -66
- package/src/animation.ts +98 -98
- package/src/common/assemble.ts +22 -22
- package/src/common/canvas/arc.ts +50 -50
- package/src/common/canvas/config.ts +158 -158
- package/src/common/canvas/gradient.ts +29 -29
- package/src/common/canvas/index.ts +168 -168
- package/src/common/canvas/painter.ts +426 -426
- package/src/common/canvas/texts.ts +18 -18
- package/src/common/geometry/prism-horizontal.ts +33 -0
- package/src/common/geometry/prism-vertical.ts +40 -0
- package/src/common/geometry/sphere-fragment.ts +39 -0
- package/src/common/geometry/tool/circle.ts +12 -0
- package/src/common/mergeOption.ts +6 -6
- package/src/common/setStyle.ts +5 -5
- package/src/common/svg/config.ts +174 -174
- package/src/common/svg/index.ts +9 -1
- package/src/common/svg/tool.ts +44 -44
- package/src/common/tree/index.ts +25 -25
- package/src/common/tree/toInnerTree.ts +56 -56
- package/src/common/tree/toPlainTree.ts +131 -131
- package/src/common/webgl/buffer.ts +79 -79
- package/src/common/webgl/doDraw.ts +108 -108
- package/src/common/webgl/getColorFactory.ts +26 -26
- package/src/common/webgl/getShader.ts +48 -48
- package/src/common/webgl/getTexture.ts +11 -11
- package/src/common/webgl/getWebGLContext.ts +27 -27
- package/src/common/webgl/index.ts +223 -223
- package/src/common/webgl/shader.ts +75 -75
- package/src/common/webgl/texture.ts +96 -96
- package/src/formatColor.ts +44 -44
- package/src/getLoopColors.ts +42 -42
- package/src/interpolation/Cardinal.ts +110 -110
- package/src/interpolation/Hermite.ts +65 -65
- package/src/resizeObserver.ts +36 -36
- package/src/rotate.ts +1 -1
- package/src/ruler.ts +188 -188
- package/src/shader/fsColor.c +7 -7
- package/src/shader/fsColors.c +7 -7
- package/src/shader/fsCube.c +8 -8
- package/src/shader/fsImage.c +8 -8
- package/src/shader/vsColor.c +17 -17
- package/src/shader/vsColors.c +13 -13
- package/src/shader/vsCube.c +13 -13
- package/src/shader/vsImage.c +13 -13
- package/src/throttle.ts +51 -51
- package/src/viewHandler.ts +158 -158
- package/types/Buffer.d.ts +23 -23
- package/types/Canvas.d.ts +300 -300
- package/types/CanvasConfig.d.ts +24 -0
- package/types/CanvasOption.d.ts +7 -7
- package/types/Cardinal.d.ts +13 -13
- package/types/Geometry.d.ts +41 -0
- package/types/GeometryOption.d.ts +12 -0
- package/types/GeometryResult.d.ts +19 -0
- package/types/Gradient.d.ts +14 -14
- package/types/Hermite.d.ts +18 -18
- package/types/Map.d.ts +2 -2
- package/types/Matrix4.d.ts +4 -4
- package/types/Object3D.d.ts +114 -114
- package/types/SVG.d.ts +18 -13
- package/types/SVGConfig.d.ts +76 -60
- package/types/Scene3D.d.ts +6 -6
- package/types/Shader.d.ts +21 -21
- package/types/Texture.d.ts +16 -16
- package/types/Tree.d.ts +69 -69
- package/types/TreeConfig.d.ts +24 -24
- package/types/TreeLayout.d.ts +8 -2
- package/types/TreeOption.d.ts +48 -48
- package/types/WebGL.d.ts +38 -38
- package/types/WebGLOption.d.ts +7 -7
- package/types/animation.d.ts +6 -6
- package/types/formatColor.d.ts +2 -2
- package/types/getLoopColors.d.ts +2 -2
- package/types/getWebGLContext.d.ts +2 -2
- package/types/index.d.ts +15 -1
- package/types/painterConfig.d.ts +2 -2
- package/types/resizeObserver.d.ts +2 -2
- package/types/rotate.d.ts +1 -1
- package/types/ruler.d.ts +7 -7
- package/types/throttle.d.ts +4 -4
- package/types/throttleOption.d.ts +21 -21
- package/types/viewHandler.d.ts +13 -13
- package/uni-app/ui-canvas.vue +222 -222
|
@@ -1,109 +1,109 @@
|
|
|
1
|
-
import BufferObject from './buffer'
|
|
2
|
-
|
|
3
|
-
import getTexture from './getTexture'
|
|
4
|
-
import getShader from './getShader'
|
|
5
|
-
|
|
6
|
-
interface MeshWorldType {
|
|
7
|
-
matrix: number[]
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
interface GlobalWorldType {
|
|
11
|
-
matrix: number[]
|
|
12
|
-
proporion: number[]
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
import { meshType } from '../../../types/Object3D'
|
|
16
|
-
|
|
17
|
-
export default function (type: string, painter: WebGLRenderingContext, mesh: meshType, meshWorld: MeshWorldType, globalWorld: GlobalWorldType) {
|
|
18
|
-
let shader = getShader(type, painter, mesh)
|
|
19
|
-
|
|
20
|
-
// 点数据写入缓冲区
|
|
21
|
-
new BufferObject(painter).use()
|
|
22
|
-
.write(mesh.geometry.attributes.position.array as Float32Array)
|
|
23
|
-
.divide(painter.getAttribLocation(shader.program, "a_position"), mesh.geometry.attributes.position.itemSize, mesh.geometry.attributes.position.itemSize, 0)
|
|
24
|
-
|
|
25
|
-
// 写入矩阵
|
|
26
|
-
painter.uniformMatrix4fv(painter.getUniformLocation(shader.program, "u_matrix_world"), false, globalWorld.matrix)
|
|
27
|
-
painter.uniformMatrix4fv(painter.getUniformLocation(shader.program, "u_matrix_proporion"), false, globalWorld.proporion)
|
|
28
|
-
painter.uniformMatrix4fv(painter.getUniformLocation(shader.program, "u_matrix_mesh"), false, meshWorld.matrix)
|
|
29
|
-
|
|
30
|
-
// 如果有法向量数据
|
|
31
|
-
if (mesh.geometry.attributes.normal) {
|
|
32
|
-
new BufferObject(painter).use()
|
|
33
|
-
.write(mesh.geometry.attributes.normal.array as Float32Array)
|
|
34
|
-
.divide(painter.getAttribLocation(shader.program, "a_normal"), mesh.geometry.attributes.normal.itemSize, mesh.geometry.attributes.normal.itemSize, 0)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// 颜色
|
|
38
|
-
if ("color" in mesh.material) {
|
|
39
|
-
|
|
40
|
-
// 写入颜色
|
|
41
|
-
painter.uniform4f(painter.getUniformLocation(shader.program, "u_color")
|
|
42
|
-
, mesh.material.color.r
|
|
43
|
-
, mesh.material.color.g
|
|
44
|
-
, mesh.material.color.b
|
|
45
|
-
, mesh.material.color.alpha)
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// 多颜色
|
|
49
|
-
if ("colors" in mesh.material) {
|
|
50
|
-
|
|
51
|
-
// 写入颜色序列
|
|
52
|
-
new BufferObject(painter).use()
|
|
53
|
-
.write(mesh.material.colors.array as Float32Array)
|
|
54
|
-
.divide(painter.getAttribLocation(shader.program, "a_color"), mesh.material.colors.itemSize, mesh.material.colors.itemSize, 0)
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// 立方纹理
|
|
59
|
-
else if ("cube" in mesh.material) {
|
|
60
|
-
|
|
61
|
-
let size = (mesh.material.cube.right.image.value as any).width
|
|
62
|
-
|
|
63
|
-
painter.uniform1i(painter.getUniformLocation(shader.program, "u_texture"), 0)
|
|
64
|
-
|
|
65
|
-
getTexture(type, painter, 'cube').useCube([
|
|
66
|
-
mesh.material.cube.right.image.value,
|
|
67
|
-
mesh.material.cube.left.image.value,
|
|
68
|
-
mesh.material.cube.top.image.value,
|
|
69
|
-
mesh.material.cube.bottom.image.value,
|
|
70
|
-
mesh.material.cube.far.image.value,
|
|
71
|
-
mesh.material.cube.near.image.value
|
|
72
|
-
], size, size)
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// 二维纹理
|
|
77
|
-
else if ("image" in mesh.material) {
|
|
78
|
-
|
|
79
|
-
painter.uniform1i(painter.getUniformLocation(shader.program, "u_sampler"), 0)
|
|
80
|
-
|
|
81
|
-
new BufferObject(painter).use()
|
|
82
|
-
.write(mesh.geometry.attributes.uv.array as Float32Array)
|
|
83
|
-
.divide(painter.getAttribLocation(shader.program, "a_textcoord"), mesh.geometry.attributes.uv.itemSize, 2, 0)
|
|
84
|
-
|
|
85
|
-
getTexture(type, painter, '2d').useImage(mesh.material.image.value)
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// 如果使用了索引
|
|
90
|
-
if (mesh.geometry.index) {
|
|
91
|
-
|
|
92
|
-
// 索引数据
|
|
93
|
-
new BufferObject(painter, true).use()
|
|
94
|
-
.write(mesh.geometry.index.array as Uint8Array)
|
|
95
|
-
|
|
96
|
-
// 绘制
|
|
97
|
-
painter.drawElements(painter[mesh.geometry.type], mesh.geometry.index.count, painter.UNSIGNED_BYTE, 0)
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// 否则
|
|
102
|
-
else {
|
|
103
|
-
|
|
104
|
-
// 绘制
|
|
105
|
-
painter.drawArrays(painter[mesh.geometry.type], 0, mesh.geometry.attributes.position.count)
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
|
|
1
|
+
import BufferObject from './buffer'
|
|
2
|
+
|
|
3
|
+
import getTexture from './getTexture'
|
|
4
|
+
import getShader from './getShader'
|
|
5
|
+
|
|
6
|
+
interface MeshWorldType {
|
|
7
|
+
matrix: number[]
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface GlobalWorldType {
|
|
11
|
+
matrix: number[]
|
|
12
|
+
proporion: number[]
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
import { meshType } from '../../../types/Object3D'
|
|
16
|
+
|
|
17
|
+
export default function (type: string, painter: WebGLRenderingContext, mesh: meshType, meshWorld: MeshWorldType, globalWorld: GlobalWorldType) {
|
|
18
|
+
let shader = getShader(type, painter, mesh)
|
|
19
|
+
|
|
20
|
+
// 点数据写入缓冲区
|
|
21
|
+
new BufferObject(painter).use()
|
|
22
|
+
.write(mesh.geometry.attributes.position.array as Float32Array)
|
|
23
|
+
.divide(painter.getAttribLocation(shader.program, "a_position"), mesh.geometry.attributes.position.itemSize, mesh.geometry.attributes.position.itemSize, 0)
|
|
24
|
+
|
|
25
|
+
// 写入矩阵
|
|
26
|
+
painter.uniformMatrix4fv(painter.getUniformLocation(shader.program, "u_matrix_world"), false, globalWorld.matrix)
|
|
27
|
+
painter.uniformMatrix4fv(painter.getUniformLocation(shader.program, "u_matrix_proporion"), false, globalWorld.proporion)
|
|
28
|
+
painter.uniformMatrix4fv(painter.getUniformLocation(shader.program, "u_matrix_mesh"), false, meshWorld.matrix)
|
|
29
|
+
|
|
30
|
+
// 如果有法向量数据
|
|
31
|
+
if (mesh.geometry.attributes.normal) {
|
|
32
|
+
new BufferObject(painter).use()
|
|
33
|
+
.write(mesh.geometry.attributes.normal.array as Float32Array)
|
|
34
|
+
.divide(painter.getAttribLocation(shader.program, "a_normal"), mesh.geometry.attributes.normal.itemSize, mesh.geometry.attributes.normal.itemSize, 0)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// 颜色
|
|
38
|
+
if ("color" in mesh.material) {
|
|
39
|
+
|
|
40
|
+
// 写入颜色
|
|
41
|
+
painter.uniform4f(painter.getUniformLocation(shader.program, "u_color")
|
|
42
|
+
, mesh.material.color.r
|
|
43
|
+
, mesh.material.color.g
|
|
44
|
+
, mesh.material.color.b
|
|
45
|
+
, mesh.material.color.alpha)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// 多颜色
|
|
49
|
+
if ("colors" in mesh.material) {
|
|
50
|
+
|
|
51
|
+
// 写入颜色序列
|
|
52
|
+
new BufferObject(painter).use()
|
|
53
|
+
.write(mesh.material.colors.array as Float32Array)
|
|
54
|
+
.divide(painter.getAttribLocation(shader.program, "a_color"), mesh.material.colors.itemSize, mesh.material.colors.itemSize, 0)
|
|
55
|
+
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// 立方纹理
|
|
59
|
+
else if ("cube" in mesh.material) {
|
|
60
|
+
|
|
61
|
+
let size = (mesh.material.cube.right.image.value as any).width
|
|
62
|
+
|
|
63
|
+
painter.uniform1i(painter.getUniformLocation(shader.program, "u_texture"), 0)
|
|
64
|
+
|
|
65
|
+
getTexture(type, painter, 'cube').useCube([
|
|
66
|
+
mesh.material.cube.right.image.value,
|
|
67
|
+
mesh.material.cube.left.image.value,
|
|
68
|
+
mesh.material.cube.top.image.value,
|
|
69
|
+
mesh.material.cube.bottom.image.value,
|
|
70
|
+
mesh.material.cube.far.image.value,
|
|
71
|
+
mesh.material.cube.near.image.value
|
|
72
|
+
], size, size)
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// 二维纹理
|
|
77
|
+
else if ("image" in mesh.material) {
|
|
78
|
+
|
|
79
|
+
painter.uniform1i(painter.getUniformLocation(shader.program, "u_sampler"), 0)
|
|
80
|
+
|
|
81
|
+
new BufferObject(painter).use()
|
|
82
|
+
.write(mesh.geometry.attributes.uv.array as Float32Array)
|
|
83
|
+
.divide(painter.getAttribLocation(shader.program, "a_textcoord"), mesh.geometry.attributes.uv.itemSize, 2, 0)
|
|
84
|
+
|
|
85
|
+
getTexture(type, painter, '2d').useImage(mesh.material.image.value)
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// 如果使用了索引
|
|
90
|
+
if (mesh.geometry.index) {
|
|
91
|
+
|
|
92
|
+
// 索引数据
|
|
93
|
+
new BufferObject(painter, true).use()
|
|
94
|
+
.write(mesh.geometry.index.array as Uint8Array)
|
|
95
|
+
|
|
96
|
+
// 绘制
|
|
97
|
+
painter.drawElements(painter[mesh.geometry.type], mesh.geometry.index.count, painter.UNSIGNED_BYTE, 0)
|
|
98
|
+
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// 否则
|
|
102
|
+
else {
|
|
103
|
+
|
|
104
|
+
// 绘制
|
|
105
|
+
painter.drawArrays(painter[mesh.geometry.type], 0, mesh.geometry.attributes.position.count)
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
|
|
109
109
|
}
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
export default function (painter: WebGLRenderingContext) {
|
|
2
|
-
let width = painter.drawingBufferWidth, height = painter.drawingBufferHeight
|
|
3
|
-
|
|
4
|
-
let pixels = new Uint8Array(
|
|
5
|
-
4 * width * height
|
|
6
|
-
)
|
|
7
|
-
painter.readPixels(
|
|
8
|
-
0,
|
|
9
|
-
0,
|
|
10
|
-
width,
|
|
11
|
-
height,
|
|
12
|
-
painter.RGBA,
|
|
13
|
-
painter.UNSIGNED_BYTE,
|
|
14
|
-
pixels
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
return function (x: number, y: number): string {
|
|
18
|
-
y = height - y
|
|
19
|
-
|
|
20
|
-
let pixelR = pixels[4 * (y * width + x)]
|
|
21
|
-
let pixelG = pixels[4 * (y * width + x) + 1]
|
|
22
|
-
let pixelB = pixels[4 * (y * width + x) + 2]
|
|
23
|
-
let pixelA = pixels[4 * (y * width + x) + 3]
|
|
24
|
-
|
|
25
|
-
return "rgba(" + pixelR + "," + pixelG + "," + pixelB + "," + pixelA + ")"
|
|
26
|
-
}
|
|
1
|
+
export default function (painter: WebGLRenderingContext) {
|
|
2
|
+
let width = painter.drawingBufferWidth, height = painter.drawingBufferHeight
|
|
3
|
+
|
|
4
|
+
let pixels = new Uint8Array(
|
|
5
|
+
4 * width * height
|
|
6
|
+
)
|
|
7
|
+
painter.readPixels(
|
|
8
|
+
0,
|
|
9
|
+
0,
|
|
10
|
+
width,
|
|
11
|
+
height,
|
|
12
|
+
painter.RGBA,
|
|
13
|
+
painter.UNSIGNED_BYTE,
|
|
14
|
+
pixels
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
return function (x: number, y: number): string {
|
|
18
|
+
y = height - y
|
|
19
|
+
|
|
20
|
+
let pixelR = pixels[4 * (y * width + x)]
|
|
21
|
+
let pixelG = pixels[4 * (y * width + x) + 1]
|
|
22
|
+
let pixelB = pixels[4 * (y * width + x) + 2]
|
|
23
|
+
let pixelA = pixels[4 * (y * width + x) + 3]
|
|
24
|
+
|
|
25
|
+
return "rgba(" + pixelR + "," + pixelG + "," + pixelB + "," + pixelA + ")"
|
|
26
|
+
}
|
|
27
27
|
}
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
import type { meshType } from '../../../types/Object3D'
|
|
2
|
-
|
|
3
|
-
import ShaderObject from './shader'
|
|
4
|
-
|
|
5
|
-
import vsColor from '../../shader/vsColor.c'
|
|
6
|
-
import vsColors from '../../shader/vsColors.c'
|
|
7
|
-
import vsImage from '../../shader/vsImage.c'
|
|
8
|
-
import vsCube from '../../shader/vsCube.c'
|
|
9
|
-
|
|
10
|
-
import fsColor from '../../shader/fsColor.c'
|
|
11
|
-
import fsColors from '../../shader/fsColors.c'
|
|
12
|
-
import fsImage from '../../shader/fsImage.c'
|
|
13
|
-
import fsCube from '../../shader/fsCube.c'
|
|
14
|
-
|
|
15
|
-
let shaders = {}
|
|
16
|
-
export default function (type: string, painter: WebGLRenderingContext, mesh: meshType) {
|
|
17
|
-
|
|
18
|
-
let uniqueName = type +
|
|
19
|
-
(mesh.material.color ? "1" : "0") +
|
|
20
|
-
(mesh.material.colors ? "1" : "0") +
|
|
21
|
-
(mesh.material.image ? "1" : "0") +
|
|
22
|
-
(mesh.material.cube ? "1" : "0")
|
|
23
|
-
if (shaders[uniqueName]) return shaders[uniqueName].use()
|
|
24
|
-
|
|
25
|
-
// 顶点着色器
|
|
26
|
-
let vertexShader = {
|
|
27
|
-
[type + "1000"]: vsColor,
|
|
28
|
-
[type + "0100"]: vsColors,
|
|
29
|
-
[type + "0010"]: vsImage,
|
|
30
|
-
[type + "0001"]: vsCube
|
|
31
|
-
}[uniqueName].replace(/uniform +mat4 +u_matrix;/, `
|
|
32
|
-
uniform mat4 u_matrix_world;
|
|
33
|
-
uniform mat4 u_matrix_mesh;
|
|
34
|
-
uniform mat4 u_matrix_proporion;`).replace(/u_matrix +\* +a_position/, "u_matrix_proporion * u_matrix_world * u_matrix_mesh * a_position")
|
|
35
|
-
|
|
36
|
-
// 片段(元)着色器
|
|
37
|
-
let fragmentShader = {
|
|
38
|
-
[type + "1000"]: fsColor,
|
|
39
|
-
[type + "0100"]: fsColors,
|
|
40
|
-
[type + "0010"]: fsImage,
|
|
41
|
-
[type + "0001"]: fsCube
|
|
42
|
-
}[uniqueName]
|
|
43
|
-
|
|
44
|
-
// 启用着色器
|
|
45
|
-
let shader = new ShaderObject(painter).compile(vertexShader, fragmentShader).use()
|
|
46
|
-
|
|
47
|
-
shaders[uniqueName] = shader
|
|
48
|
-
return shader
|
|
1
|
+
import type { meshType } from '../../../types/Object3D'
|
|
2
|
+
|
|
3
|
+
import ShaderObject from './shader'
|
|
4
|
+
|
|
5
|
+
import vsColor from '../../shader/vsColor.c'
|
|
6
|
+
import vsColors from '../../shader/vsColors.c'
|
|
7
|
+
import vsImage from '../../shader/vsImage.c'
|
|
8
|
+
import vsCube from '../../shader/vsCube.c'
|
|
9
|
+
|
|
10
|
+
import fsColor from '../../shader/fsColor.c'
|
|
11
|
+
import fsColors from '../../shader/fsColors.c'
|
|
12
|
+
import fsImage from '../../shader/fsImage.c'
|
|
13
|
+
import fsCube from '../../shader/fsCube.c'
|
|
14
|
+
|
|
15
|
+
let shaders = {}
|
|
16
|
+
export default function (type: string, painter: WebGLRenderingContext, mesh: meshType) {
|
|
17
|
+
|
|
18
|
+
let uniqueName = type +
|
|
19
|
+
(mesh.material.color ? "1" : "0") +
|
|
20
|
+
(mesh.material.colors ? "1" : "0") +
|
|
21
|
+
(mesh.material.image ? "1" : "0") +
|
|
22
|
+
(mesh.material.cube ? "1" : "0")
|
|
23
|
+
if (shaders[uniqueName]) return shaders[uniqueName].use()
|
|
24
|
+
|
|
25
|
+
// 顶点着色器
|
|
26
|
+
let vertexShader = {
|
|
27
|
+
[type + "1000"]: vsColor,
|
|
28
|
+
[type + "0100"]: vsColors,
|
|
29
|
+
[type + "0010"]: vsImage,
|
|
30
|
+
[type + "0001"]: vsCube
|
|
31
|
+
}[uniqueName].replace(/uniform +mat4 +u_matrix;/, `
|
|
32
|
+
uniform mat4 u_matrix_world;
|
|
33
|
+
uniform mat4 u_matrix_mesh;
|
|
34
|
+
uniform mat4 u_matrix_proporion;`).replace(/u_matrix +\* +a_position/, "u_matrix_proporion * u_matrix_world * u_matrix_mesh * a_position")
|
|
35
|
+
|
|
36
|
+
// 片段(元)着色器
|
|
37
|
+
let fragmentShader = {
|
|
38
|
+
[type + "1000"]: fsColor,
|
|
39
|
+
[type + "0100"]: fsColors,
|
|
40
|
+
[type + "0010"]: fsImage,
|
|
41
|
+
[type + "0001"]: fsCube
|
|
42
|
+
}[uniqueName]
|
|
43
|
+
|
|
44
|
+
// 启用着色器
|
|
45
|
+
let shader = new ShaderObject(painter).compile(vertexShader, fragmentShader).use()
|
|
46
|
+
|
|
47
|
+
shaders[uniqueName] = shader
|
|
48
|
+
return shader
|
|
49
49
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import TextureObject from './texture'
|
|
2
|
-
|
|
3
|
-
let textures = {}
|
|
4
|
-
export default function (type: string, painter: WebGLRenderingContext, kind: string) {
|
|
5
|
-
let uniqueName = type + "-" + kind
|
|
6
|
-
|
|
7
|
-
if (!textures[uniqueName]) {
|
|
8
|
-
textures[uniqueName] = new TextureObject(painter, kind)
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
return textures[uniqueName]
|
|
1
|
+
import TextureObject from './texture'
|
|
2
|
+
|
|
3
|
+
let textures = {}
|
|
4
|
+
export default function (type: string, painter: WebGLRenderingContext, kind: string) {
|
|
5
|
+
let uniqueName = type + "-" + kind
|
|
6
|
+
|
|
7
|
+
if (!textures[uniqueName]) {
|
|
8
|
+
textures[uniqueName] = new TextureObject(painter, kind)
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return textures[uniqueName]
|
|
12
12
|
}
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
interface OptsType {
|
|
2
|
-
preserveDrawingBuffer?: boolean
|
|
3
|
-
}
|
|
4
|
-
export default function (canvas: HTMLCanvasElement, scale: number, opts: OptsType = {}) {
|
|
5
|
-
let names = ["webgl", "experimental-webgl", "webkit-3d", "moz-webgl"], painter = null
|
|
6
|
-
for (let i = 0; i < names.length; i++) {
|
|
7
|
-
try {
|
|
8
|
-
painter = canvas.getContext(names[i], opts)
|
|
9
|
-
} catch (e) { }
|
|
10
|
-
if (painter) break
|
|
11
|
-
}
|
|
12
|
-
if (!painter) throw new Error('Non canvas or browser does not support webgl.')
|
|
13
|
-
|
|
14
|
-
let width = painter.canvas.width, height = painter.canvas.height
|
|
15
|
-
|
|
16
|
-
let viewWidth = width * scale
|
|
17
|
-
let viewHeight = height * scale
|
|
18
|
-
|
|
19
|
-
painter.viewport((width - viewWidth) * 0.5, (height - viewHeight) * 0.5, viewWidth, viewHeight)
|
|
20
|
-
|
|
21
|
-
// https://developer.mozilla.org/zh-CN/docs/Web/API/WebGLRenderingContext/depthFunc
|
|
22
|
-
painter.depthFunc(painter.LEQUAL)
|
|
23
|
-
|
|
24
|
-
// 开启深度计算
|
|
25
|
-
painter.enable(painter.DEPTH_TEST);
|
|
26
|
-
|
|
27
|
-
return painter
|
|
1
|
+
interface OptsType {
|
|
2
|
+
preserveDrawingBuffer?: boolean
|
|
3
|
+
}
|
|
4
|
+
export default function (canvas: HTMLCanvasElement, scale: number, opts: OptsType = {}) {
|
|
5
|
+
let names = ["webgl", "experimental-webgl", "webkit-3d", "moz-webgl"], painter = null
|
|
6
|
+
for (let i = 0; i < names.length; i++) {
|
|
7
|
+
try {
|
|
8
|
+
painter = canvas.getContext(names[i], opts)
|
|
9
|
+
} catch (e) { }
|
|
10
|
+
if (painter) break
|
|
11
|
+
}
|
|
12
|
+
if (!painter) throw new Error('Non canvas or browser does not support webgl.')
|
|
13
|
+
|
|
14
|
+
let width = painter.canvas.width, height = painter.canvas.height
|
|
15
|
+
|
|
16
|
+
let viewWidth = width * scale
|
|
17
|
+
let viewHeight = height * scale
|
|
18
|
+
|
|
19
|
+
painter.viewport((width - viewWidth) * 0.5, (height - viewHeight) * 0.5, viewWidth, viewHeight)
|
|
20
|
+
|
|
21
|
+
// https://developer.mozilla.org/zh-CN/docs/Web/API/WebGLRenderingContext/depthFunc
|
|
22
|
+
painter.depthFunc(painter.LEQUAL)
|
|
23
|
+
|
|
24
|
+
// 开启深度计算
|
|
25
|
+
painter.enable(painter.DEPTH_TEST);
|
|
26
|
+
|
|
27
|
+
return painter
|
|
28
28
|
}
|