Three.js学习|代码详解 个人见解
写在前面
上次写完ThreeJS学习|创建第一个三维场景这个推文有人问具体的参数即代码功能,因此在此处就具体说明一下。
场景演示
在这里弄了一个更加精简的项目以供参考。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>three.js三维场景</title>
<style>
body {
margin: 0;
overflow: hidden;
}
</style>
<script src="./build/three.js"></script>
</head>
<body>
<script>
var scene = new THREE.Scene();
//var geometry = new THREE.SphereGeometry(60, 40, 40); //创建一个球体几何对象
var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometry
var material = new THREE.MeshLambertMaterial({
color: 0x0000ff
});
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
var point = new THREE.PointLight(0xffffff);
point.position.set(400, 200, 300);
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 = 300;
var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
camera.position.set(200, 300, 200);
camera.lookAt(scene.position);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height);
renderer.setClearColor(0xb9d3ff, 1);
document.body.appendChild(renderer.domElement);
renderer.render(scene, camera);
</script>
</body>
</html>
其效果就是一个简单的立方体。
代码详解
1、在HTML文件中引入three.js
引入方法有多种,看哪种方便了,一般就是本地和网络。
<!--相对地址加载-->
<script src="./build/three.js"></script>
<!--http绝对地址远程加载-->
<script src="http://******/threejs/build/three.js"></script>
2、创建场景
这个场景就像是一张纸,未来你所有的对象都需要添加到这个对象上,未来在这上面显示。
var scene = new THREE.Scene();
3、创建网格模型
要创建各种对象,各类对象通过操作创建网格模型,并将网格模型添加到场景中。
3.1几何体Geometry
//创建一个立方体几何对象
var geometry = new THREE.BoxGeometry(100, 100, 100);
//创建一个球体几何对象
var geometry = new THREE.SphereGeometry(60, 100, 40);
通过THREE.BoxGeometry()创建一个长宽高都是100的立方体,里面共有三个参数,分别代表长宽高,根据需求更改参数即可。同理还存在其他类型的几何体,如THREE.SphereGeometry(),会创建一个你需要的圆。
3.2材质Material
var material = new THREE.MeshLambertMaterial({
color: 0x0000ff
}); //材质对象
通过THREE.MeshLambertMaterial()创建一个可用于上述立方体的材质对象,这里需要注意的是它的参数是一个对象,对象包含了颜色等基本属性。
3.3网格模型
var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
scene.add(mesh); //网格模型添加到场景中
通过THREE.Mesh()创建网格模型,输入参数为几何体对象和材质对象。最终添加到场景中。
4、创建光源
//点光源
var point = new THREE.PointLight(0xffffff);
通过THREE.PointLight()创建一个点光源对象,参数为光照强度,可简单理解为参数值越大则光源下的对象越亮。
5、创建相机
//创建相机对象
var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
camera.position.set(200, 300, 200); //设置相机位置
camera.lookAt(scene.position); //设置相机方向
通过THREE.OrthographicCamera()创建一个正射投影相机对象,里面有六个参数,这里你先了解前四个参数是用来定义拍照窗口大小的就行了,就像咱们拍照一样,取景范围越大,被拍的景物就变小了。同理,拍照时相机的位置和角度对拍照效果也会有影响,因此也有更改相机位置和角度的函数。
6、创建渲染器
//创建渲染器对象
var renderer = new THREE.WebGLRenderer();
document.body.appendChild(renderer.domElement);
renderer.render(scene, camera);
通过THREE.WebGLRenderer()创建一个用于在浏览器渲染的渲染器,将场景的全部内容在浏览器端渲染显示。
代码结构
其实对于一个Three.js项目而言,他的结构都是如此。
- 《Deep Learning with Python》第一章 1.1 人工智能、机器学习和深度学习
- boost::function的用法
- rpc框架之 thrift 学习 1 - 安装 及 hello world
- WordPress自定义栏目运用实例Ⅰ:添加文章来源
- ZooKeeper 笔记(5) ACL(Access Control List)访问控制列表
- 算法:支持重复元素的二分查找
- .NET 异常处理的动作策略(Action Policy)
- 如何在mac本上安装android sdk
- Fityk-曲线拟合工具
- maven: 打包可运行的jar包(java application)及依赖项处理
- Effective java 第2版 - 笔记(01) 单例(Singleton)的枚举(enum)实现
- 恶心的0.5四舍五入问题
- 乐视金融更名 相关域名引关注
- weblogic.nodemanager.common.ConfigException: Native version is enabled but nodemanager native librar
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 基于keras中的回调函数用法说明
- PHP实现读取文件夹及批量重命名文件操作示例
- Python多线程threading创建及使用方法解析
- django rest framework 过滤时间操作
- 浅谈TensorFlow之稀疏张量表示
- 解决Keras 中加入lambda层无法正常载入模型问题
- 基于python实现判断字符串是否数字算法
- Tensorflow tensor 数学运算和逻辑运算方式
- Tensorflow全局设置可见GPU编号操作
- YII框架http缓存操作示例
- 基于tf.shape(tensor)和tensor.shape()的区别说明
- PHP检查URL包含特定字符串实例方法
- Python使用xlrd实现读取合并单元格
- python模块如何查看
- YII框架页面缓存操作示例