Three.js案例代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<title>第一个Threejs案例</title>
<script src="./js/three.js"></script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
#webgl {
width: 100%;
height: 100vh;
overflow: hidden;
}
</style>
</head>
<body>
<div id="webgl"></div>
<script>
// 获取渲染容器
let webgl = document.getElementById("webgl");
// 获取渲染容器的宽高
let webglWidth = webgl.offsetWidth;
let webglHeight = webgl.offsetHeight;
// 创建场景
let scene = new THREE.Scene();
// 创建三维坐标(轴线长度)
// 用于调试:红色:x轴、绿色:y轴、蓝色:z轴
let axes = new THREE.AxesHelper(60);
// 添加三维坐标到场景中
scene.add(axes);
// 设置环境光(十六进制颜色)
let ambient = new THREE.AmbientLight(0x444444);
// 将环境光添加到场景中
scene.add(ambient);
// 设置点光源(十六进制颜色)
let point = new THREE.PointLight(0xffffff);
// 设置点光源的位置(x轴, y轴, z轴)
point.position.set(400, 200, 300);
// 将点光源添加到场景中
scene.add(point);
// 创建立方几何体(x轴, y轴, z轴)
let cubeGeometry = new THREE.BoxGeometry(20,20,20);
// 创建网格基础材质
let cubeMaterial = new THREE.MeshLambertMaterial({color:0x00FFFF});
// 创建立方体(几何体, 材质)
let cube = new THREE.Mesh(cubeGeometry,cubeMaterial);
// 调整立方体位置(x轴, y轴, z轴)
cube.position.set(0, 0, 0);
// 将立方体添加到场景中
scene.add(cube);
// 创建透视相机(角度, 宽高比, 最近距离, 最远距离)
let camera = new THREE.PerspectiveCamera(60,webglWidth/webglHeight,0.1,2000);
// 设置相机的位置(x轴, y轴, z轴)
camera.position.set(100, 100, 100);
// 将相机指向场景中心
camera.lookAt(scene.position);
// 创建渲染器
let renderer = new THREE.WebGLRenderer();
// 设置渲染器的初始颜色(十六进制颜色, 透明度)
renderer.setClearColor(0xEEEEEE,1);
// 设置渲染器大小(标签宽度, 标签高度)
renderer.setSize(webglWidth,webglHeight);
// 将渲染器添加到渲染容器中(渲染器元素)
webgl.appendChild(renderer.domElement);
// 创建渲染函数
function render(){
// 渲染场景和相机(场景, 相机)
renderer.render(scene,camera);
}
// 调用渲染函数
render();
// 设置窗口变化自适应调整事件
window.onresize = function(){
// 重新获取渲染容器的宽高
webglWidth = webgl.offsetWidth;
webglHeight = webgl.offsetHeight;
// 重置渲染器canvas画布大小
renderer.setSize(webglWidth,webglHeight);
// 重置相机显示范围的宽高比
camera.aspect = webglWidth/webglHeight;
// 更新相机的投影矩阵
camera.updateProjectionMatrix();
// 重新调用渲染函数
render();
};
</script>
</body>
</html>
第一个three.js案例渲染效果:
注意:这个地方我们设置了两种光源:环境光 和 点光源 。
-
环境光:类似于房间内的明暗度,它会均匀的照亮场景中所有的物体。
-
点光源:类似于生活中的白炽灯,可以使物体呈现出不同的明暗效果。
原创作者:吴小糖
创作时间:2022-9-27