使用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 相关文章推荐
判断是否输入完毕再激活提交按钮
Jun 26 Javascript
用Javascript同时提交多个Web表单的方法
Dec 26 Javascript
js 省地市级联选择
Feb 07 Javascript
Jquery从头学起第四讲 jquery入门教程
Aug 01 Javascript
新手常遇到的一些jquery问题整理
Aug 16 Javascript
拉动滚动条加载数据的jquery代码
May 03 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
Sep 01 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
May 26 Javascript
Vue 实用分页paging实例代码
Apr 12 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
Aug 14 Javascript
JavaScript数据结构之栈实例用法
Jan 18 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
Dec 16 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
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
PHP 年龄计算函数(精确到天)
2012/06/07 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
jQuery中each循环的跳出和结束实例
2017/08/16 jQuery
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
jQuery实现全选、反选和不选功能的方法详解
2019/12/04 jQuery
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
跟老齐学Python之做一个小游戏
2014/09/28 Python
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
python比较2个xml内容的方法
2015/05/11 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
python实现简单点对点(p2p)聊天
2017/09/13 Python
详解python里使用正则表达式的分组命名方式
2017/10/24 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
python关于调用函数外的变量实例
2019/12/26 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
python字符串判断密码强弱
2020/03/18 Python
python实现吃苹果小游戏
2020/03/21 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
存储过程和sql语句的优缺点
2014/07/02 面试题
电气工程师岗位职责
2014/01/01 职场文书
安全检查管理制度
2014/02/02 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
奖学金申请书(范文)
2019/08/14 职场文书
python图片灰度化处理的几种方法
2021/06/23 Python
基于Go语言构建RESTful API服务
2021/07/25 Golang
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL
Java实现学生管理系统(IO版)
2022/02/24 Java/Android