1.webGL

  一种网络标准,定义了一些较底层的图形接口。

2.Three.js

  一个3Djs库,webGL开源框架中比较优秀的一个。除了webGL以外,Three.js还提供了基于Canvas、SVG标签的渲染器。

  这是一个开源项目

3.环境

  找一个喜欢的jsIDE。调试建议使用Chrome或者Firefox。

4.下载

  传送门

5.使用

<head>

    <script type="text/javascript" src="js/three.js"></script>

</head>

  webGL的渲染需要canvas,Three.js可以生成,也可以自定义canvas:

<body onload="init()">

    <canvas id="mainCanvas" width="400px" height="300px" ></canvas>

</body>

在js中定义一个init函数,在HTML加载后执行:

function init(){

  // ...

}

  Three.js程序要包括三大组建:

  场景(Scene)、相机(Camera)、渲染器(Renderer),以及你创建的物体。

6.渲染器(Renderer)

  渲染器将和Canvas元素进行绑定,接着上面的:

var renderer = new THREE.WebGLRenderer({

    canvas: document.getElementById(‘mainCanvas’)

});

  如果想要Three.js生成Canvas元素,在HTML中就不需要定义canvas,在js中可以这样写:

var renderer = new THREE.WebGLRenderer();

renderer.setSize(400,300);

document.getElementsByTagName(‘body’)[0].appendChild(renderer.domElement);

  第二行设置了Canvas的宽高。第三行将渲染器对应的Canvas元素添加到<body>中。

  下面这句可以设置背景为黑色:

renderer.setClearColor(0x000000);

7.场景(Scene)

  在Three.js中添加的物体都是添加到场景中的。在程序最开始的时候进行实例化,然后将物体添加到场景中即可。

var scene = new THREE.Scene();

8.照相机(Camera)

  webGL和Three.js使用的坐标系是右手坐标系:

  相机分正投影相机和透视投影相机。这里先定义一直透视投影的照相机,:

var camera = new THREE.PerspectiveCamera(45,4/3,1,1000);

//四个参数分别对应:视角、近处的裁面的距离、远处的裁面的距离、实际窗口的纵横比(后面会详细讨论)

camera.position.set(0,0,5);//设置相机位置

scene.add(camera);//添加到场景中。

9.长方体

  创建一个x,y,z方向长度分别为1、2、3的红色长方体:

var cube = new THREE.Mesh(new THREE.CubeGeometry(1,2,3),

  new THREE.MeshBasicMaterial({
 
    color: 0xff0000   }) ); scene.add(cube);

  其中,THREE.Mesh表示网格模型;THREE.CubeGeometry表示立方体盒子;MeshBasicMaterial是一种材质:对光照无感,给几何体一种简单的颜色或显示线框。最后添加到场景中。

10.渲染

  在定义了场景中的物体,设置好的照相机之后,渲染器就知道如何渲染出二维的结果了。调用渲染器的渲染函数,就能使其渲染一次了。

renderer.render(scene, camera);

11.示例

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>3.js测试一</title>

</head>

<body onload="init()">

<canvas id="mainCanvas" width="400px" height="300px" ></canvas>

