Three.js入门之hello world以及如何绘制线


Posted in Javascript onSeptember 25, 2017

前言

本文属于学习Three.js 的入门教程,文中通过示例介绍了hello world和线的实现,下面话不多说了,来一起看看详细的介绍吧。

hello world

首先使用我们先用three.js创建一个立方体的hello world类型的案例。

<!doctype html> 
<html> 
<head> 
 <meta charset="UTF-8"> 
 <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> 
 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 
 <title>Document</title> 
 <script src="build/three.js"></script> 
 <style> 
 body{margin:0;} 
 canvas{width: 100%; height:100%; display: block;} 
 </style> 
</head> 
<body> 
<script> 
 //创建场景 
 var scene = new THREE.Scene(); 
 //设置相机(视野,显示口的宽高比,近裁剪面,远裁剪面) 
 var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 ); 
 //渲染器 
 var renderer = new THREE.WebGLRenderer(); 
 //设置渲染器的高度和宽度,如果加上第三个值 false,则按场景大小显示,等比例缩放 
 renderer.setSize( window.innerWidth, window.innerHeight,false); 
 //将渲染器添加到html当中 
 document.body.appendChild( renderer.domElement ); 
 
 //盒子模型(BoxGeometry),这是一个包含立方体所有顶点和填充面的对象。 
 var geometry = new THREE.BoxGeometry( 1, 2, 1 ); 
 //使用网孔基础材料(MeshBasicMaterial)进行着色器,这里只绘制了一个绿色 
 var material = new THREE.MeshBasicMaterial( { color: 0x00ffff } ); 
 //使用网孔(Mesh)来承载几何模型 
 var cube = new THREE.Mesh( geometry, material ); 
 //将模型添加到场景当中 
 scene.add( cube ); 
 //将相机沿z轴偏移5 
 camera.position.z = 5; 
 
 //设置一个动画函数 
 var animate = function () { 
 //一秒钟调用60次,也就是以每秒60帧的频率来绘制场景。 
 requestAnimationFrame( animate ); 
 
 //console.log(cube.rotation); 
 //每次调用模型的沿xy轴旋转0.01 
 cube.rotation.x += 0.01; 
 cube.rotation.y += 0.01; 
 //使用渲染器把场景和相机都渲染出来 
 renderer.render(scene, camera); 
 }; 
 
 animate(); 
</script> 
</body> 
</html>

上面的代码案例解析:

(1)首先引入了three.js的库文件,就和引入jq一样。

(2)创建场景(17行)

(3)创建相机,并设置视野,显示的宽高比,近裁剪面,远裁剪面(19行)

(4)创建渲染器,并设置属性,放置到dom中(21-25行)

(5)创建一个立方体模型,并放入到场景(28-34)

(6)设置相机的位置(36行)

(7)设置一个动画函数,并使用渲染器把场景和相机渲染出来,每秒60帧,显示出来,就变成了动画。

利用Three.js绘制线

Three.js入门之hello world以及如何绘制线

上面就是绘制完成后显示的效果。

<!doctype html> 
<html> 
<head> 
 <meta charset="UTF-8"> 
 <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> 
 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 
 <title>Document</title> 
 <script src="build/three.js"></script> 
 <style> 
 body{margin:0;} 
 canvas{width: 100%; height:100%; display: block;} 
 </style> 
