使用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 相关文章推荐
jquery中对表单的基本操作代码
Jul 29 Javascript
Jquery 表格合并的问题分享
Sep 17 Javascript
jQuery 的全选(全非选)即取得被选中的值使用介绍
Nov 12 Javascript
JS+JSP checkBox 全选具体实现
Jan 02 Javascript
如何减少浏览器的reflow和repaint
Feb 26 Javascript
boostrapTable的refresh和refreshOptions区别浅析
Jan 22 Javascript
微信小程序商城项目之侧栏分类效果(1)
Apr 17 Javascript
vue父组件向子组件传递多个数据的实例
Mar 01 Javascript
JS从非数组对象转数组的方法小结
Mar 26 Javascript
详解Vue取消eslint语法限制
Aug 04 Javascript
Angular CLI 使用教程指南参考小结
Apr 10 Javascript
Vue 打包的静态文件不能直接运行的原因及解决办法
Nov 19 Vue.js
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中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
php 将字符串按大写字母分隔成字符串数组
2010/04/30 PHP
简单的php写入数据库类代码分享
2011/07/26 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
php数组转成json格式的方法
2015/03/09 PHP
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
php中static 静态变量和普通变量的区别
2016/12/01 PHP
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
CSS心形加载的动画源码的实现
2021/03/09 HTML / CSS
jquery checkbox全选、取消全选实现代码
2010/03/05 Javascript
google 搜索框添加关键字实现代码
2010/04/24 Javascript
修复IE9&amp;safari 的sort方法
2011/10/21 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
Node.js编码规范
2014/07/14 Javascript
Underscore源码分析
2015/12/30 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
js实现select下拉框选择
2020/01/11 Javascript
Python找出9个连续的空闲端口
2016/02/01 Python
解决tensorflow模型参数保存和加载的问题
2018/07/26 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
Python交互环境下打印和输入函数的实例内容
2020/02/16 Python
详解WebSocket跨域问题解决
2018/08/06 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
师恩难忘教学反思
2014/04/27 职场文书
单位授权委托书范文
2014/08/02 职场文书
店面出租协议书范本
2014/11/28 职场文书
红旗渠导游词
2015/02/09 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书
导游词之长城八达岭
2019/09/24 职场文书
Django如何创作一个简单的最小程序
2021/05/12 Python
深入理解 Golang 的字符串
2022/05/04 Golang