使用three.js 画渐变的直线


Posted in Javascript onJune 05, 2016

Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机、光影、材质等各种对象。你可以在它的主页上看到许多精彩的演示。不过,这款引擎目前还处在比较不成熟的开发阶段,其不够丰富的 API 以及匮乏的文档增加了初学者的学习难度(尤其是文档的匮乏)three.js的代码托管在github上面。

http://github.com/mrdoob/three.js/

我们来看实例吧

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
  </head>
  <script type="text/javascript" src="js/three.js" ></script>
  <style>
    div#canvas-frame{
      border: none;
      cursor: pointer;
      width: 100%;
      height: 600px;
      background-color: #eeeeee;
    }
  </style>
  <script>
    var renderer;
    function initThree(){
      width = document.getElementById('canvas-frame').clientWidth;
      height = document.getElementById('canvas-frame').clientHeight;
      //渲染器 决定渲染的结果和应该画在页面的元素什么元素上面并且怎样绘制。
      renderer = new THREE.WebGLRenderer({
        antialias : true
      });
      renderer.setSize(width,height);
      //domElement表示渲染器中的画布,所有的渲染都画在上边
      document.getElementById('canvas-frame').appendChild(renderer.domElement);
      renderer.setClearColor(0xFFFFFF,1.0);
    }
    //相机 透视相机
    var camera;
    function initCamera(){
      camera = new THREE.PerspectiveCamera(45,width/height,1,10000);
      camera.position.x = 0;
      camera.position.y = 1000;
      camera.position.z = 0;
      camera.up.x = 0;
      camera.up.y = 0;
      camera.up.z = 1;
      camera.lookAt({
        x : 0,
        y : 0,
        z : 0
      });
    }
    //场景
    var scene;
    function initScene(){
      scene = new THREE.Scene();
    }
    //灯光
    var light;
    function initLight(){
      light = new THREE.DirectionalLight(0xFF0000, 1.0 , 0);
      light.position.set(100, 100, 200);
      scene.add(light);
    }
    //几何体
    var cube;
    function initObject(){
      //声明的几何体, 里边有个vertices参数可以用来存放点
      var geometry = new THREE.Geometry();
      //LineBasicMaterial(parameters)//basic翻译:基础//Material翻译:原料
      //Parameters:是一个定义材质外观的对象,它包含多个属性来定义材质,这些属性是//翻译:参数
      //Color:线条的颜色,用16进制来表示,默认的颜色是白色。
      //Linewidth
      //Linecap:线条两端的外观,默认是圆角端点,当线条较粗的时候才看得出效果//cap翻译:帽子
      //Linejoin:两个线条的连接点处的外观,默认是round 圆角//join翻译:加入
      //VertexColors:定义线条材质是否使用顶点元素,这是一个boolean值。意思是线条各部分的颜色根据顶点的颜色来进行插值。//vertex翻译:顶点
      //Fog:定义材质的颜色是否受全局雾效的影响。//翻译:雾  
      var material = new THREE.LineBasicMaterial({
        vertexColors: true
      });
      //定义两种颜色分别是两个端点的颜色
      var color1 = new THREE.Color( 0x444444 ),
        color2 = new THREE.Color( 0xFF0000 );
      //线的材质可以由两点的颜色决定
      var p1 = new THREE.Vector3();
      var p2 = new THREE.Vector3();
      p1.set(-100,0,100);
      p2.set(100,0,-100);
      geometry.vertices.push(p1);
      geometry.vertices.push(p2);
      geometry.colors.push(color1, color2);
      //定义线条 这里会传进去三个参数  
      //第一个是几何体geometry,里面包含两个顶点和顶点颜色
      //第二个是线条的材质
      //第三个是一组点的连接方式
      var line = new THREE.Line(geometry,material, THREE.LinePieces);
      //将线条添加到场景中
      scene.add(line);
    }
    function threeStart(){
      initThree();
      initCamera();
      initScene();
      initLight();
      initObject();
      renderer.clear();
      renderer.render(scene,camera);
    }
  </script>
  <body onload="threeStart()">
    <div id="canvas-frame"></div>
  </body>
</html>

希望本实例能给大家学习three.js带来些帮助

Javascript 相关文章推荐
JS截取字符串常用方法整理及使用示例
Oct 18 Javascript
jQuery Ajax调用WCF服务详细教程
Mar 31 Javascript
IE10中flexigrid无法显示数据的解决方法
Jul 26 Javascript
jquery制作属于自己的select自定义样式
Nov 23 Javascript
使用node.js中的Buffer类处理二进制数据的方法
Nov 26 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
Apr 24 Javascript
浅谈原型对象的常用开发模式
Jul 22 Javascript
使用express搭建一个简单的查询服务器的方法
Feb 09 Javascript
JS的函数调用栈stack size的计算方法
Jun 24 Javascript
微信小程序中使用ECharts 异步加载数据的方法
Jun 27 Javascript
Layer弹出层动态获取数据的方法
Aug 20 Javascript
JS数组扁平化、去重、排序操作实例详解
Feb 24 Javascript
jquery判断input值不为空的方法
Jun 05 #Javascript
jQuery四种选择器使用及示例
Jun 05 #Javascript
JavaScript和jquery获取父级元素、子级元素、兄弟元素的方法
Jun 05 #Javascript
分享javascript实现的冒泡排序代码并优化
Jun 05 #Javascript
EasyUI布局 高度自适应
Jun 04 #Javascript
javascript获取select标签选中的值
Jun 04 #Javascript
jQuery Mobile 触摸事件实例
Jun 04 #Javascript
You might like
php下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
php读取文件内容的三种可行方法示例介绍
2014/02/08 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
如何让DIV可编辑、可拖动示例代码
2013/09/18 Javascript
javascript列表框操作函数集合汇总
2013/11/28 Javascript
javascript避免数字计算精度误差的方法详解
2014/03/05 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
jQuery实现的多滑动门,多选项卡效果代码
2016/03/28 Javascript
js仿百度切换皮肤功能(html+css)
2016/07/10 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
详解React开发必不可少的eslint配置
2018/02/05 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
2020/10/28 Javascript
python进阶教程之模块(module)介绍
2014/08/30 Python
跟老齐学Python之Python安装
2014/09/12 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
numpy.random.seed()的使用实例解析
2018/02/03 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
一款纯css3实现的鼠标经过按钮特效教程
2014/11/09 HTML / CSS
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
中专生自荐信
2013/10/12 职场文书
聚美优品的广告词
2014/03/14 职场文书
市政管理求职信范文
2014/05/07 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
2015年出纳工作总结与计划
2015/05/18 职场文书