引入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.基础概念的更多相关文章

  1. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  2. TCP/IP基础概念及通信过程举例

    TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...

  3. Jmeter基础之---jmeter基础概念

    Jmeter基础之---jmeter基础概念 JMeter 介绍: 一个非常优秀的开源的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. JMeter 介绍: 一个非常优 ...

  4. 快速入门系列--WCF--01基础概念

    转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...

  5. 理解 angular2 基础概念和结构 ----angular2系列(二)

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

  6. JavaBean 基础概念、使用实例及代码分析

    JavaBean 基础概念.使用实例及代码分析 JavaBean的概念 JavaBean是一种可重复使用的.且跨平台的软件组件. JavaBean可分为两种:一种是有用户界面的(有UI的):另一种是没 ...

  7. RabbitMQ基础概念详细介绍

    http://blog.csdn.net/column/details/rabbitmq.html 转至:http://www.ostest.cn/archives/497 引言 你是否遇到过两个(多 ...

  8. linux设备驱动归纳总结(二):模块的相关基础概念【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59415.html linux设备驱动归纳总结(二):模块的相关基础概念 系统平台:Ubuntu 10 ...

  9. linux设备驱动归纳总结(一)内核的相关基础概念【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-59413.html linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxx ...

  10. 什么是JavaScript闭包终极全解之一——基础概念

    本文转自:http://www.cnblogs.com/richaaaard/p/4755021.html 什么是JavaScript闭包终极全解之一——基础概念 “闭包是JavaScript的一大谜 ...

随机推荐

  1. Mysql中间件_haproxy在启动过程中报错_Starting proxy : cannot bind socket

    在搭建好haproxy准备启动中,使用service命令的方式启动没有报任何错误,但是监听服务发现并没有想象的顺利,搜索各种帖子,参考对照发现,发现一条新的命令,^_^,试着用下面命令启动,惊喜~发现 ...

  2. Tomcat的工作模式和运行模式

    (1)工作模式 Tomcat作为servlet容器,有三种工作模式: 1.独立的servlet容器,servlet容器是web服务器的一部分: 2.进程内的servlet容器,servlet容器是作为 ...

  3. WCF服务类的实例模式(本文为转载)

    WCF开发时如何选择正确的实例模式(InstanceMode)?   在使用WCF实例模型时,你是否思考过这几个的问题: ”WCF中的实例模式如何正确应用”? ”使用WCF中的实例模式有何原则可以遵循 ...

  4. pom.xml常用元素解析

    project 最外层元素 modelVersion 指定Maven模型的版本号,对于Maven2和Maven3,它只能是4.0.0 version 版本信息 groupId 包id,会生成相应路径 ...

  5. tsar的使用

    项目地址https://github.com/alibaba/tsar 安装 $ git clone git://github.com/kongjian/tsar.git $ cd tsar $ ma ...

  6. 转:eclipse与myeclipse恢复已删除的文件和代码

  7. codeforces 484B - LubaAndTicket - 贪心

    2017-08-22 10:54:00 writer:pprp 题意如下: 给你6个数组,你的操作可以是更改某一位的数字成为0-9之间任意一个数,要求前三个数字的和与后三个数字的和相等. 问你最少用几 ...

  8. MapReduce-实践2

    进阶实践4:  mapper,reducer输出数据压缩 应用场景 当mapper或者reducer的输出数量比较大,会影响shuffle阶段远程拷贝的网络性能,以及对存储容量的要求:这个时候可以考虑 ...

  9. 读书笔记: Microsot .NET企业级应用架构设计

    Microsot .NET企业级应用架构设计 Dino Esposito   Andrea Saltarello 编    陈黎夫 译   人民邮电出版社 第一部分 设计原则 第1章 当代架构师和架构 ...

  10. spring boot 之Rabbitmq 基本配置

    /* * Copyright (c) 2017 4PX Information Technology Co.,Ltd. All rights reserved. */package com.fpx.p ...