使用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 相关文章推荐
javascript 屏蔽鼠标键盘的几段代码
Jan 02 Javascript
jQuery插件开发全解析
Oct 10 Javascript
将json对象转换为字符串的方法
Feb 20 Javascript
jQuery插件pagination实现无刷新分页
May 21 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
Jan 20 Javascript
vue实现element-ui对话框可拖拽功能
Aug 17 Javascript
JS跨域请求的问题解析
Dec 03 Javascript
vue返回上一页面时回到原先滚动的位置的方法
Dec 20 Javascript
微信小程序如何再次获取用户授权的方法
May 10 Javascript
js+canvas实现简单扫雷小游戏
Jan 22 Javascript
非常漂亮的js烟花效果
Mar 10 Javascript
详解JavaScript的计时器和按钮效果设置
Feb 18 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编程与应用
2006/10/09 PHP
Windows 下的 PHP-PEAR 安装方法
2010/11/20 PHP
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
php解析json数据实例
2014/08/19 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
javascript 面向对象的JavaScript类
2010/05/04 Javascript
Javascript页面添加到收藏夹的简单方法
2013/08/07 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
JavaScript异步加载问题总结
2018/02/17 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
2018/03/19 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
pybind11在Windows下的使用教程
2019/07/04 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
大学生大二自我鉴定
2013/10/28 职场文书
专业幼师实习生自我鉴定范文
2013/12/08 职场文书
初中政治教学反思
2014/01/17 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
谢师宴邀请函
2015/02/02 职场文书
公司更名通知函
2015/04/24 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
2016年寒假见闻
2015/10/10 职场文书
《认识年月日》教学反思
2016/02/19 职场文书
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android
nginx之内存池的实现
2022/06/28 Servers