three.js是一个基于WebGL的轻量级、易于使用的3D库。它极大地简化了WebGL的复杂细节,降低了学习成本,同时提高了性能。
场景(Scene)
new THREE.Scene()来创建一个新的场景。/*
*1. 创建场景 -- 放置物体对象的环境
*/
const scene = new THREE.Scene();
new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000)/*
* 2.创建相机(这里是 透视摄像机--用来模拟人眼所看到的景象)
*/
const camera = new THREE.PerspectiveCamera(
75, // 视野角度
window.innerWidth / window.innerHeight, // 长宽比
0.1, // 进截面
1000 // 远截面
);
// 设置相机位置
camera.position.set(0, 0, 10);
scene.add(camera); // 将相机添加到场景中

// 假设你已经有一个场景(scene)对象
// 创建正交相机
const camera = new THREE.OrthographicCamera(
left, // 相机左平面
right, // 相机右平面
top, // 相机上平面
bottom, // 相机下平面
near, // 近裁剪面
far // 远裁剪面
);
// 设定相机位置(对于正交相机来说,这不是必需的,但通常你需要设置它以获得期望的视角)
camera.position.set(0, 0, 10);
// 将相机添加到场景中(注意:相机通常不直接添加到场景中,而是由渲染器使用)
// 但在这里,如果你只是为了存储它或做其他操作,你可以这样做
// scene.add(camera); // (这通常是不必要的)
为了设置正交相机的参数,你需要定义六个值:
const aspectRatio = window.innerWidth / window.innerHeight;
const width = 10; // 假设你想要的视图宽度为10个单位
const height = width / aspectRatio; // 计算视图高度以保持相同的宽高比
const camera = new THREE.OrthographicCamera(
-width / 2, // left
width / 2, // right
height / 2, // top
-height / 2, // bottom
1, // near
1000 // far
);

渲染器(Renderer)
new THREE.WebGLRenderer()来创建一个WebGL渲染器,并通过renderer.setSize(width, height)设置渲染尺寸,最后使用document.body.appendChild(renderer.domElement)将渲染的canvas添加到页面中。// 假设你已经有了场景(scene)和相机(camera)
// 1. 创建渲染器实例
const renderer = new THREE.WebGLRenderer();
// 2. 设置渲染器尺寸(通常与canvas元素或窗口大小匹配)
renderer.setSize(window.innerWidth, window.innerHeight);
// 3. 将渲染器的DOM元素添加到HTML文档中
document.body.appendChild(renderer.domElement);
// 4. 渲染场景
renderer.render(scene, camera);
// 注意:你可能还需要一个动画循环来持续更新和渲染场景
function animate() {
requestAnimationFrame(animate); // 请求下一个动画帧
// 更新场景中的物体(如果需要)
// ...
// 渲染场景
renderer.render(scene, camera);
}
animate();
// 另外,你可能还需要处理窗口大小变化事件来更新渲染器尺寸
window.addEventListener('resize', onWindowResize, false);
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight; // 更新相机纵横比(如果需要)
camera.updateProjectionMatrix(); // 更新投影矩阵
renderer.setSize(window.innerWidth, window.innerHeight); // 更新渲染器尺寸
}
在这个示例中,animate函数使用requestAnimationFrame来创建一个动画循环,该循环在每个动画帧中更新场景并渲染它。同时,还添加了一个事件监听器来处理窗口大小变化事件,以确保渲染器的尺寸与窗口尺寸保持一致。