vislite 0.3.0 → 0.3.1
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/AUTHORS.txt +6 -6
- package/CHANGELOG +7 -1
- package/LICENSE +20 -20
- package/README.md +53 -53
- package/lib/Buffer/index.umd.js +2 -2
- package/lib/Buffer/index.umd.min.js +2 -2
- package/lib/Canvas/index.umd.js +11 -6
- package/lib/Canvas/index.umd.min.js +3 -3
- package/lib/Cardinal/index.umd.js +2 -2
- package/lib/Cardinal/index.umd.min.js +2 -2
- package/lib/Eoap/index.umd.js +2 -2
- package/lib/Eoap/index.umd.min.js +2 -2
- package/lib/Hermite/index.umd.js +2 -2
- package/lib/Hermite/index.umd.min.js +2 -2
- package/lib/Matrix4/index.umd.js +2 -2
- package/lib/Matrix4/index.umd.min.js +2 -2
- package/lib/Mercator/index.umd.js +2 -2
- package/lib/Mercator/index.umd.min.js +2 -2
- package/lib/OralCanvas/index.es.js +11 -6
- package/lib/OralCanvas/index.es.min.js +3 -3
- package/lib/OralWebGL/index.es.js +10 -5
- package/lib/OralWebGL/index.es.min.js +3 -3
- package/lib/SVG/index.umd.js +9 -4
- package/lib/SVG/index.umd.min.js +3 -3
- package/lib/Shader/index.umd.js +2 -2
- package/lib/Shader/index.umd.min.js +2 -2
- package/lib/Texture/index.umd.js +2 -2
- package/lib/Texture/index.umd.min.js +2 -2
- package/lib/WebGL/index.umd.js +10 -5
- package/lib/WebGL/index.umd.min.js +3 -3
- package/lib/animation/index.umd.js +2 -2
- package/lib/animation/index.umd.min.js +2 -2
- package/lib/getLoopColors/index.umd.js +2 -2
- package/lib/getLoopColors/index.umd.min.js +2 -2
- package/lib/getWebGLContext/index.umd.js +2 -2
- package/lib/getWebGLContext/index.umd.min.js +2 -2
- package/lib/index.umd.js +11 -6
- package/lib/index.umd.min.js +3 -3
- package/lib/rotate/index.umd.js +2 -2
- package/lib/rotate/index.umd.min.js +2 -2
- package/lib/ruler/index.umd.js +2 -2
- package/lib/ruler/index.umd.min.js +2 -2
- package/lib/viewHandler/index.umd.js +2 -2
- package/lib/viewHandler/index.umd.min.js +2 -2
- package/miniprogram/ui-canvas/index.js +99 -99
- 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 +1 -1
- package/package/Canvas/index.ts +1 -1
- package/package/Cardinal/index.ts +2 -2
- package/package/Eoap/index.ts +2 -2
- 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 +1 -1
- package/package/OralWebGL/index.ts +1 -1
- package/package/SVG/index.ts +2 -2
- package/package/Shader/index.ts +1 -1
- package/package/Texture/index.ts +1 -1
- package/package/WebGL/index.ts +1 -1
- package/package/animation/index.ts +2 -2
- package/package/getLoopColors/index.ts +2 -2
- package/package/getWebGLContext/index.ts +39 -39
- package/package/index.ts +56 -56
- package/package/rotate/index.ts +2 -2
- package/package/ruler/index.ts +2 -2
- package/package/viewHandler/index.ts +2 -2
- package/package.json +1 -1
- package/src/Canvas.ts +56 -56
- package/src/Eoap.ts +66 -66
- package/src/Matrix4/index.ts +76 -76
- 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 +26 -26
- package/src/SVG.ts +23 -23
- package/src/WebGL.ts +52 -52
- package/src/animation.ts +99 -99
- package/src/common/assemble.ts +1 -1
- package/src/common/canvas/arc.ts +50 -50
- package/src/common/canvas/config.ts +157 -157
- package/src/common/canvas/gradient.ts +29 -29
- package/src/common/canvas/index.ts +10 -7
- package/src/common/canvas/painter.ts +355 -355
- package/src/common/canvas/texts.ts +18 -18
- package/src/common/setStyle.ts +5 -5
- package/src/common/svg/config.ts +173 -173
- package/src/common/svg/index.ts +334 -334
- package/src/common/svg/tool.ts +43 -43
- package/src/common/webgl/buffer.ts +79 -79
- package/src/common/webgl/doDraw.ts +106 -106
- package/src/common/webgl/getColorFactory.ts +26 -26
- package/src/common/webgl/getShader.ts +75 -75
- package/src/common/webgl/getTexture.ts +11 -11
- package/src/common/webgl/getWebGLContext.ts +27 -27
- package/src/common/webgl/index.ts +216 -216
- package/src/common/webgl/shader.ts +75 -75
- package/src/common/webgl/texture.ts +99 -99
- package/src/getLoopColors.ts +42 -42
- package/src/interpolation/Cardinal.ts +109 -109
- package/src/interpolation/Hermite.ts +65 -65
- package/src/rotate.ts +7 -7
- package/src/ruler.ts +99 -99
- package/src/viewHandler.ts +139 -139
- package/types/Buffer.d.ts +23 -23
- package/types/Canvas.d.ts +282 -282
- package/types/CanvasConfig.d.ts +80 -80
- package/types/Cardinal.d.ts +13 -13
- package/types/Gradient.d.ts +14 -14
- package/types/Hermite.d.ts +18 -18
- package/types/Map.d.ts +9 -9
- package/types/Matrix4.d.ts +42 -42
- package/types/Object3D.d.ts +113 -113
- package/types/SVG.d.ts +210 -210
- package/types/SVGConfig.d.ts +58 -58
- package/types/Scene3D.d.ts +6 -6
- package/types/Shader.d.ts +15 -15
- package/types/Texture.d.ts +16 -16
- package/types/WebGL.d.ts +38 -38
- package/types/animation.d.ts +6 -6
- package/types/getLoopColors.d.ts +2 -2
- package/types/getWebGLContext.d.ts +2 -2
- package/types/index.d.ts +129 -129
- package/types/rotate.d.ts +2 -2
- package/types/ruler.d.ts +2 -2
- package/types/viewHandler.d.ts +12 -12
- package/uni-app/ui-canvas.vue +212 -212
package/src/common/svg/tool.ts
CHANGED
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
import { XLINK_ATTRIBUTE } from "./dictionary"
|
|
2
|
-
import SVGConfigType from '../../../types/SVGConfig'
|
|
3
|
-
|
|
4
|
-
// 新建节点
|
|
5
|
-
export function toNode(tagname: string) {
|
|
6
|
-
return document.createElementNS('http://www.w3.org/2000/svg', tagname)
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
// 设置属性
|
|
10
|
-
let _setAttribute = function (el: SVGElement, key: string, value: string | number) {
|
|
11
|
-
|
|
12
|
-
// 需要使用xlink命名空间的xml属性
|
|
13
|
-
if (XLINK_ATTRIBUTE.indexOf(key) > -1) {
|
|
14
|
-
el.setAttributeNS("http://www.w3.org/1999/xlink", 'xlink:' + key, value + "")
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// 否则
|
|
18
|
-
else {
|
|
19
|
-
el.setAttribute(key, value + "")
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
export let setAttribute = _setAttribute
|
|
23
|
-
|
|
24
|
-
// 获取属性
|
|
25
|
-
export function getAttribute(el: SVGElement, key: string) {
|
|
26
|
-
if (XLINK_ATTRIBUTE.indexOf(key) > -1) key = 'xlink:' + key
|
|
27
|
-
return el.getAttribute(key)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export function full(el: SVGElement, config: SVGConfigType) {
|
|
31
|
-
_setAttribute(el, "stroke", config.strokeStyle)
|
|
32
|
-
_setAttribute(el, "fill", config.fillStyle)
|
|
33
|
-
_setAttribute(el, "stroke-dasharray", config.lineDash.join(','))
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export function fill(el: SVGElement, config: SVGConfigType) {
|
|
37
|
-
_setAttribute(el, "fill", config.fillStyle)
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export function stroke(el: SVGElement, config: SVGConfigType) {
|
|
41
|
-
_setAttribute(el, "stroke", config.strokeStyle)
|
|
42
|
-
_setAttribute(el, "fill", "none")
|
|
43
|
-
_setAttribute(el, "stroke-dasharray", config.lineDash.join(','))
|
|
1
|
+
import { XLINK_ATTRIBUTE } from "./dictionary"
|
|
2
|
+
import SVGConfigType from '../../../types/SVGConfig'
|
|
3
|
+
|
|
4
|
+
// 新建节点
|
|
5
|
+
export function toNode(tagname: string) {
|
|
6
|
+
return document.createElementNS('http://www.w3.org/2000/svg', tagname)
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// 设置属性
|
|
10
|
+
let _setAttribute = function (el: SVGElement, key: string, value: string | number) {
|
|
11
|
+
|
|
12
|
+
// 需要使用xlink命名空间的xml属性
|
|
13
|
+
if (XLINK_ATTRIBUTE.indexOf(key) > -1) {
|
|
14
|
+
el.setAttributeNS("http://www.w3.org/1999/xlink", 'xlink:' + key, value + "")
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// 否则
|
|
18
|
+
else {
|
|
19
|
+
el.setAttribute(key, value + "")
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export let setAttribute = _setAttribute
|
|
23
|
+
|
|
24
|
+
// 获取属性
|
|
25
|
+
export function getAttribute(el: SVGElement, key: string) {
|
|
26
|
+
if (XLINK_ATTRIBUTE.indexOf(key) > -1) key = 'xlink:' + key
|
|
27
|
+
return el.getAttribute(key)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function full(el: SVGElement, config: SVGConfigType) {
|
|
31
|
+
_setAttribute(el, "stroke", config.strokeStyle)
|
|
32
|
+
_setAttribute(el, "fill", config.fillStyle)
|
|
33
|
+
_setAttribute(el, "stroke-dasharray", config.lineDash.join(','))
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function fill(el: SVGElement, config: SVGConfigType) {
|
|
37
|
+
_setAttribute(el, "fill", config.fillStyle)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function stroke(el: SVGElement, config: SVGConfigType) {
|
|
41
|
+
_setAttribute(el, "stroke", config.strokeStyle)
|
|
42
|
+
_setAttribute(el, "fill", "none")
|
|
43
|
+
_setAttribute(el, "stroke-dasharray", config.lineDash.join(','))
|
|
44
44
|
}
|
|
@@ -1,80 +1,80 @@
|
|
|
1
|
-
// 缓冲区分为两种:
|
|
2
|
-
// 1.缓冲区中保存了包含顶点的数据
|
|
3
|
-
// 2.缓冲区保存了包含顶点的索引值
|
|
4
|
-
|
|
5
|
-
// 获取一个新的缓冲区
|
|
6
|
-
// isElement默认false,创建第一种缓冲区,为true创建第二种
|
|
7
|
-
let newBuffer = (painter: WebGLRenderingContext) => {
|
|
8
|
-
return painter.createBuffer()
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
// 数据写入缓冲区
|
|
12
|
-
// data是一个类型化数组,表示写入的数据
|
|
13
|
-
// usage表示程序如何使用存储在缓冲区的数据
|
|
14
|
-
let writeBuffer = (painter: WebGLRenderingContext, data: ArrayBuffer, isElement: boolean, usage: number) => {
|
|
15
|
-
let TYPE = isElement ? painter.ELEMENT_ARRAY_BUFFER : painter.ARRAY_BUFFER
|
|
16
|
-
painter.bufferData(TYPE, data, usage)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
// 使用缓冲区数据
|
|
20
|
-
// location指定待分配的attribute变量的存储位置
|
|
21
|
-
// size每个分量个数
|
|
22
|
-
// type数据类型,应该是以下的某个:
|
|
23
|
-
// gl.UNSIGNED_BYTE Uint8Array
|
|
24
|
-
// gl.SHORT Int16Array
|
|
25
|
-
// gl.UNSIGNED_SHORT Uint16Array
|
|
26
|
-
// gl.INT Int32Array
|
|
27
|
-
// gl.UNSIGNED_INT Uint32Array
|
|
28
|
-
// gl.FLOAT Float32Array
|
|
29
|
-
// stride相邻两个数据项的字节数
|
|
30
|
-
// offset数据的起点字节位置
|
|
31
|
-
// normalized是否把非浮点型的数据归一化到[0,1]或[-1,1]区间
|
|
32
|
-
let useBuffer = (painter: WebGLRenderingContext, location: number, size: number, type: number, stride: number, offset: number, normalized: boolean) => {
|
|
33
|
-
|
|
34
|
-
// 把缓冲区对象分配给目标变量
|
|
35
|
-
painter.vertexAttribPointer(location, size, type, normalized, stride, offset)
|
|
36
|
-
|
|
37
|
-
// 连接目标对象和缓冲区对象
|
|
38
|
-
painter.enableVertexAttribArray(location)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
class BufferObject {
|
|
42
|
-
|
|
43
|
-
private __painter: WebGLRenderingContext
|
|
44
|
-
private __isElement: boolean
|
|
45
|
-
|
|
46
|
-
private __buffer: WebGLBuffer
|
|
47
|
-
private __type: number
|
|
48
|
-
private __fsize: number
|
|
49
|
-
|
|
50
|
-
constructor(painter: WebGLRenderingContext, isElement: boolean = false) {
|
|
51
|
-
this.__painter = painter
|
|
52
|
-
this.__isElement = isElement
|
|
53
|
-
|
|
54
|
-
this.__buffer = newBuffer(painter)
|
|
55
|
-
this.__type = isElement ? painter.ELEMENT_ARRAY_BUFFER : painter.ARRAY_BUFFER
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// 使用这个缓冲区对象
|
|
59
|
-
// (先于写入和分配)
|
|
60
|
-
use() {
|
|
61
|
-
this.__painter.bindBuffer(this.__type, this.__buffer) // 绑定到目标
|
|
62
|
-
return this
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// 写入数据
|
|
66
|
-
write(data: Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array) {
|
|
67
|
-
writeBuffer(this.__painter, data, this.__isElement, this.__painter.STATIC_DRAW)
|
|
68
|
-
this.__fsize = data.BYTES_PER_ELEMENT
|
|
69
|
-
return this
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// 分配使用
|
|
73
|
-
// 第2~4位参数分别表示:一个完整数据的长度、一组数据的长度、读取位置偏移
|
|
74
|
-
divide(location: number, size: number, stride: number, offset: number = 0) {
|
|
75
|
-
useBuffer(this.__painter, location, size, this.__painter.FLOAT, stride * this.__fsize, offset * this.__fsize, false)
|
|
76
|
-
return this
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
1
|
+
// 缓冲区分为两种:
|
|
2
|
+
// 1.缓冲区中保存了包含顶点的数据
|
|
3
|
+
// 2.缓冲区保存了包含顶点的索引值
|
|
4
|
+
|
|
5
|
+
// 获取一个新的缓冲区
|
|
6
|
+
// isElement默认false,创建第一种缓冲区,为true创建第二种
|
|
7
|
+
let newBuffer = (painter: WebGLRenderingContext) => {
|
|
8
|
+
return painter.createBuffer()
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// 数据写入缓冲区
|
|
12
|
+
// data是一个类型化数组,表示写入的数据
|
|
13
|
+
// usage表示程序如何使用存储在缓冲区的数据
|
|
14
|
+
let writeBuffer = (painter: WebGLRenderingContext, data: ArrayBuffer, isElement: boolean, usage: number) => {
|
|
15
|
+
let TYPE = isElement ? painter.ELEMENT_ARRAY_BUFFER : painter.ARRAY_BUFFER
|
|
16
|
+
painter.bufferData(TYPE, data, usage)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// 使用缓冲区数据
|
|
20
|
+
// location指定待分配的attribute变量的存储位置
|
|
21
|
+
// size每个分量个数
|
|
22
|
+
// type数据类型,应该是以下的某个:
|
|
23
|
+
// gl.UNSIGNED_BYTE Uint8Array
|
|
24
|
+
// gl.SHORT Int16Array
|
|
25
|
+
// gl.UNSIGNED_SHORT Uint16Array
|
|
26
|
+
// gl.INT Int32Array
|
|
27
|
+
// gl.UNSIGNED_INT Uint32Array
|
|
28
|
+
// gl.FLOAT Float32Array
|
|
29
|
+
// stride相邻两个数据项的字节数
|
|
30
|
+
// offset数据的起点字节位置
|
|
31
|
+
// normalized是否把非浮点型的数据归一化到[0,1]或[-1,1]区间
|
|
32
|
+
let useBuffer = (painter: WebGLRenderingContext, location: number, size: number, type: number, stride: number, offset: number, normalized: boolean) => {
|
|
33
|
+
|
|
34
|
+
// 把缓冲区对象分配给目标变量
|
|
35
|
+
painter.vertexAttribPointer(location, size, type, normalized, stride, offset)
|
|
36
|
+
|
|
37
|
+
// 连接目标对象和缓冲区对象
|
|
38
|
+
painter.enableVertexAttribArray(location)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
class BufferObject {
|
|
42
|
+
|
|
43
|
+
private __painter: WebGLRenderingContext
|
|
44
|
+
private __isElement: boolean
|
|
45
|
+
|
|
46
|
+
private __buffer: WebGLBuffer
|
|
47
|
+
private __type: number
|
|
48
|
+
private __fsize: number
|
|
49
|
+
|
|
50
|
+
constructor(painter: WebGLRenderingContext, isElement: boolean = false) {
|
|
51
|
+
this.__painter = painter
|
|
52
|
+
this.__isElement = isElement
|
|
53
|
+
|
|
54
|
+
this.__buffer = newBuffer(painter)
|
|
55
|
+
this.__type = isElement ? painter.ELEMENT_ARRAY_BUFFER : painter.ARRAY_BUFFER
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// 使用这个缓冲区对象
|
|
59
|
+
// (先于写入和分配)
|
|
60
|
+
use() {
|
|
61
|
+
this.__painter.bindBuffer(this.__type, this.__buffer) // 绑定到目标
|
|
62
|
+
return this
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// 写入数据
|
|
66
|
+
write(data: Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array) {
|
|
67
|
+
writeBuffer(this.__painter, data, this.__isElement, this.__painter.STATIC_DRAW)
|
|
68
|
+
this.__fsize = data.BYTES_PER_ELEMENT
|
|
69
|
+
return this
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// 分配使用
|
|
73
|
+
// 第2~4位参数分别表示:一个完整数据的长度、一组数据的长度、读取位置偏移
|
|
74
|
+
divide(location: number, size: number, stride: number, offset: number = 0) {
|
|
75
|
+
useBuffer(this.__painter, location, size, this.__painter.FLOAT, stride * this.__fsize, offset * this.__fsize, false)
|
|
76
|
+
return this
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
80
|
export default BufferObject
|
|
@@ -1,107 +1,107 @@
|
|
|
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
|
-
getTexture(type, painter, 'cube').useCube([
|
|
64
|
-
mesh.material.cube.right.image.value,
|
|
65
|
-
mesh.material.cube.left.image.value,
|
|
66
|
-
mesh.material.cube.top.image.value,
|
|
67
|
-
mesh.material.cube.bottom.image.value,
|
|
68
|
-
mesh.material.cube.far.image.value,
|
|
69
|
-
mesh.material.cube.near.image.value
|
|
70
|
-
], size, size)
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// 二维纹理
|
|
75
|
-
else if ("image" in mesh.material) {
|
|
76
|
-
|
|
77
|
-
painter.uniform1i(painter.getUniformLocation(shader.program, "u_sampler"), 0)
|
|
78
|
-
|
|
79
|
-
new BufferObject(painter).use()
|
|
80
|
-
.write(mesh.geometry.attributes.uv.array as Float32Array)
|
|
81
|
-
.divide(painter.getAttribLocation(shader.program, "a_textcoord"), mesh.geometry.attributes.uv.itemSize, 2, 0)
|
|
82
|
-
|
|
83
|
-
getTexture(type, painter, '2d').useImage(mesh.material.image.value)
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// 如果使用了索引
|
|
88
|
-
if (mesh.geometry.index) {
|
|
89
|
-
|
|
90
|
-
// 索引数据
|
|
91
|
-
new BufferObject(painter, true).use()
|
|
92
|
-
.write(mesh.geometry.index.array as Uint8Array)
|
|
93
|
-
|
|
94
|
-
// 绘制
|
|
95
|
-
painter.drawElements(painter[mesh.geometry.type], mesh.geometry.index.count, painter.UNSIGNED_BYTE, 0)
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// 否则
|
|
100
|
-
else {
|
|
101
|
-
|
|
102
|
-
// 绘制
|
|
103
|
-
painter.drawArrays(painter[mesh.geometry.type], 0, mesh.geometry.attributes.position.count)
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
|
|
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
|
+
getTexture(type, painter, 'cube').useCube([
|
|
64
|
+
mesh.material.cube.right.image.value,
|
|
65
|
+
mesh.material.cube.left.image.value,
|
|
66
|
+
mesh.material.cube.top.image.value,
|
|
67
|
+
mesh.material.cube.bottom.image.value,
|
|
68
|
+
mesh.material.cube.far.image.value,
|
|
69
|
+
mesh.material.cube.near.image.value
|
|
70
|
+
], size, size)
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// 二维纹理
|
|
75
|
+
else if ("image" in mesh.material) {
|
|
76
|
+
|
|
77
|
+
painter.uniform1i(painter.getUniformLocation(shader.program, "u_sampler"), 0)
|
|
78
|
+
|
|
79
|
+
new BufferObject(painter).use()
|
|
80
|
+
.write(mesh.geometry.attributes.uv.array as Float32Array)
|
|
81
|
+
.divide(painter.getAttribLocation(shader.program, "a_textcoord"), mesh.geometry.attributes.uv.itemSize, 2, 0)
|
|
82
|
+
|
|
83
|
+
getTexture(type, painter, '2d').useImage(mesh.material.image.value)
|
|
84
|
+
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// 如果使用了索引
|
|
88
|
+
if (mesh.geometry.index) {
|
|
89
|
+
|
|
90
|
+
// 索引数据
|
|
91
|
+
new BufferObject(painter, true).use()
|
|
92
|
+
.write(mesh.geometry.index.array as Uint8Array)
|
|
93
|
+
|
|
94
|
+
// 绘制
|
|
95
|
+
painter.drawElements(painter[mesh.geometry.type], mesh.geometry.index.count, painter.UNSIGNED_BYTE, 0)
|
|
96
|
+
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// 否则
|
|
100
|
+
else {
|
|
101
|
+
|
|
102
|
+
// 绘制
|
|
103
|
+
painter.drawArrays(painter[mesh.geometry.type], 0, mesh.geometry.attributes.position.count)
|
|
104
|
+
|
|
105
|
+
}
|
|
106
|
+
|
|
107
107
|
}
|
|
@@ -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
|
}
|