• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > 利用HTML5绘制点线面组成的3D图形的示例_html5教程技巧

利用HTML5绘制点线面组成的3D图形的示例_html5教程技巧

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含HTML5等相关知识,匿名希望在学习及工作中可以帮助到您
玩Canvas玩了有两三个礼拜了,平面的东西玩来玩去也就那样,所以就开始折腾3D了。

  因为Canvas画布终究还是平面的,所以要有3D就得抽象出一个Z轴。然后再把3D坐标转换成2D坐标,画到画布上,再通过旋转等变换效果来产生3D感。做3D一般就是由点到线,然后由线到面。

  【点】

  点的话,之前我有写过关于3D的博文 解析3D标签云,其实很简单 ,这篇博文虽然讲的是用div实现的3D标签云,但是追根到底产生的3D原理是一样的,就是最简单的由点构成的3D了。每一个标签就是一个点。也可以直接看这个DEMO:
2015512164236104.png (344×329)

3DBall
里面的总共有五百个点对象,每个点对象相应的根据他们的Z轴来改变他们的大小和透明度,再平均分布在球面上,就构成了点球体了。

  【线】

  如果知道怎么做点之后,线也就容易了,只要把点连起来就行了。这个没做DEMO,不过也确实不难。就循环moveTo,然后lineTo,线就出来了。

  【面】

  这篇博文主要讲面滴。
二话不说,先上个DEMO吧 :
2015512164305697.png (170×168)

3D立方体

做一个立方体,我用了三个对象:点对象,面对象,以及立方体本身一个对象:

  下面这个是点对象,x,y,z是点的三维坐标,_get2d方法是把三维坐标转换到二维层面来。fallLength是焦距。

  1. var Vector = function(x,y,z){
  2. this.x = x;
  3. this.y = y;
  4. this.z = z;
  5. this._get2d = function(){
  6. var scale = fallLength/(fallLength+this.z);
  7. var x = centerX + this.x*scale;
  8. var y = centerY + this.y*scale;
  9. return {x:x , y:y};
  10. }
  11. }


  然后是面对象:

  面对象的属性页很容易理解,一个面就是一个正方形 , v1v2v3v4是面的四个顶点,zIndex这个属性很重要,是代表这个面的层级,是在最外面还是在里面,这个必须要有,这样当用canvas画的时候才能让这个面画在最前面,才不会被其他的面遮盖。zIndex的值也很容易理解,就是顶点z轴坐标的平均值,其实也就是中心点的z轴坐标。颜色就是这个面的颜色啦。

  1. var Face = function(vector1,vector2,vector3,vector4,color){
  2. this.v1 = vector1;
  3. this.v2 = vector2;
  4. this.v3 = vector3;
  5. this.v4 = vector4;
  6. this.color = color;
  7. this.zIndex = (this.v1.z + this.v2.z + this.v3.z + this.v4.z)/4;
  8. this.draw = function(){
  9. ctx.save();
  10. ctx.beginPath();
  11. ctx.moveTo(this.v1._get2d().x , this.v1._get2d().y);
  12. ctx.lineTo(this.v2._get2d().x , this.v2._get2d().y);
  13. ctx.lineTo(this.v3._get2d().x , this.v3._get2d().y);
  14. ctx.lineTo(this.v4._get2d().x , this.v4._get2d().y);
  15. ctx.closePath();
  16. // ctx.fillStyle = "rgba("+parseInt(Math.random()*255)+","+parseInt(Math.random()*255)+","+parseInt(Math.random()*255)+",0.2)";
  17. ctx.fillStyle = this.color;
  18. ctx.fill();
  19. }
  20. }


  最后是立方体本身对象:

  因为立方体最后要旋转,所以,立方体对象里面不仅有面对象,还要有点对象,点旋转后才会引起面的旋转。length是立方体的边长,_initVector是初始化立方体的各个顶点,_draw方法就是把所有点形成面,将面放入数组,然后对面进行排序(就是根据面里的zIndex排序),排序好后,调用每个面里的draw方法。立方体就出来了。

  1. var Cube = function(length){
  2. this.length = length;
  3. this.faces = [];
  4. this.vectors = [];
  5. }
  6. Cube.prototype = {
  7. _initVector:function(){
  8. this.vectors[0] = new Vector(-this.length/2 , -this.length/2 , this.length/2);
  9. this.vectors[1] = new Vector(-this.length/2 , this.length/2 , this.length/2);
  10. this.vectors[2] = new Vector(this.length/2 , -this.length/2 , this.length/2);
  11. this.vectors[3] = new Vector(this.length/2 , this.length/2 , this.length/2);
  12. this.vectors[4] = new Vector(this.length/2 , -this.length/2 , -this.length/2);
  13. this.vectors[5] = new Vector(this.length/2 , this.length/2 , -this.length/2);
  14. this.vectors[6] = new Vector(-this.length/2 , -this.length/2 , -this.length/2);
  15. this.vectors[7] = new Vector(-this.length/2 , this.length/2 , -this.length/2);
  16. },
  17. _draw:function(){
  18. this.faces[0] = new Face(this.vectors[0] , this.vectors[1] , this.vectors[3] , this.vectors[2] , "#6c6");

您可能想查找下面的文章:

相关文章

  • 2018-12-03如何设置H5的表单验证失败提示语
  • 2018-12-03H5移动端图片压缩上传开发流程
  • 2017-08-06html5-Canvas可以在web中绘制各种图形
  • 2017-08-06简单的HTML5初步入门教程
  • 2018-12-03input元素的url类型和email类型简介_html5教程技巧
  • 2018-12-03自己动手打造html5星际迷航的示例代码分享
  • 2018-12-03HTML5本地存储之Database Storage应用介绍_html5教程技巧
  • 2018-12-03用localStorage实现记住密码的功能
  • 2018-12-03HTML页面中添加Canvas标签示例_html5教程技巧
  • 2017-08-06Html5无刷新修改browser Url的方法

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • html5中关于volume属性的使用详解
    • 微信中打开网页,下拉会显示网页由XXX提供,但是有些网页却没有,不同平台不同手机也不一样,这是什么原因?
    • HTML5新增加标签和功能概述
    • html5 command标签的用法和<command>标签的使用案例详解
    • 在H5页面中怎样调用APP
    • Html5拖放的实现方法
    • html5获取手机GPS信息的示例代码
    • html5成Web开发者最关心的技术
    • 解析HTML5应用程序缓存Application Cache
    • H5手机端图片上传插件代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有