ThreeJS填充顶点构成的轮廓
ThreeJS填充顶点构成的轮廓。所谓填充,ShapeGeometry算法利用顶点计算出三角面face3数据填充轮廓。
<html lang="en"><head><meta charset="UTF-8"><title>ThreeJS填充顶点构成的轮廓</title><style>body {margin: 0;overflow: hidden;}</style><script src="../../three.js-master/build/three.js"></script><script src="../../three.js-master/examples/js/controls/OrbitControls.js"></script></head><body><script>/*** 创建场景对象Scene*/var scene = new THREE.Scene();/*** 创建网格模型*/var points = [new THREE.Vector2(-50, -50),new THREE.Vector2(-60, 0),new THREE.Vector2(0, 50),new THREE.Vector2(60, 0),new THREE.Vector2(50, -50),new THREE.Vector2(-50, -50),]// 通过顶点定义轮廓var shape = new THREE.Shape(points);// shape可以理解为一个需要填充轮廓// 所谓填充:ShapeGeometry算法利用顶点计算出三角面face3数据填充轮廓var geometry = new THREE.ShapeGeometry(shape, 25);var material = new THREE.MeshPhongMaterial({color: 0x0000ff,side: THREE.DoubleSide, //两面可见wireframe: true, }); //材质对象var mesh = new THREE.Mesh(geometry, material); //网格模型对象scene.add(mesh); //网格模型添加到场景中/*** 光源设置*///点光源var point = new THREE.PointLight(0xffffff);point.position.set(400, 200, 300); //点光源位置scene.add(point); //点光源添加到场景中//环境光var ambient = new THREE.AmbientLight(0x444444);scene.add(ambient);/*** 相机设置*/var width = window.innerWidth; //窗口宽度var height = window.innerHeight; //窗口高度var k = width / height; //窗口宽高比var s = 150; //三维场景显示范围控制系数,系数越大,显示的范围越大//创建相机对象var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);camera.position.set(200, 300, 200); //设置相机位置camera.lookAt(scene.position); //设置相机方向(指向的场景对象)/*** 创建渲染器对象*/var renderer = new THREE.WebGLRenderer();renderer.setSize(width, height); //设置渲染区域尺寸renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色document.body.appendChild(renderer.domElement); //body元素中插入canvas对象// 渲染函数function render() {renderer.render(scene, camera); //执行渲染操作}render();//创建控件对象 相机对象camera作为参数 控件可以监听鼠标的变化,改变相机对象的属性var controls = new THREE.OrbitControls(camera);//监听鼠标事件,触发渲染函数,更新canvas画布渲染效果controls.addEventListener('change', render);</script></body></html>