</head> 
<body> 
<script> 
 //创建场景 
 var scene = new THREE.Scene(); 
 //设置相机(视野,显示口的宽高比,近裁剪面,远裁剪面) 
 var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 ); 
 //设置相机的视点 
 camera.position.set(0,0,100); 
 //设置相机的朝向 
 camera.lookAt(new THREE.Vector3(0,0,0)); 
 //渲染器 
 var renderer = new THREE.WebGLRenderer(); 
 //设置渲染器的高度和宽度,如果加上第三个值 false,则按场景大小显示,等比例缩放 
 renderer.setSize( window.innerWidth, window.innerHeight,false); 
 //将渲染器添加到html当中 
 document.body.appendChild( renderer.domElement ); 
 
 //定义线的基本材料,我们可以使用LineBasicMaterial(实线材料)和LineDashedMaterial(虚线材料) 
 var material = new THREE.LineBasicMaterial({color:0x0000ff}); 
 //设置具有几何顶点的几何(Geometry)或缓冲区几何(BufferGeometry)设置顶点位置,看名字就知道了,一个是直接将数据保存在js里面的,另一个是保存在WebGL缓冲区内的,而且肯定保存到WebGL缓冲区内的效率更高 
 var geometry = new THREE.Geometry(); 
 geometry.vertices.push(new THREE.Vector3(-10,0,0)); 
 geometry.vertices.push(new THREE.Vector3(0,10,0)); 
 geometry.vertices.push(new THREE.Vector3(10,0,0)); 
 //使用Line方法将线初始化 
 var line = new THREE.Line(geometry, material); 
 //将线添加到场景 
 scene.add(line); 
 
 //使用渲染器渲染出场景和相机 
 renderer.render(scene, camera); 
</script> 
</body> 
</html>

相对于上一节来说,只是模型方面有区别,这里是先使用线纹理的方法设置线的纹理,然后使用几何对象或者缓冲区几何对象生成顶点坐标,最后调用Line方法绘制出来线。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript中的this实例分析
Apr 28 Javascript
Jquery网页出现的乱码问题的三种解决方法
Jun 30 Javascript
JS实现遮罩层效果的简单实例
Nov 12 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
May 05 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
Dec 02 Javascript
ES6中新增的Object.assign()方法详解
Sep 22 Javascript
JavaScript之创意时钟项目(实例讲解)
Oct 23 Javascript
通过 JS 判断页面是否有滚动条的实现方法
Apr 05 Javascript
简单了解Ajax表单序列化的实现方法
Jun 14 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
Jun 19 jQuery
JS出现404错误原理及解决方案
Jul 01 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
Nov 11 Javascript
es6系列教程_ Map详解以及常用api介绍
Sep 25 #Javascript
简单谈谈js的数据类型
Sep 25 #Javascript
实现两个文本框同时输入的实例
Sep 25 #Javascript
zTree jQuery 树插件的使用(实例讲解)
Sep 25 #jQuery
对于input 框限定输入值为浮点型的js代码
Sep 25 #Javascript
静态页面实现 include 引入公用代码的示例
Sep 25 #Javascript
React学习之事件绑定的几种方法对比
Sep 24 #Javascript
You might like
神族 Protoss 历史背景
2020/03/14 星际争霸
php中mkdir函数用法实例分析
2014/11/15 PHP
php接口数据加密、解密、验证签名
2015/03/12 PHP
简单谈谈PHP中的Reload操作
2016/12/12 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
js 事件小结 表格区别
2007/08/13 Javascript
JQquery的一些使用心得分享
2012/08/01 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
JQuery each打印JS对象的方法
2013/11/13 Javascript
由浅入深剖析Angular表单验证
2016/07/14 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
Bootstrap基本样式学习笔记之按钮(4)
2016/12/07 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
2018/05/11 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
原生js检测页面加载完毕的实例
2018/09/11 Javascript
Vue 实现前进刷新后退不刷新的效果
2019/06/14 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
js里面的变量范围分享
2020/07/18 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
Python中shutil模块的学习笔记教程
2017/04/04 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
详解Django中CBV(Class Base Views)模型源码分析
2019/02/25 Python
Python3转换html到pdf的不同解决方案
2019/03/11 Python
Python 一行代码能实现丧心病狂的功能
2020/01/18 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
本科生个人求职自荐信
2013/09/26 职场文书
教师个人自我鉴定
2014/02/08 职场文书
干部个人对照检查材料
2014/08/25 职场文书
2014国庆节标语口号
2014/09/19 职场文书
业务员岗位职责范本
2015/04/03 职场文书
职工培训工作总结
2015/08/10 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python