three.js学习计划(一)
来源:互联网 发布:淘宝几点发布宝贝最好 编辑:程序博客网 时间:2024/04/30 00:33
最近因为课题的原因要学习一下three.js,说实话,以前并没有接触过3D图形的编程,直接去看three.js的时候还是有点头皮发麻的,想着3D图形编程一定是难的要死要死的,可是没想到各位大神把底层图形封装的这么好,连我这种js新手加图形学白痴也能很好的阅读编写three.js的实例代码。
既然要学习一样新的东西,最好稍微了解一下它的历史渊源,这样不仅在学习的时候更加稳健,也能让你在跟大牛交流的时候不至于一头雾水。
three.js是什么,即使在three.js的github项目页上页只有短短的几句介绍,three.js是一个JavaScript编写的3D图形库,提供了<canvas>,<svg>
,CSS3D和WebGL的渲染器。
three.js是托管在github上的一个开源项目,时至今日(2015-12-15)已经有519名代码贡献者。虽然在three.js的网站上提供了很多的基于three.js开发的实例,然而three.js的文档实在是不友好,只是简单的一个入门例子然后就是API,所以要学习three.js还是要去读官方实例的源代码,并且自己逐字逐句的来敲代码,做注释。
要使用three,js,首先要在你的html页面中引入它,通常我们只是使用不做调试的话直接引用three.min.js即可,引用three.js只需要一个简单的<script>
标签。
<script src="/you/path/to/three.min.js"><script>
在网页中引入three.js后你可以在网页控制台输入THREE.REVISION来查看版本信息,这里推荐chrome浏览器。
THREE.REVISION"73"
我使用的是73版本的three.js
现在我们可以访问到THREE下的所有方法和变量了。
下面我们先来建立一个HTML标签页
<!DOCTYPE html><html lang="zh"><head> <meta charset="UTF-8"> <title>My first three.js app</title> <script type="text/javascript" src="you/path/to/three.min.js"></script></head><body id="canvas-frame"> <script type="text/javascript"> // 在这里写js代码 </script></body></html>
一个典型的three.js应用至少要包含渲染器(renderer)、场景(scene)、和相机(camera)三个组件。接下来就让我们来初始化这些组件。
<script type="text/javascript"> var scene, renderer, camera; init(); function init(){ // 初始化一个场景 scene = new THREE.Scene(); // 初始化一个渲染器,这里选择了WebGL渲染器,并且开启可抗锯齿效果 renderer = new THREE.WebGLRenderer({antialias: true}); // 设置渲染器的款和高,这里由于要canvas占据整个屏幕,所以使用了窗口尺寸 renderer.setSize(window.innerWidth, window.innerHeight); // 下面一行代码将生成一个canvas标签插入到body中 document.body.appendChild(renderer.domElement); /× 初始化一个相机,选取的是透视相机 相机的四个参数分别是: 视角or视场: 类似于人眼可以看到90-110度的视场,相机也有一个类似的参数设置,关于这个数值的设定也是有很多的博客文章可以去查看 宽高比:定义了你看到的屏幕的比例 近端和远端:定义了相机可以看到物体的距离,超过这个距离渲染器就不会对物体进行渲染了 ×/ camera = new THREE.PresectiveCamera(75, window.innerWidth / window.innerHeight, 1, 10000); // 设置相机位置为z轴偏移量为5 camera.position.set(0,0,5); // 不要忘记把相机添加到场景中去 scene.add(camera); // 代码占位... }; </script>
现在场景有了,相机有了,渲染器也有了,现在要做的就是在场景中添加自己的景色,说白了,就是在场景中放个物体,然后我们就开始盯着它看呀看呀看
那么,是时候将物品放进去了。
我们创建物体的代码依旧是在我们的init函数中进行的,创建一个物体分为三个步骤,首先创建一个几何体,然后选择构建表面的材质,最后将几何体参数和材质参数传递给三维网格系统,three.js会自动帮你生成你想要的形状。一下是代码实例:
<script> function init(){ // 接上段代码 var geometry, material, mseh; // 创建一个盒子几何体 geometry = new THREE.BoxGeometry(1,1,1); // 基本材质渲染,设置颜色,启用线框 material = new THREE.MeshBasicMarterial({color: 0xff0000, wireframe: true}); // 生成物体 mesh = new THREE.Mesh(geometry, material); // 记得把物体添加到场景中 scene.add(mesh); };// 代码占位</script>
现在所有的准备工作都已经经行完毕,接下来要做的就是用渲染器把刚刚做好的东西交给浏览器去渲染。接下来定义一个新的函数
function animate(){ requestAnimationFrame(animate); // 代码占位 renderer.render(scene, camera);};
写完这个函数之后,在body标签中加入onload时间,即可在网页中看到结果。
<body id="canvas-frame" onload="animate()"> <script> //我们的代码 </script></body>
现在我们在浏览器中可以看到如下样子
这是一个静止的线条化的立方体,接下来要做的就是让它动起来!!
让一个物体动起来可以采用两种方式,一种是让物体自己运动,还有一种就是我们的眼睛运动,在这里也就是相机运动,或者可以相机跟物体都动-_-
//修改一下animate函数,让立方体动起来function animate(){ requestAnimationFrame(animate); // 物体旋转 mesh.rotation.x += 0.1; mesh.rotation.y += 0.1; // 相机移动 camera.position.y += 0.01; renderer.render(scene, camera);};
最后在浏览器中我们可以看到立方体一边旋转一边下落的动画效果。
- three.js学习计划(一)
- Three.js学习计划(二)
- three.js 源码注释(一)./Three.js
- THREE.js 学习笔记(一)
- THREE.JS场景基本组件(一)
- three.js学习笔记(一)-DirectionalLight
- three.js入门篇(一)
- Three.js学习笔记(一)
- Three.js(一)LOD多细节层次
- Three.js 学习记录 之 几何体(一)
- 我的three.js学习记录(一)
- 学习计划(一)
- 学习计划(一)
- Three.js WebGL 绘制流程(一)
- 啃书一本Three.js开发指南
- swfit学习计划(一)基础
- THREE.js-照相机(Camera)
- THREE.js-几何体(Geometry)
- 如何设置控件聚焦和手动获取焦点
- 将IPA放到服务器提供下载
- Linux ORACLE清理、截断监听日志文件(listener.log)
- linux shell用法(5)-- 日期显示(2)
- Android中的windowSoftInputMode杂谈
- three.js学习计划(一)
- 【剑指offer】之字符串的排列
- 数据处理memo
- java split 报错java.lang.ArrayIndexOutOfBoundsException
- 谷歌推出最新图像识别工具
- hdu 1269(Tarjan求强连通分量)
- CAAniamtion显示动画详解
- Genimotion 解决 INSTALL_FAILED_CPU_ABI_INCOMPATIBLE问题
- C++操作word:插入文字、图片、表格,设置样式字体