访问地址:http://www.cnblogs.com/shawn-xie/archive/2012/08/16/2642553.html

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>lesson1-by-shawn.xie</title><!--引入Three.js--><script src="Three.js"></script><style type="text/css">div#canvas-frame{border: none;cursor: move;width: 1400px;height: 600px;background-color: #EEEEEE;}</style></head><body><!--盛放canvas的容器--><div id="container"></div></body>
</html>

准备和画布框大小一致的领域用于WebGL绘制。 具体来说:

(1) body 标签中添加 id 为「canvas3d」的 div 元素。

(2) style 标签中指定 「canvas3d」的CSS样式。

需要注意的是,我们并不需要写一个<canvas>标签,我们只需要定义好盛放canvas的div就可以,canvas是three.js动态生成的!

下面我们开始写脚本,我们将通过以下五步构建一个简单的立体模型,这也是three.js的基本步骤:

1.设置three.js渲染器

三维空间里的物体映射到二维平面的过程被称为三维渲染。 一般来说我们都把进行渲染操作的软件叫做渲染器。 具体来说要进行下面这些处理。

(0) 声明全局变量(对象);

(1) 获取画布「canvas-frame」的高宽;

(2) 生成渲染器对象(属性:抗锯齿效果为设置有效);

(3) 指定渲染器的高宽(和画布框大小一致);

(4) 追加 【canvas】 元素到 【canvas3d】 元素中;

(5) 设置渲染器的清除色(clearColor)。

//开启Three.js渲染器
var renderer;//声明全局变量(对象)
function initThree() {width = document.getElementById('canvas3d').clientWidth;//获取画布「canvas3d」的宽height = document.getElementById('canvas3d').clientHeight;//获取画布「canvas3d」的高renderer=new THREE.WebGLRenderer({antialias:true});//生成渲染器对象(属性:抗锯齿效果为设置有效)renderer.setSize(width, height );//指定渲染器的高宽(和画布框大小一致)document.getElementById('canvas3d').appendChild(renderer.domElement);//追加 【canvas】 元素到 【canvas3d】 元素中。renderer.setClearColorHex(0xFFFFFF, 1.0);//设置canvas背景色(clearColor)
}

2.设置摄像机camera

OpenGL(WebGL)中、三维空间中的物体投影到二维空间的方式中,存在透视投影和正投影两种相机。 透视投影就是、从视点开始越近的物体越大、远处的物体绘制的较小的一种方式、和日常生活中我们看物体的方式是一致的。 正投影就是不管物体和视点距离,都按照统一的大小进行绘制、在建筑和设计等领域需要从各个角度来绘制物体,因此这种投影被广泛应用。在 Three.js 也能够指定透视投影和正投影两种方式的相机。 本文按照以下的步骤设置透视投影方式。

(0) 声明全局的变量(对象);

(1) 设置透视投影的相机;

(2) 设置相机的位置坐标;

(3) 设置相机的上为「z」轴方向;

(4) 设置视野的中心坐标。

         //设置相机var camera;function initCamera() { camera = new THREE.PerspectiveCamera( 45, width / height , 1 , 5000 );//设置透视投影的相机,默认情况下相机的上方向为Y轴,右方向为X轴,沿着Z轴朝里(视野角:fov 纵横比:aspect 相机离视体积最近的距离:near 相机离视体积最远的距离:far)camera.position.x = 0;//设置相机的位置坐标camera.position.y = 50;//设置相机的位置坐标camera.position.z = 100;//设置相机的位置坐标camera.up.x = 0;//设置相机的上为「x」轴方向camera.up.y = 1;//设置相机的上为「y」轴方向camera.up.z = 0;//设置相机的上为「z」轴方向camera.lookAt( {x:0, y:0, z:0 } );//设置视野的中心坐标}

3.设置场景scene

场景就是一个三维空间。 用 [Scene] 类声明一个叫 [scene] 的对象。

        //设置场景var scene;function initScene() {   scene = new THREE.Scene();}

4.设置光源light

OpenGL(WebGL)的三维空间中,存在点光源和聚光灯两种类型。 而且,作为点光源的一种特例还存在平行光源(无线远光源)。另外,作为光源的参数还可以进行 [环境光] 等设置。 作为对应, Three.js中可以设置 [点光源(Point Light)] [聚光灯(Spot Light)] [平行光源(Direction Light)],和 [环境光(Ambient Light)]。 和OpenGL一样、在一个场景中可以设置多个光源。 基本上,都是环境光和其他几种光源进行组合。 如果不设置环境光,那么光线照射不到的面会变得过于黑暗。 本文中首先按照下面的步骤设置平行光源,在这之后还会追加环境光。

(0) 声明全局变量(对象)

(1) 设置平行光源

(2) 设置光源向量

(3) 追加光源到场景

这里我们用「DirectionalLight」类声明一个叫 [light] 的对象来代表平行光源

         //设置光源var light;function initLight() { light = new THREE.DirectionalLight(0xff0000, 1.0, 0);//设置平行光源light.position.set( 200, 200, 200 );//设置光源向量scene.add(light);// 追加光源到场景}

5.设置物体object

这里,我们声明一个球模型

         //设置物体var sphere;function initObject(){  sphere = new THREE.Mesh(new THREE.SphereGeometry(20,20),                //width,height,depthnew THREE.MeshLambertMaterial({color: 0xff0000}) //材质设定);scene.add(sphere);sphere.position.set(0,0,0);}

