在之前因为项目需要使用WebGL技术做网页应用,但是苦于自己没有接触,只是使用过OpenGL。然后接触到了thre.js这个第三方库之后我突然心情很愉快,这将节省我很多时间。

过了这个项目之后,就再也没有看过它了,最近翻开我的个人记录发现了在角落边缘堆尘的three.js决定再看一下,然后记录下来以便以后翻看,毕竟多一个技能也挺好的。

three.js简介

three.js是JavaScript编写的WebGL第三方库。提供了非常多的3D显示功能。

Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机、光影、材质等各种对象。你可以在它的主页上看到许多精彩的演示。不过,这款引擎目前还处在比较不成熟的开发阶段,其不够丰富的 API 以及匮乏的文档增加了初学者的学习难度(尤其是文档的匮乏)three.js的代码托管在github上面。

这个项目的目标是创建一个易于使用的,轻量级,3 d库。这个库提供<canvas>,< svg >,CSS3DWebGL渲染器。

以上来自百度百科和Github上面的简介(如果我没有翻译错)

https://baike.baidu.com/item/three.js/7896801?fr=aladdin

https://github.com/mrdoob/three.js/blob/dev/README.md

本人入门three.js时的链接地址

http://www.hewebgl.com/

https://threejs.org/examples/

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

https://www.qcloud.com/community/article/924964?fromSource=gwzcw.149972.149972.149972

http://www.ituring.com.cn/book/1272

http://www.cnblogs.com/zjf-1992/p/6276779.html

http://www.cnblogs.com/amy2011/

基础知识

首先三维的存在需要有一个空间可以让我们的物体加载进去,这就是我们three.js中的场景(scene),这个是我们三维的空间,比如我们画一个立方体,画完了就放在这个场景中给渲染出来。

除了一个空间,当然还要一个摄像机(camera),这个相当于我们的眼睛,我们能看到东西不仅仅是因为它的存在,而是我们还看到了,这点很重要,但是在three.js中照相机的坐标表示是使用的右手坐标

当然了看的到的也需要真实的存在,这里就需要我们加入物体。

加入了物体之后就需要我们渲染出我们的这个三维世界了,这里就需要用到我们的渲染器(renderer)它可以将我们的场景渲染出来

入门之一个点

经过以上的陈述自己也知道有些什么是必备的,所以现在我们来画出一个点

初始化渲染器

			var renderer, width = window.innerWidth, height = window.innerHeight;

			 //创建一个div可供放置渲染器
var container = document.createElement('div');
//将这个div置入body
document.body.appendChild(container);
//新建渲染器,其中设置antialias为true
renderer = new THREE.WebGLRenderer({
antialias: true //这里是抗锯齿,比如我们看到一条斜线有很多跟锯子形状的齿,这里可以弱化那些锯齿
});
//设置渲染器的尺寸
renderer.setSize(width, height);
//将我们的渲染器嵌入之前创建的div容器
container.appendChild(renderer.domElement);
//设置渲染器的颜色(白色)以及alpha值(这里可以理解为透明度,颜色深浅)
renderer.setClearColor(0xFFFFFF, 1.0);

初始化相机

			var camera;
//这里采用了透视投影相机,看到的东西类似于人眼,越远越小
//参数1: fov 广角,也就是看到的平面的大小到你眼睛的角度,越大看到的越多
//参数2: aspect 平面的宽高比
//参数3: near 近处你可以看见的距离
//参数4: far 远处可以看见的距离
camera = new THREE.PerspectiveCamera(45, width / height, 1, 1000);
//设置相机的位置
camera.position.x = 0;
camera.position.y = 1000;
camera.position.z = 0;
//设置相机的朝向,z为1跟我们头朝上一样(这里是右手坐标系)
camera.up.x = 0;
camera.up.y = 0;
camera.up.z = 1;
//设置相机对焦的点,跟我们眼球盯住的点一样
camera.lookAt({
x: 0,
y: 0,
z: 0
});

初始化场景和点并渲染

var scene;
scene = new THREE.Scene();
//new THREE.CubeGeometry(5, 5, 5)确定我们的形状,这是一个几何体,画出来是正方形,这里我们用足够小的正方形表示一个点
//new THREE.MeshBasicMaterial({color: 0xFF0000})确定我们的材质
//new THREE.Mesh(geometry, material)这就是我们的物体了,这是用网格来体现的
//点成线,线成面,面成体Mesh就是由很多点线组成的
var point = new THREE.Mesh(new THREE.CubeGeometry(5, 5, 5), new THREE.MeshBasicMaterial({
color: 0xFF0000
}));
//向场景中添加物体point
scene.add(point);
//渲染场景
renderer.render(scene, camera);

这里的代码显得有点乱,不过具体的流程已经给出来了,并且有注释,入门应该是很方便的,最后我也会贴出代码

入门之一条线

画一条线跟一个点的差别不大,只需要改变创建物体的那一段代码就行,如下:

