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 相关文章推荐
JS URL传中文参数引发的乱码问题
Sep 02 Javascript
Prototype源码浅析 String部分(二)
Jan 16 Javascript
Javascript 垃圾收集机制介绍理解
May 14 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
Jun 29 Javascript
js网页滚动条滚动事件实例分析
May 05 Javascript
jQuery自定义动画函数实例详解(附demo源码)
Dec 10 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
Feb 14 Javascript
JavaScript 是什么意思
Sep 22 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
Mar 14 Javascript
web前端vue filter 过滤器
Jan 12 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
Aug 14 jQuery
JavaScript中的类型检查
Feb 03 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
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
PHP多进程通信-消息队列使用
2019/03/08 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
2019/11/13 PHP
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
比较新旧两个数组值得增加和删除的JS代码
2013/10/30 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
Jqgrid之强大的表格插件应用
2015/12/02 Javascript
js HTML5 Canvas绘制转盘抽奖
2020/09/13 Javascript
js select下拉联动 更具级联性!
2020/04/17 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
vue小白入门教程
2018/04/02 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
Python绘制频率分布直方图的示例
2019/07/08 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
2019/07/22 Python
解决Django连接db遇到的问题
2019/08/29 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
python中entry用法讲解
2020/12/04 Python
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
迷你分体式空调:SoGoodToBuy
2018/08/07 全球购物
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
致标枪运动员广播稿
2014/02/06 职场文书
竞聘书模板
2014/03/31 职场文书
社区科普工作方案
2014/06/03 职场文书
幼儿园门卫岗位职责范本
2014/07/02 职场文书
老人节主持词
2015/07/04 职场文书
2019新员工心得体会
2019/06/25 职场文书
使用python如何删除同一文件夹下相似的图片
2021/05/07 Python
关于JavaScript轮播图的实现
2021/11/20 Javascript
python 多态 协议 鸭子类型详解
2021/11/27 Python