<script type="text/javascript" src="js/three.min.js"></script><!--路径改成你的-->

        <script type="text/javascript">

            function init() {

                // renderer 渲染器

                var renderer = new THREE.WebGLRenderer({

                    canvas: document.getElementById('mainCanvas')  //绑定canvas

                });

                renderer.setClearColor(0x000000); // black 

                // scene 场景

                var scene = new THREE.Scene();  //实例化场景

                // camera 照相机

                var camera = new THREE.PerspectiveCamera(45, 4 / 3, 1, 1000);  //透视投影相机参数设置

                camera.position.set(0, 0, 5);  //相机位置设置

                scene.add(camera);  //添加到场景

                // a cube in the scene 创建的物体

                var cube = new THREE.Mesh(new THREE.CubeGeometry(1, 2, 3),  //创建网格,参数一:几何体(立方体)

                        new THREE.MeshBasicMaterial({  //参数二:材质(网格基础材质)
color: 0xff0000  //设置颜色 }) ); scene.add(cube);  //添加到场景 // render 渲染 renderer.render(scene, camera); } </script> </body> </html>

  渲染的效果是:

  下一篇: Three.js基础探寻二

  整理自张雯莉《Three.js入门指南》

  其他参考:WebGL中文网

Three.js基础探寻一的更多相关文章

  1. Three.js基础探寻二——正交投影照相机

    本篇主要介绍照相机中的正交投影照相机. 第一篇传送门:Three.js基础探寻一 1.照相机 图形学中的照相机定义了三维空间到二维屏幕的投影方式. 针对投影方式照相机分为正交投影照相机和透视投影照相机 ...

  2. Three.js基础探寻九——网格

    在学习了几何形状和材质之后,我们就能使用他们来创建物体了.最常用的一种物体就是网格(Mesh),网格是由顶点.边.面等组成的物体:其他物体包括线段(Line).骨骼(Bone).粒子系统(Partic ...

  3. Three.js基础探寻十——动画

    本篇将介绍如果使用Three.js进行动态画面的渲染.此外,将会介绍一个Three.js作者写的另外一个库stat.js,用来观测每秒帧数(FPS). 1.实现动画效果 1.1 动画原理 对于Thre ...

  4. Three.js基础探寻四——立方体、平面与球体

    前面简单介绍了webGL和Three.js的背景以及照相机的设定,接下来介绍一些Three.js中的几何形状. 1.立方体 虽然这一形状的名字叫立方体(CubeGeometry),但它其实是长方体,也 ...

  5. Three.js基础探寻三——透视投影照相机

    本篇主要介绍Three.js照相机中的透视投影照相机. 上一篇:正交投影照相机 5.透视投影照相机构造函数 透视投影照相机(Perspective Camera)的构造函数是: THREE.Persp ...

  6. Three.js基础探寻五——正二十面体、圆环面等

    除了立方体.平面.球体,Three.js还提供了很多其他几何形状. 1.圆形 CircleGeometry可以创建圆形或者扇形: THREE.CircleGeometry(radius, segmen ...

  7. Three.js基础探寻八——法向材质与材质的纹理贴图

    4.法向材质 法向材质可以将材质的颜色设置为其法向量的方向,有时候对于调试很有帮助. 法向材质的设定很简单,甚至不用设置任何参数: new THREE.MeshNormalMaterial() 材质的 ...

  8. Three.js基础探寻七——Lamber材质与Phong材质

    材质(Material)是独立于物体顶点信息之外的与渲染效果相关的属性.通过设置材质可以改变物体的颜色.纹理贴图.光照模式等. 本篇将介绍基本材质以及两种基于光照模型的材质(Lamber与Phong) ...

  9. Three.js基础探寻六——文字形状与自定义形状

    1.文字形状 说起3d文字想起了早年word里的一些艺术字: 时间真快. 那么TextGeometry可以用来创建三维的文字形状. 使用文字形状需要下载和引用额外的字体库.这里,我们以 helveti ...

随机推荐

  1. Debug时含有的子元素,在代码里获取不到的问题

    比如,Debug时如下图展示: 我想要获取的是:ansList.get(i).getComponent().getConnectorId() debug时明明有这个元素,但是当我写出来的时候却发现:a ...

  2. 【刷题】BZOJ 2069 [POI2004]ZAW

    Description 在Byte山的山脚下有一个洞穴入口. 这个洞穴由复杂的洞室经过隧道连接构成. 洞穴的入口是一条笔直通向"前面洞口"的道路. 隧道互相都不交叉(他们只在洞室相 ...

  3. BZOJ 4555: [Tjoi2016&Heoi2016]求和 (NTT + 第二类斯特林数)

    题意 给你一个数 \(n\) 求这样一个函数的值 : \[\displaystyle f(n)=\sum_{i=0}^{n}\sum_{j=0}^{i} \begin{Bmatrix} i \\ j ...

  4. 自学Aruba6.2-控制器基本维护操作(web页面配置)

    点击返回:自学Aruba之路 自学Aruba6.2-控制器基本维护操作(web页面配置) 1 显示当前控制器版本 Dashboard---Controller中 2 升级Aruab os版本 Main ...

  5. [luogu1962]斐波那契数列

    来提供两个正确的做法: 斐波那契数列双倍项的做法(附加证明) 矩阵快速幂 一.双倍项做法 在偶然之中,在百度中翻到了有关于斐波那契数列的词条(传送门),那么我们可以发现一个这个规律$ \frac{F_ ...

  6. Python条件控制与循环语句

    1. 条件控制 # if-elif-else结构 age = 12 if age < 4: price = 0 elif age < 18: price = 5 else: price = ...

  7. ffmpeg 在ubuntu上编译环境搭建和开发

    步骤如下: 1. 下载 官网永远是王道,呵呵:http://ffmpeg.org/download.html 或者 svn checkout svn://svn.mplayerhq.hu/ffmpeg ...

  8. 【模板】spfa

    代码如下 #include <bits/stdc++.h> using namespace std; const int maxv=1e4+10; const int maxe=5e5+1 ...

  9. 【POJ3585】Accumulation Degree 二次扫描与换根法

    简单来说,这是一道树形结构上的最大流问题. 朴素的解法是可以以每个节点为源点,单独进行一次dp,时间复杂度是\(O(n^2)\) 但是在朴素求解的过程中,相当于每次都求解了一次整棵树的信息,会做了不少 ...

  10. mysql 多表管理修改

    update t_res_ys,cms_article_data,cms_article set cms_article_data.jsdata=t_res_ys.jsdata ,cms_articl ...