使用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的递增/递减运算符和带操作的赋值运算符的等价式
Dec 08 Javascript
jquery ajax例子返回值详解
Sep 11 Javascript
javascript 面向对象封装与继承
Nov 27 Javascript
js漂浮广告实现代码
Aug 15 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
Aug 27 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
Jun 13 Javascript
AngularJS中run方法的巧妙运用
Jan 04 Javascript
jQuery导航条固定定位效果实例代码
May 26 jQuery
浅谈pc端rem字体设置的问题
Aug 03 Javascript
JQuery常见节点操作实例分析
May 15 jQuery
js消除图片小游戏代码
Dec 11 Javascript
微信小程序实现星星评分效果
Nov 01 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弹出对话框实现重定向代码
2014/01/23 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
Chrome Web App开发小结
2014/09/04 PHP
浅析php原型模式
2014/11/25 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
php加密解密字符串示例
2016/10/13 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
jQuery UI AutoComplete 自动完成使用小记
2010/08/21 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
2018/08/24 Javascript
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
Python简单获取自身外网IP的方法
2016/09/18 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
基于Python函数的作用域规则和闭包(详解)
2017/11/29 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
pytorch-RNN进行回归曲线预测方式
2020/01/14 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
英国经典球衣网站:Classic Football Shirts
2017/05/20 全球购物
德国的各种媒体在线商店:Thalia.de(书籍、电子书、玩具等)
2020/10/08 全球购物
服务型党组织建设典型材料
2014/05/07 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
公司经营目标责任书
2015/01/29 职场文书
小学生读书笔记范文
2015/06/30 职场文书
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL