标准网格材质
在上一篇中材质用的是MeshBasicMaterial
,这种材质简单,不受光照的影响。一般在开发工程中使用MeshStandardMaterial
较多,这是一种基于物理的标准材质,它对光照有相应的效果。
1 2 3 4 5
| const geometry = new THREE.SphereGeometry(1,32,32); const material = new THREE.MeshStandardMaterial({ color:0x00ff00 }) const mesh = new THREE.Mesh(geometry,material)
|

光
环境光

点光源

平行光

聚光灯

聚光灯指定物体
light.target = targetObject;
灯光与阴影

CSS3D渲染器
CSS3DRenderer
用于通过CSS3transform
属性, 将层级的3D变换应用到DOM元素上。
这一渲染器也有一些十分重要的限制:
- 它不能使用three.js中的材质系统。
- 同时也不能使用几何

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
| import { CSS3DObject, CSS3DRenderer } from 'three/examples/jsm/renderers/CSS3DRenderer.js';
const css3DRenderer = new CSS3DRenderer(); css3DRenderer.setSize(window.innerWidth,window.innerHeight); document.body.append(css3DRenderer.domElement);
css3DRenderer.domElement.style.position = 'absolute'; css3DRenderer.domElement.style.top=0; css3DRenderer.domElement.style.left=0;
css3DRenderer.domElement.style.pointerEvents = 'none';
const tag = document.createElement('span'); tag.innerHTML = '我是球体'; tag.style.color = 'red';
const dom3d = new CSS3DObject(tag);
dom3d.position.set(0,0,0);
dom3d.scale.set(1/16,1/16,1/16) scene.add(dom3d)
function animate() { requestAnimationFrame( animate ); css3DRenderer.render(scene,camera); } animate()
|

CSS2D渲染器
CSS2DRenderer
用法基本与CSS3DRenderer
一致,但是只支持平移。

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
| import { CSS2DObject, CSS2DRenderer } from 'three/examples/jsm/renderers/CSS2DRenderer.js';
const css2DRenderer = new CSS2DRenderer(); css2DRenderer.setSize(window.innerWidth,window.innerHeight); document.body.append(css2DRenderer.domElement);
css2DRenderer.domElement.style.position = 'absolute'; css2DRenderer.domElement.style.top=0; css2DRenderer.domElement.style.left=0;
css2DRenderer.domElement.style.pointerEvents = 'none';
const tag = document.createElement('span'); tag.innerHTML = '我是2D球体'; tag.style.color = 'red';
const dom2d = new CSS2DObject(tag);
dom2d.position.set(1,0,0);
scene.add(dom2d)
function animate() { requestAnimationFrame( animate ); css2DRenderer.render(scene,camera); } animate()
|

精灵物体

1 2 3 4 5 6
| const map = new THREE.TextureLoader().load( "bbwyLogo.png" ); const materialsprite = new THREE.SpriteMaterial( { map: map } );
const sprite = new THREE.Sprite( materialsprite ); scene.add( sprite );
|

类型 | 特点 |
---|
CSS3D | 可以随鼠标旋转、移动、缩放,不会被其他3D遮挡 |
CSS2D | 大小、位置不变,不会被其他3D遮挡 |
精灵物体 | 大小、位置随鼠标移动,可以被其他3D遮挡 |
three.js中文手册