WebGL - Three.js 分享
演讲者:齐俊鑫


WebGL与Three.js
3D图形基础知识
Three.js实践
3D动画
OpenGL 是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。
WebGL 是Javascript的API,是一种网络标准,定义了一些较底层的图形接口,可以看做是将OpenGL移植到了网页平台的web规范
Three.js

网格 mesh -> 模型
几何体 geometry 用来勾勒出形状,保存了顶点位置信息
材质 material 描述外观,包括色彩、反射、明暗等属性
纹理 使用一个或者多个位图来表示外观信息
视野fov,近剪裁平面(视口),远剪裁平面,视见体
PerspectiveCamera / OrthographicCamera
透视相机 / 正投影相机
又称为“可编程着色器”,是一段源代码,实现了将网格像素点投影到屏幕上的算法
可以处理材质、光源、变换以及相机
Vertex Shader顶点着色器 和 Pixel Shader像素着色器

renderer = new THREE.WebGLRenderer({antialias:true});
renderer.setSize(container.offsetWidth,container.offsetHeight);
container.appendChild(renderer.domElement);
CanvasRenderer 、 CSS3DRenderer 、 SVGRenderer ...
scene = new THREE.Scene();
var aspect = container.offsetWidth/container.offsetHeight;
camera = new THREE.PerspectiveCamera(45,aspect,1,1000);
camera.position.z = 550;
camera.lookAt(scene.position);
scene.add(camera);
light = new THREE.DirectionalLight(0xf0f0f0);
light.position.set(0,0,5);
scene.add(light);
定向光 环境光 聚光灯 点光源
var geometry = new THREE.BoxGeometry(200,200,200);
var texture = new THREE.TextureLoader().load('/image/texture.jpg');
var material = new THREE.MeshLambertMaterial( {map:texture});
cube = new THREE.Mesh( geometry, material);
scene.add(cube);
renderer.render(scene,camera)
function animate() {
requestAnimationFrame( animate );
mesh.rotation.y += 0.005;
renderer.render( scene, camera );
}
补间指的是计算一对值中间插入的其它数值的过程。
由一个状态切换到另一个状态的一次性简单动画
new TWEEN.Tween(group.position)
.to( {x:2, y:2, z:-3}, duration1000 )
.delay( delayTime1000 )
.easing( TWEEN.Easing.Exponential.InOut )
.repeat( repeatCount )
.start();
}
TweenMax.to(group.position,
duration,
{y:0, ease:Strong.easeInOut, yoyo:true, repeat:repeatCount});
我要看例子!
