three.js从入门到精通系列教程018 - three.js自定义图形的线条宽度和颜色
·
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>three.js从入门到精通系列教程018 - three.js自定义图形的线条宽度和颜色</title>
<script src="ThreeJS/three.js"></script>
<script src="ThreeJS/jquery.js"></script>
<script src="ThreeJS/LineSegmentsGeometry.js"></script>
<script src="ThreeJS/LineMaterial.js"></script>
<script src="ThreeJS/LineGeometry.js"></script>
<script src="ThreeJS/LineSegments2.js"></script>
<script src="ThreeJS/Line2.js"></script>
<script src="ThreeJS/GeometryUtils.js"></script>
<script src="ThreeJS/OrbitControls.js"></script>
</head>
<body>
<center id="myContainer"></center>
<script>
//创建渲染器
var myRenderer = new THREE.WebGLRenderer({ antialias: true });
myRenderer.setSize(window.innerWidth, window.innerHeight);
$("#myContainer").append(myRenderer.domElement);
var myScene = new THREE.Scene();
myScene.background = new THREE.Color('white');
var myCamera = new THREE.PerspectiveCamera(40,
window.innerWidth / window.innerHeight, 1, 1000);
myCamera.position.set(- 50, 0, 60);
myScene.add(myCamera);
var myOrbitControls =
new THREE.OrbitControls(myCamera, $("#myContainer")[0]);
//自定义图形的线条宽度和颜色
var myPositions = [];
var myColors = [];
var myPoints = THREE.GeometryUtils.hilbert3D(new THREE.Vector3(0, 0, 0));
/*
三维样条曲线CatmullRomCurve3
在三维空间中随意设置几个顶点坐标,然后作为三维样条曲线CatmullRomCurve3的参数,你就可以生成一条穿过这几个点的光滑曲线。
CatmullRomCurve3的参数是三维向量对象Vector3构成的数组。
// 三维向量Vector3创建一组顶点坐标
const arr = [
new THREE.Vector3(-50, 20, 90),
new THREE.Vector3(-10, 40, 40),
new THREE.Vector3(0, 0, 0),
new THREE.Vector3(60, -60, 0),
new THREE.Vector3(70, 0, 80)
]
// 三维样条曲线
const curve = new THREE.CatmullRomCurve3(arr);
*/
var myCurve = new THREE.CatmullRomCurve3(myPoints);
var divisions = Math.round(12 * myPoints.length);
var myPoint = new THREE.Vector3();
var myColor = new THREE.Color();
for (var i = 0, l = divisions; i < l; i++) {
var t = i / l;
myCurve.getPoint(t, myPoint);
myPositions.push(myPoint.x, myPoint.y, myPoint.z);
myColor.setHSL(t, 1.0, 0.5);
myColors.push(myColor.r, myColor.g, myColor.b);
}
var myGeometry = new THREE.LineGeometry();
myGeometry.setPositions(myPositions);
myGeometry.setColors(myColors);
var myMaterial = new THREE.LineMaterial({ linewidth: 18, vertexColors: true });
var myLine = new THREE.Line2(myGeometry, myMaterial);
myLine.scale.set(2, 2, 2);
myMaterial.resolution.set(window.innerWidth, window.innerHeight);
myScene.add(myLine);
//渲染图形
animate();
function animate() {
myRenderer.render(myScene, myCamera);
requestAnimationFrame(animate);
}
</script>
</body>
</html>

更多推荐
所有评论(0)