最后,我们写一个主函数执行以上五步:

        //执行function threeStart() {initThree();initCamera();initScene();   initLight();initObject();renderer.clear(); renderer.render(scene, camera);}

这时,测试以上程序,你会发现浏览器窗口中出现了你绘制的球形模型:

总结

以上就是three.js的入门内容,我们核心的五步就是:

1.设置three.js渲染器

2.设置摄像机camera

3.设置场景scene

4.设置光源light

5.设置物体object

在canvas上实现3D效果相关推荐

  1. 在canvas上绘制3d图形

    项目简介 文章里有相当多的用到中学数学中的知识,推导3d的几何模型是如何绘制到2d平面中去的,最终利用推导出的结论编写代码,实现一个波纹的demo 转载自:https://www.jianshu.co ...

  2. android 3d渲染动画效果吗,Android如何实现3D效果

    前言 前段时间读到一篇文章,作者通过自定义View实现了一个高仿小米时钟,其中的3D效果很是吸引我,于是抽时间学习了一下,现在总结出来,和大家分享. 正文 想要在Android上实现3D效果,其实并没 ...

  3. Canvas实现3D效果-可旋转的立方体

    摘要:Canvas画布是一个二维平面,如何展示出3D效果?通过将三维空间中的Z轴抽取出来,将图像的点投影到与Z轴垂直的平面上,在通过旋转等变换效果,我们就能实现3D效果. 一.建立坐标系 1)立方体坐 ...

  4. 前端实现图片快速反转替换_在canvas上实现元素图片镜像翻转动画效果的方法

    一.Canvas图片水平镜像翻转效果预览 demo页面中点击图片动画效果可见. 二.Canvas上实现图片镜像翻转的实现 CSS中要想实现元素的翻转效果,比较简单,例如我们希望某一张图片水平镜像翻转, ...

  5. flash图片如何镜像翻转_在canvas上实现元素图片镜像翻转动画效果的方法

    这篇文章主要介绍了在canvas上实现元素图片镜像翻转动画效果的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧! 一.Canvas图片水平镜像翻转效果预览 ...

  6. php3D动画,html5的canvas实现几何模型3D运动动画效果

    html5的canvas实现几何模型3D运动动画效果 JS片段: var {atan2,sqrt,sin,cos,PI,acos} = Math; function project3D(x,y,z,v ...

  7. 用Canvas画布展示出3D效果的网页源码

    大家好,今天给大家介绍一款,用Canvas画布展示出3D效果的网页源码(图1).送给大家哦,获取方式在本文末尾. 图1 每次点击页面中间的卡片,就会触发3d旋转特效(图2) 图2 源码预览, < ...

  8. canvas使用Ajax上传图片PHP,使用ajax上传图片,并且使用canvas实现出上传进度效果...

    前端代码: 使用ajax上传图片,并使用canvas实现出上传进度效果 #myImg { border: 1px solid gray; border-radius: 8px; position: a ...

  9. canvas绘制城市3D模型效果

    下载地址canvas绘制城市3D模型效果HTML5代码,款3D酷炫的城市建筑模型,鼠标长按或拖动穿过建筑模型动画特效. dd:

最新文章

  1. Facebook AI新架构:全景FPN,同时完成图像实例与语义分割 | 极客头条
  2. Pytorch交叉熵损失函数torch.nn.functional as F
  3. 中石油在意大利加油站0.5分/升,会不会赔死啊?
  4. 抛物线、导弹线轨迹计算
  5. 我在开发中所遇到的iOS7新特性以及iOS7与iOS6的适配问题总结
  6. 2019写给对象的话_数组方法写给女友的一系列 JS 数组操作(建议收藏 | 内附思维导图)...
  7. BZOJ 1078: [SCOI2008]斜堆
  8. 智慧旅游监管平台建设方案
  9. 笔记本拆机后无法开机是什么原因
  10. docx文档文字怎么加边框,word文档中设置边框的方法步骤
  11. 机器学习六步曲——“小马医生”养成记
  12. 长江存储一笔高额投资,让SK海力士开始钻研我国专利法
  13. error超频 whea win10_win10蓝屏whea_uncorr修复
  14. vsc 代码另起一行_VSCode 快捷键大全
  15. C51单片机实现串口通信
  16. 视觉软件 VisionPro 定位引导3(卡尺CogFindLineTool工具以及辅助工具)
  17. 2019年Java程序员的学习路线
  18. python语法基础-cPickle.dump使用
  19. BGP------BGP工作原理、BGP属性及选路原则
  20. Linux——MySQL高可用-PXC架构

热门文章

  1. 极坐标梯度公式_一种基于极坐标系梯度变化的类圆环边缘检测方法与流程
  2. 原始经纬度转百度地图定位并显示地理位置
  3. 如何使用夜神模拟器开发android
  4. Transact -SQL 语句
  5. 蓝牙室内定位技术系统应用场景解读
  6. 机器视觉——入门基础(一)—— 相机篇
  7. PHP的优势是什么?
  8. 冲压模具中的回弹解决办法
  9. 服务器不能全屏显示,远程服务器如何全屏显示
  10. java 载入类的三种方法