【WebGL】2.基础概念
引入Three.js
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<script src="https://raw.github.com/mrdoob/three.js/master/build/three.js"></script>
</body>
</html>
三大要素:场景,相机和渲染器
场景:动画中的容器,所有物体都存在于一个场景当中,三维中的场景类似与二维动画中的canvas
相机:一个视角,对场景进行拍摄,通过切换位置和角度能拍摄到不同的景象
渲染器:将相机拍摄的内容渲染到浏览器中,最终用户是通过浏览器看到相机的景象的
他们之间的关系如图:

创建一个场景:var scene = new THREE.Scene();
创建一个相机:var camera = new THREE.PerspectiveCamera(60, window.innerWidth/window.innerHeight, 0.1, 1000);
创建一个渲染器: var renderer = new THREE.WebGLRenderer();
相机具体参数我们后面会详细介绍
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(60, window.innerWidth/window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
右手坐标系:WebGL采用右手坐标系,在二维坐标的基础上新增了Z轴,方向为从屏幕内到屏幕外垂直方向,如果左边为左手坐标系,右边是右手坐标系,WebGL采用的是右边图

点,线,面:
在三维世界中,三维坐标中的一个点确定一个位置,两点连接组成一条线,而多个点就形成一个平面或者多面形状,这种网格模型称为Mesh模型,

第一个例子,画一条线:
WebGL中创建一个物体需要3步:
1.创建一个几何体
2.为几何体创建材质
3.创建网格
4.将网格添加到场景中
var geometry = new THREE.CubeGeometry(1,1,1);//几何体
var material = new THREE.MeshBasicMaterial({color: 0x00ff00});//材质
var cube = new THREE.Mesh(geometry, material); //网格
scene.add(cube);
WebGL中点由Vector3方法创建
Vector3(x,y,z);//参数分别为x,y和z轴坐标
创建直线由几何体geometry的vertices来存放点,colors来存放顶点的颜色
var geometry = new THREE.Geometry();//定义几何体
var material = new THREE.LineBasicMaterial( { vertexColors: true } );//定义材质
var color1 = new THREE.Color( 0x111111 ), color2 = new THREE.Color( 0x555555 ); var point1 = new THREE.Vector3( -50, 0, 50 );
var point2 = new THREE.Vector3( 0, 0, -100 );
geometry.vertices.push(point1);//来存放点
geometry.vertices.push(point2);
geometry.colors.push( color1, color2 );//设置顶点的颜色 var line = new THREE.Line( geometry, material, THREE.LinePieces );
scene.add(line);
最后加上上面的创建场景,场景摄像机,光线等等,最终例子如下
var camera,renderer,light;
var scene = new THREE.Scene(); function init() {
width = document.getElementById('canvas-frame').clientWidth;
height = document.getElementById('canvas-frame').clientHeight;
renderer = new THREE.WebGLRenderer({
antialias : true//抗锯齿,平滑
});
renderer.setSize(width, height);
document.getElementById('canvas-frame').appendChild(renderer.domElement);
renderer.setClearColorHex(0xFFFFFF, 1.0);
} function initCamera() {
camera = new THREE.PerspectiveCamera(60, width / height, 1, 10000);
camera.position.x = 0;
camera.position.y = 500;
camera.position.z = 0;
camera.up.x = 0;
camera.up.y = 0;
camera.up.z = 1;
camera.lookAt({
x : 0,
y : 0,
z : 0
});
} function initLight() {
light = new THREE.DirectionalLight(0x110000, 1.0, 0);
scene.add(light);
} function initObject() { var geometry = new THREE.Geometry();
var material = new THREE.LineBasicMaterial( { vertexColors: true } );
var color1 = new THREE.Color( 0x444444 ), color2 = new THREE.Color( 0xFF0000 ); var point1 = new THREE.Vector3( -50, 0, 50 );
var point2 = new THREE.Vector3( 0, 0, -100 );
geometry.vertices.push(point1);
geometry.vertices.push(point2);
geometry.colors.push( color1, color2 ); var line = new THREE.Line( geometry, material, THREE.LinePieces );
scene.add(line);
} init();
initCamera();
initLight();
initObject();
renderer.clear();
renderer.render(scene, camera);
【WebGL】2.基础概念的更多相关文章
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- TCP/IP基础概念及通信过程举例
TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...
- Jmeter基础之---jmeter基础概念
Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...
- 快速入门系列--WCF--01基础概念
转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...
- 理解 angular2 基础概念和结构 ----angular2系列(二)
前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...
- JavaBean 基础概念、使用实例及代码分析
JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没 ...
- RabbitMQ基础概念详细介绍
http://blog.csdn.net/column/details/rabbitmq.html 转至:http://www.ostest.cn/archives/497 引言 你是否遇到过两个(多 ...
- linux设备驱动归纳总结(二):模块的相关基础概念【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59415.html linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10 ...
- linux设备驱动归纳总结(一)内核的相关基础概念【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-59413.html linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxx ...
- 什么是JavaScript闭包终极全解之一——基础概念
本文转自:http://www.cnblogs.com/richaaaard/p/4755021.html 什么是JavaScript闭包终极全解之一——基础概念 “闭包是JavaScript的一大谜 ...
随机推荐
- 什么是Java中的原子操作( atomic operations)
1.啥是java的原子性 原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行. 一个很经典的例子就是银行账户转账问题: 比如从账户A向账户B转1000元,那么 ...
- 利用arcgis制作出 源解析要用的ASCII文件
准备:1.确定好模拟区域范围,精度,行列数 2.确定好源解析的城市规划 思路: 1.全国省级图+本地市县图-->合成一张区域图(联合) 合成之后,添加一个字段,一个数字类型字段 ...
- C++ 单链表的实现
#ifndef LINKEDLIST_H #define LINKEDLIST_H #define MAXLEN 256 template <class T> struct LinkedL ...
- Kafka学习之(三)Centos下给PHP开启Kafka扩展(rdkafka)
Centos版本:Centos6.4,PHP版本:PHP7. 在上一篇文章中使用IP为192.168.9.154的机器安装并开启了Kafka进行了简单测试,充当了Kafka服务器. 本篇文章新开启一台 ...
- hadoop HA+kerberos HA集群搭建
IP.主机名规划 hadoop集群规划: hostname IP hadoop 备注 hadoop1 110.185.225.158 NameNode,ResourceManager,DFSZKFai ...
- [Linux 002]——Linux的常用命令
经过前面的学习,大概了解了计算机组成原理和操作系统的一些知识.尽管这些知识都是琐碎的,拼凑的,在以后的工作和学习中仍需进行深入的了解.但是这些预备知识对于准备跨入 Linux 大门的童鞋来说,应该是足 ...
- MR案例:倒排索引
1.map阶段:将单词和URI组成Key值(如“MapReduce :1.txt”),将词频作为value. 利用MR框架自带的Map端排序,将同一文档的相同单词的词频组成列表,传递给Combine过 ...
- DispatcherServlet讲解
1.1.1.DispatcherServlet作用DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring I ...
- springboot Actuator健康检查
通过情况下,如我们想在系统中添加一个健康检查的接口,我们怎么做呢? 我们会新建一个类,或在已存在类的基础上添加检测接口. package com.crhms.medicareopinion; impo ...
- 缓存技术内部交流_04_Cache Aside续篇
额外参考资料: http://www.ehcache.org/documentation/3.2/expiry.html F. Cache Aside 模式的问题:缓存过期 有时我们会在上线前给缓存系 ...