var geometry = new THREE.Geometry();
var material = new THREE.LineBasicMaterial({vertexColors: THREE.VertexColors});
var color1 = new THREE.Color(0x444444), color2 = new THREE.Color(0xFF0000); // 线的材质可以由2点的颜色决定
var p1 = new THREE.Vector3(-100, 0, 100);
var p2 = new THREE.Vector3(100, 0, -100);
geometry.vertices.push(p1);
geometry.vertices.push(p2);
geometry.colors.push(color1, color2); var line = new THREE.Line(geometry, material, THREE.LinePieces);
scene.add(line);

产品展示

经过奋战,入门了点和线之后结果如下显示

以上的代码已经上传Github

我的three.js学习记录(一)的更多相关文章

  1. 我的three.js学习记录(二)

    通过上一篇文章我的three.js学习记录(一)基本上是入门了three.js,但是这不够3D,这次我希望能把之前做的demo弄出来,然后通过例子来分析操作步骤. 1. 示例 上图是之前做的一个dem ...

  2. 我的three.js学习记录(三)

    此次的亮点不是three.js的3d部分,而是通过调用摄像头然后通过摄像头的图像变化进行简单的判断后进行一些操作.上篇中我通过简单的示例分析来学习three.js,这次是通过上一篇的一些代码来与摄像头 ...

  3. vue.js学习记录

    vue.js学习记录 文章已同步我的github笔记https://github.com/ymblog/blog,欢迎大家加star~~ vue实例 生命周期 beforeCreate:不能访问thi ...

  4. D3.js学习记录【转】【新】

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. JS学习记录------JS基本指令

    对未来的恐慌,和想成为一名自由开发的梦想.让我觉得应该点亮一个新的技能:WEB前端开发. 重新学习JS以及jQuery,让我在日常code的过程中可以更得心应手,毕竟,我爱代码. 这篇文章主要记录的内 ...

  6. python , angular js 学习记录【1】

    1.日期格式化 Letter Date or Time Component Presentation Examples G Era designator Text AD y Year Year 199 ...

  7. js 学习记录(一)

    前情提要: 本记录参照  <<javascript 入门导论>>  这本书学习 

  8. css,js 学习记录

    记录一些自己曾经阅读,值得收藏的网址 --(css3新特性) https://segmentfault.com/a/1190000010780991#articleHeader41 --CSS3 3D ...

  9. D3.js学习记录

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. poj 1986LCA离线dfs+并查集

    题意,给出边和权值,求出两个点间的最短距离. 用离线算法的时候有个地方不知道怎么处理了.在线的本来想用倍增的,但发现倍增算法貌似需要预处理深度而不是权值,不知道怎么处理.套一个rmq的模板吧,用来处理 ...

  2. Project 1 :创建链表与显示链表

    目标:创建一个链表,并将链表输出.结构体中包括学号与分数.链表以输入学号为0作为结束.输出模版为 No.学号 Score:分数 输入样例: 10101 98 10102 97 10103 100 10 ...

  3. cobbler部署安装CentOS6.8

    Linux运维:cobbler : 矮哥linux运维群:93324526 学习cobbler的话,必须先搞懂kickstart,原理不是,不懂如何排错. kickstart部署请点击这里 1. Co ...

  4. JAVA基础第二组(5道题)

    6.[程序6] 题目:输入两个正整数m和n,求其最大公约数和最小公倍数.        1.程序分析:利用辗除法. package com.niit.homework1; import java.ut ...

  5. 团队作业9——展示博客(Bata版本)

    1.团队成员介绍及项目地址 团队的源码仓库地址:https://coding.net/u/app24dian/p/app24dian/git 陈麟凤:(http://www.cnblogs.com/c ...

  6. 团队作业八——第二次团队冲刺(Beta版本)第4天

    团队作业八--第二次团队冲刺(Beta版本)第4天 一.每个人的工作 (1) 昨天已完成的工作 做一下用户注册的功能和登录功能. (2) 今天计划完成的工作 完成界面跳转 (3) 工作中遇到的困难 界 ...

  7. 团队作业8——Beta项目(冲刺计划)

    Beta阶段冲刺计划 经过几周的努力我们完成了Alpha的开发,进过一段时间的调整与重组我们继续向Beta版进发. 1. 新成员介绍 林乔桦(201421123074):掌握c语言,JavaScrip ...

  8. 201521123069 《Java程序设计》 第8周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 (1)泛型允许指定集合中元素的类型,在编译时就可以进行类型检查,避免运 ...

  9. 201521123071 《JAVA程序设计》第十四周学习总结

    第14周作业-数据库 1. 本周学习总结 1.1 以你喜欢的方式(思维导图.Onenote或其他)归纳总结多数据库相关内容. 1.使用JDBC将Java程序与数据库连接 1.1注册驱动 Class.f ...

  10. 201521123054 《Java程序设计》 第十周学习总结

    1. 本周学习总结 2. 书面作业 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 4-2中finally中捕获异常需要注意什么? 无论是否抛出异常,也无论从什么地方返回,finally语句 ...