全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Three.js基础部分学习

一、关于使用Three.js几点理论说明

1.请参考官网地址 https://threejs.org/

2.使用three.js必备条件  <场景 A scene、相机a camera、渲染器 a renderer  三者缺一不可>

To actually be able to display anything with Three.js, we need three things: A scene, a camera, and a renderer so we can render the scene with the camera.

3.场景 A scene、相机a camera、渲染器 a renderer 三者之间的关系  <渲染器的作用就是将相机拍摄下来的图片,放到浏览器中去显示>

三、案例使用Three.js绘制旋转立方体

实现效果图如下所示

案例案例源码

<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title>用threejs构建室内模型</title>
 <style>
 #canvas-frame {
 width: 100%;
 height: 600px;
 }
 </style>
 </head>
 <body onload="threeStart()">
 <div id="canvas-frame" ></div>
 </body>
 <script type="text/javascript" src="./lib/three.js" ></script>
 <script type="text/javascript">
 var renderer, //渲染器
 width = document.getElementById('canvas-frame').clientWidth, //画布宽
 height = document.getElementById('canvas-frame').clientHeight; //画布高
 //初始化渲染器
 function initThree(){
 renderer = new THREE.WebGLRenderer({
 antialias : true
 //canvas: document.getElementById('canvas-frame')
 });
 renderer.setSize(width, height);
 renderer.setClearColor(0xFFFFFF, 1.0);
 document.getElementById('canvas-frame').appendChild(renderer.domElement);
 renderer.setClearColor(0xFFFFFF, 1.0);
 }
 //初始化场景
 var scene;
 function initScene(){
 scene = new THREE.Scene();
 }
 var camera;
 function initCamera() { //透视相机
 camera = new THREE.PerspectiveCamera(45, width/height , 1, 10000);
 camera.position.x = 50;
 camera.position.y = 150;
 camera.position.z =150;
 camera.up.x = 0;
 camera.up.y = 1; //相机朝向--相机上方为y轴
 camera.up.z = 0;
 camera.lookAt({ //相机的中心点
 x : 0,
 y : 0,
 z : 0
 });
 // camera 正交相机
 /*camera = new THREE.OrthographicCamera(-300, 300, 100, -100, 1, 10000);
 camera.position.x = 250;
 camera.position.y = 100;
 camera.position.z = 1800;
 camera.up.x = 0;
 camera.up.y = 1; //相机朝向--相机上方为y轴
 camera.up.z = 0;
 camera.lookAt({ //相机的中心点
 x : 0,
 y : 0,
 z : 0
 });*/
 }
 function initLight(){
 // light--这里使用环境光
 //var light = new THREE.DirectionalLight(0xffffff); /*方向性光源*/
 //light.position.set(600, 1000, 800);
 var light = new THREE.AmbientLight(0xffffff); //模拟漫反射光源
 light.position.set(600, 1000, 800); //使用Ambient Light时可以忽略方向和角度,只考虑光源的位置
 scene.add(light);
 }
 function initObject(){ //初始化对象
 //初始化地板
 initFloor();
 }
 function initGrid(){ //辅助网格
 var helper = new THREE.GridHelper( 1000, 50 );
 helper.setColors( 0x0000ff, 0x808080 );
 scene.add( helper );
 }
 function initFloor(){
 //创建一个立方体
 var geometry = new THREE.BoxGeometry(80, 20, 80);
 for ( var i = 0; i < geometry.faces.length; i += 2 ) {
 var hex = Math.random() * 0xffffff;
 geometry.faces[ i ].color.setHex( hex );
 geometry.faces[ i + 1 ].color.setHex( hex );
 }
 var material = new THREE.MeshBasicMaterial( { vertexColors: THREE.FaceColors} );
 //将material材料添加到几何体geometry
 var mesh = new THREE.Mesh(geometry, material);
 mesh.position = new THREE.Vector3(0,0,0);
 scene.add(mesh);
 }
 //初始化页面加载
 function threeStart(){
 //初始化渲染器
 initThree();
 //初始化场景
 initScene();
 //初始透视化相机
 initCamera();
 //初始化光源
 initLight();
 //模型对象
 initObject();
 //初始化网格辅助线
 initGrid();
 renderer.render(scene, camera);
 //实时动画
 //animation();
 }
 function animation(){
 //渲染成像
 var timer = Date.now()*0.0001;
 camera.position.x = Math.cos(timer)*100;
 camera.position.z = Math.sin(timer)*100;
 camera.lookAt(scene.position);
 renderer.render(scene, camera);
 requestAnimationFrame(animation);
 }
 </script>
</html>

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

二.关于上述案例中PerspectiveCamera透视相机注意点说明

  1. 照相机默认的观察方向是指向z轴负方向(就是朝向屏幕),所以当变化坐标以后,就要将照相机指向原点,才能观察到物体。

  2.利用 lookAt 方法来设置相机的视野中心「lookAt()」的参数是一个属性包含中心坐标「x」「y」「z」的对象。

  3.案例中使用透视相机(从视点开始越近的物体越大、远处的物体绘制的较小的一种方式、和日常生活中我们看物体的方式是一致的。)

  4.设置相机的上方向为正方向y轴 camera.up.x = 0; camera.up.y = 1; //相机朝向--相机上方为y轴camera.up.z = 0;

camera.up.x = 0;
camera.up.y = 1; //相机朝向--相机上方为y轴
camera.up.z = 0;

三.关于透视相机相关参数说明

new THREE.PerspectiveCamera(fov, aspect , near,far)  透视相机

  视野角:fov 这里视野角(有的地方叫拍摄距离)越大,场景中的物体越小,视野角越小,场景中的物体越大

  纵横比:aspect

  相机离视体积最近的距离:near

  相机离视体积最远的距离:far

上述案例动画原理  相机围绕y轴旋转,并且保持场景中的物体一直再相机的视野中,实时将相机拍摄下来的图片,放到浏览器中去显示

function animation(){
 //相机围绕y轴旋转,并且保持场景中的物体一直再相机的视野中
 //实时渲染成像
 var timer = Date.now()*0.0001;
 camera.position.x = Math.cos(timer)*100;
 camera.position.z = Math.sin(timer)*100;
 camera.lookAt(scene.position);
 renderer.render(scene, camera);
 requestAnimationFrame(animation);
}

四.渲染器  三维空间里的物体映射到二维平面的过程被称为三维渲染。 一般来说我们都把进行渲染的操作叫做渲染器。

【参考资料】 

   http://www.hewebgl.com/article/getarticle/50

   http://www.xyhtml5.com/threejs-star-moving-particles.html

   https://read.douban.com/reader/ebook/7412854/

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# Three.js  # Three.js快速入门教程  # Three.js基础学习教程  # JS库之Three.js 简易入门教程(详解之一)  # three.js安装和使用完整步骤  # 渲染器  # 方为  # 越大  # 景中  # 中心点  # 中去  # 越小  # 是一个  # 几点  # 被称为  # 所示  # 要将  # 较小  # 一个叫  # 参考资料  # 方法来  # 都把  # 创建一个  # 请参考  # 官网 


相关文章: 如何通过NAT技术实现内网高效建站?  制作网站的软件免费下载,免费制作app哪个平台好?  如何获取PHP WAP自助建站系统源码?  微信推文制作网站有哪些,怎么做微信推文,急?  如何有效防御Web建站篡改攻击?  如何快速生成凡客建站的专业级图册?  模具网站制作流程,如何找模具客户?  建站主机如何安装配置?新手必看操作指南  5种Android数据存储方式汇总  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  香港服务器WordPress建站指南:SEO优化与高效部署策略  建站主机选购指南:核心配置优化与品牌推荐方案  C#怎么使用委托和事件 C# delegate与event编程方法  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  如何零基础开发自助建站系统?完整教程解析  如何用PHP工具快速搭建高效网站?  建站之星上传入口如何快速找到?  如何在建站之星绑定自定义域名?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  制作网站的公司有哪些,做一个公司网站要多少钱?  如何在阿里云购买域名并搭建网站?  建站之星如何快速生成多端适配网站?  如何快速搭建虚拟主机网站?新手必看指南  建站主机是否属于云主机类型?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  如何选择高效可靠的多用户建站源码资源?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  建站之星云端配置指南:模板选择与SEO优化一键生成  建站之星24小时客服电话如何获取?  宝塔面板创建网站无法访问?如何快速排查修复?  如何选购建站域名与空间?自助平台全解析  香港服务器选型指南:免备案配置与高效建站方案解析  制作销售网站教学视频,销售网站有哪些?  南京网站制作费用,南京远驱官方网站?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  广州美橙建站如何快速搭建多端合一网站?  如何用免费手机建站系统零基础打造专业网站?  全景视频制作网站有哪些,全景图怎么做成网页?  如何在宝塔面板创建新站点?  如何用y主机助手快速搭建网站?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  如何在万网自助建站平台快速创建网站?  如何在新浪SAE免费搭建个人博客?  魔方云NAT建站如何实现端口转发?  如何在搬瓦工VPS快速搭建网站?  如何构建满足综合性能需求的优质建站方案? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。