文章目录
一、Three.js 是什么?
1.介绍
Three.js是基于原生WebGL封装运行的三维引擎,在所有WebGL引擎中,Three.js是国内文资料最多、使用最广泛的三维引擎。
2.环境配置
js作为一个跨端语言,可作为IDE的软件有很多,笔者这里使用的是 websotrm,它的好处是改动一处便可直接显示。
在此给出Three.js的官方GitHub库,[Three.js-GitHub](https://github.com/mrdoob/three.js),请提前下载
3.WebGL和Three.js学习顺序?
引用自Three教程
如果你急于要实现一个Web3D功能,时间有限,也没有图形学基础,个人建议直接学习先Three.js即可,以后想深入掌握,可以学习原生WebGL和图形学相关知识。
如果时间比较充足,又希望有更大的成长空间,学习底层原生WebGL肯定是必要的,可以WebGL和Threejs结合着学习,顺序也不是非常重要。
二、麻雀虽小而五脏俱全的例子
1.引入资源包
<head>
<meta charset="UTF-8">
<title>第一个three.js文件_WebGL三维场景</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!-- 引入three.js三维引擎-->
<script src="./three.js-r95/build/three.js"></script>
<!-- 引入OrbitControls.js鼠标操作三维场景-->
<script src="./three.js-r95/examples/js/controls/OrbitControls.js"></script>
</head>
2.创建场景和添加2个以上的3D对象
/**
* 创建场景对象Scene
*/
var scene = new THREE.Scene();
/**
* 创建网格模型,并添加到场景
*/
var geometry = new THREE.BoxGeometry(25, 50, 50); //创建一个立方体几何对象Geometry
var material = new THREE.MeshLambertMaterial({
color: 0xff00ff, //颜色 16进制
opacity:0.9, //透明度 0-1
transparent:true, //开启透明度,默认关闭
wireframe:false //线框,默认关闭
}); //材质对象Material
var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
scene.add(mesh); //网格模型添加到场景中
var geometry2 = new THREE.BoxGeometry(25, 50, 50); //创建一个球体几何对象
var material2 = new THREE.MeshLambertMaterial({
color: 0xffffff,
opacity:0.9, //透明度 0-1
transparent:true //开启透明度
}); //材质对象Material2
var mesh2 = new THREE.Mesh(geometry2,material2)
mesh2.translateX(-100);
mesh2.translateZ(-30);
// mesh2.translateY(30); //球体网格模型沿Y轴正方向平移
scene.add(mesh2)
(可选)3.添加辅助坐标系
/**
* 辅助坐标系 参数1000表示坐标系大小
*/
var axisHelper = new THREE.AxisHelper(1000);
scene.add(axisHelper)
4.光源和相机设置
/**
* 光源设置
*/
//点光源
var point = new THREE.PointLight(0xfffffff);
point.position.set(100, 100, 100); //点光源位置
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 = 100; //三维场景显示范围控制系数,系数越大,显示的范围越大
//创建相机对象
// var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
var camera = new THREE.PerspectiveCamera( 45, width / height, 1, 1000 );
camera.position.set(200, 0, 0); //设置相机位置
camera.lookAt(scene.position); //设置相机方向(指向的场景对象)position
5.渲染得到结果
/**
* 创建渲染器对象
*/
var renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height);//设置渲染区域尺寸
renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
document.body.appendChild(renderer.domElement); //body元素中插入canvas对象
function render() {
console.log(camera.position)
renderer.render(scene,camera);//执行渲染操作
}
render();
var controls = new THREE.OrbitControls(camera,renderer.domElement);//创建控件对象
controls.addEventListener('change', render);//监听鼠标、键盘事件
结果图如下:
总结及完整源码
以上就是今天要讲的内容,本文仅仅简单介绍了Three.js的使用。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一个three.js文件_WebGL三维场景</title>
<style>
body {
margin: 0;
overflow: hidden;
/* 隐藏body窗口区域滚动条 */
}
</style>
<!-- 引入three.js三维引擎-->
<script src="./three.js-r95/build/three.js"></script>
<!-- 引入OrbitControls.js鼠标操作三维场景-->
<script src="./three.js-r95/examples/js/controls/OrbitControls.js"></script>
</head>
<body>
<script>
/**
* 创建场景对象Scene
*/
var scene = new THREE.Scene();
/**
* 创建网格模型,并添加到场景
*/
var geometry = new THREE.BoxGeometry(25, 50, 50); //创建一个立方体几何对象Geometry
var material = new THREE.MeshLambertMaterial({
color: 0xff00ff, //颜色 16进制
opacity:0.9, //透明度 0-1
transparent:true, //开启透明度,默认关闭
wireframe:false //线框,默认关闭
}); //材质对象Material
var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
scene.add(mesh); //网格模型添加到场景中
var geometry2 = new THREE.BoxGeometry(25, 50, 50); //创建一个球体几何对象
var material2 = new THREE.MeshLambertMaterial({
color: 0xffffff,
opacity:0.9, //透明度 0-1
transparent:true //开启透明度
}); //材质对象Material2
var mesh2 = new THREE.Mesh(geometry2,material2)
mesh2.translateX(-100);
mesh2.translateZ(-30);
// mesh2.translateY(30); //球体网格模型沿Y轴正方向平移
scene.add(mesh2)
/**
* 辅助坐标系 参数1000表示坐标系大小
*/
var axisHelper = new THREE.AxisHelper(1000);
scene.add(axisHelper)
/**
* 光源设置
*/
//点光源
var point = new THREE.PointLight(0xfffffff);
point.position.set(100, 100, 100); //点光源位置
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 = 100; //三维场景显示范围控制系数,系数越大,显示的范围越大
//创建相机对象
// var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
var camera = new THREE.PerspectiveCamera( 45, width / height, 1, 1000 );
camera.position.set(200, 0, 0); //设置相机位置
camera.lookAt(scene.position); //设置相机方向(指向的场景对象)position
/**
* 创建渲染器对象
*/
var renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height);//设置渲染区域尺寸
renderer.setClearColor(0xb9d3ff, 1); //设置背景颜色
document.body.appendChild(renderer.domElement); //body元素中插入canvas对象
function render() {
console.log(camera.position)
renderer.render(scene,camera);//执行渲染操作
}
render();
var controls = new THREE.OrbitControls(camera,renderer.domElement);//创建控件对象
controls.addEventListener('change', render);//监听鼠标、键盘事件
</script>
</body>
</html>