一、关于使用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小时内与您取得联系。