<html lang="en">
<head>
<meta charset="UTF-8">
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<script src="../resources/js/three.js"></script>
<script src="../resources/js/OrbitControls.js"></script>
</head>
<body>
<script>
let scene = new THREE.Scene();
let bigCircle = new THREE.Shape();
bigCircle.moveTo(0, 0);
//大圆
bigCircle.arc(0, 0, 20, 0, Math.PI * 2);
//小圆
let smallCircle = new THREE.Shape();
smallCircle.arc(0, 0, 10, 0, Math.PI * 2);
//挖空
bigCircle.holes.push(smallCircle);
let tube = new THREE.ExtrudeGeometry(bigCircle, {
amount: 300,
bevelEnabled: false,
curveSegments: 100,
steps: 100
});
let material = new THREE.MeshLambertMaterial({
color: new THREE.Color("#fc0101")
});
let mesh = new THREE.Mesh(tube, material); //网格模型对象Mesh
scene.add(mesh); //网格模型添加到场景中
//环境光
let ambient = new THREE.AmbientLight(0x444444);
ambient.intensity=2;
scene.add(ambient);
let width = window.innerWidth; //窗口宽度
let height = window.innerHeight; //窗口高度
let k = width / height; //窗口宽高比
let s = 200; //三维场景显示范围控制系数,系数越大,显示的范围越大
//创建相机对象(正射投影相机)
let camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
camera.position.set(200, 300, 200); //设置相机位置
camera.lookAt(scene.position); //设置相机方向(指向的场景对象),拍照方向
let renderer = new THREE.WebGLRenderer({
//抗锯齿
antialias: true,
alpha: true
});
renderer.setSize(width, height);//设置渲染区域尺寸
renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
document.body.appendChild(renderer.domElement); //body元素中插入canvas对象
//执行渲染操作 指定场景、相机作为参数
renderer.render(scene, camera);
//控制视野运动
function render() {
renderer.render(scene, camera);//执行渲染操作
}
render();
let controls = new THREE.OrbitControls(camera, renderer.domElement);//创建控件对象
controls.addEventListener('change', render);//监听鼠标、键盘事件
</script>
</body>
</html>
效果图如下: