学习机里面的互动机器人

工具篇

  • D3
  • 图表库
  • GIS

webgl(图形系统)

  • web graphics library
  • opengl es 2.0
    (还有HTML+CSS | SVG | Canvas)

    lib - 图形库

  • threejs,babylonjs scenejs,cesiumjs

各种手机官方网站

  • like apple
  • vivo

3d model

  • obj - 纯文本 - 动画支持较弱
  • fbx - 二进制 - 不同引擎解析差异
  • gltf - json - 扩展性好
  • 模型文件

basics

  • 相机 - 投影
  • 光照
  • 旋转模型
  • 全景
  • 性能(模型压缩)

gltf vs fbx

vizceral

  • https://github.com/Netflix/vizceral
  • vizceral is a component for displaying traffic data on a webgl canvas. If a graph of nodes and edges with data about traffic volume is provided, it will render a traffic graph animating the connection volume between nodes.

可视化 - Basic

Basics

  • CPU 运算单位

  • GPU 图形处理单元

  • 可视化更重要的是利用WebGL这样的图形系统,来更高效的去实现更多有趣的图形

  • 数据 => 视觉

  • 数据(设计语言 - 数据建模 - 数据分析)

  • 视觉(工具|图形库|图形系统|理论basic)

  • 可视化 - 性能

others

spritejs

  • 跨平台的开源图形系统

绘制一个三角形

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>test</title>
</head>

<body>
<canvas width="300" height="300"></canvas>
<script>
// 创建webgl上下文
const canvas = document.querySelector('canvas')
const gl = canvas.getContext('webgl')


// 创建WebGL程序
// glsl - 顶点着色器 - 处理顶点的CPU程序代码
const vertex = `
attribute vec2 position;
varying vec3 color;
void main() {
gl_PointSize = 1.0;
color = vec3(0.5 + position * 0.5, 0.0);
gl_Position = vec4(position * 0.5, 1.0, 1.0);
}
`;
// 片元着色器 - 处理光栅化后的像素信息
const fragment = `
precision mediump float;
varying vec3 color;
void main()
{
gl_FragColor = vec4(color, 1.0);
}
`;

// shader 对象创建
const vertexShader = gl.createShader(gl.VERTEX_SHADER)
gl.shaderSource(vertexShader, vertex)
gl.compileShader(vertexShader)

const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER)
gl.shaderSource(fragmentShader, fragment)
gl.compileShader(fragmentShader)


// webglprogram obj create
const program = gl.createProgram()
gl.attachShader(program, vertexShader)
gl.attachShader(program, fragmentShader)
gl.linkProgram(program)
// use webglprogram obj
gl.useProgram(program)

// 数据存入缓冲区
const points = new Float32Array([-1, -1, 0, 1, 1, -1])
// create buffer obj
const bufferId = gl.createBuffer()
// bind as current
gl.bindBuffer(gl.ARRAY_BUFFER, bufferId)
// write
gl.bufferData(gl.ARRAY_BUFFER, points, gl.STATIC_DRAW)

// gpu 加载缓存中的数据
// get vertex position
const vPosition = gl.getAttribLocation(program, 'position')
// set length and type
gl.vertexAttribPointer(vPosition, 2, gl.FLOAT, false, 0, 0)
// activate
gl.enableVertexAttribArray(vPosition)

// 绘制图形
gl.clear(gl.COLOR_BUFFER_BIT)
gl.drawArrays(gl.TRIANGLES, 0, points.length / 2)
</script>
</body>

</html>