一、关于使用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安装和使用完整步骤
# 渲染器
# 方为
# 越大
# 景中
# 中心点
# 中去
# 越小
# 是一个
# 几点
# 被称为
# 所示
# 要将
# 较小
# 一个叫
# 参考资料
# 方法来
# 都把
# 创建一个
# 请参考
# 官网
相关文章:
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
如何在宝塔面板创建新站点?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
c# 在ASP.NET Core中管理和取消后台任务
如何快速搭建安全的FTP站点?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
如何在VPS电脑上快速搭建网站?
定制建站流程解析:需求评估与SEO优化功能开发指南
广平建站公司哪家专业可靠?如何选择?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
C++如何使用std::optional?(处理可选值)
如何零基础在云服务器搭建WordPress站点?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
临沂网站制作公司有哪些,临沂第四中学官网?
深入理解Android中的xmlns:tools属性
宝塔建站助手安装配置与建站模板使用全流程解析
深圳网站制作案例,网页的相关名词有哪些?
大连网站设计制作招聘信息,大连投诉网站有哪些?
建站主机选虚拟主机还是云服务器更好?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
,在苏州找工作,上哪个网站比较好?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
Python lxml的etree和ElementTree有什么区别
XML的“混合内容”是什么 怎么用DTD或XSD定义
如何在阿里云域名上完成建站全流程?
制作网页的网站有哪些,电脑上怎么做网页?
如何通过山东自助建站平台快速注册域名?
深圳网站制作平台,深圳市做网站好的公司有哪些?
模具网站制作流程,如何找模具客户?
如何在万网自助建站平台快速创建网站?
七夕网站制作视频,七夕大促活动怎么报名?
建站之家VIP精选网站模板与SEO优化教程整合指南
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
如何在建站之星绑定自定义域名?
公司网站制作价格怎么算,公司办个官网需要多少钱?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
已有域名如何快速搭建专属网站?
如何快速重置建站主机并恢复默认配置?
javascript基本数据类型及类型检测常用方法小结
如何在腾讯云服务器快速搭建个人网站?
如何选择高效稳定的ISP建站解决方案?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
*请认真填写需求信息,我们会在24小时内与您取得联系。