开发环境

Three.js是一个JavaScript库,所以,你可以使用平时开发JavaScript应用的环境开发Three.js应用。如果你没什么偏好的话,我会推荐Komodo IDE

调试建议使用Chrome或者Firefox浏览器。如果你使用的是Firefox,那么Firebug会是你必不可少的插件;如果你使用的是Chrome,那么直接使用控制台调试即可。这些和JavaScript的调试是相同的,因此本书不作进一步展开。

下载

首先,我们需要在Github下载Three.js的代码。

https://github.com/mrdoob/three.js/tree/master/build可以看到three.jsthree.min.js两个文件,前者是没有经过代码压缩的,因此适用于调试阶段;后者是经过代码压缩的,调试起来会不太方便,但文件较小,适用于最终的发布版。保存一个文件到本地,这里我们可以选择three.js。

引用

在使用Three.js之前,我们需要在HTML文件中引用该文件:

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

然后就能通过全局变量THREE访问到所有属性和方法了。

开始工作

接下来,我们终于要真正使用Three.js了!

首先,在HTML的<head>部分,需要声明外部文件three.js

<head>
<script type="text/javascript" src="js/three.js"></script>
</head>
<body onload="init()">
<canvas id="mainCanvas" width="400px" height="300px" ></canvas>
</body>

在JavaScript代码中定义一个init函数,在HTML加载完后执行:

一个典型的Three.js程序至少要包括渲染器(Renderer)、场景(Scene)、照相机(Camera),以及你在场景中创建的物体。这些话题将在后面几章中进一步展开,这里我们将介绍如何快速地使用这些东西。

渲染器(Renderer)

渲染器将和Canvas元素进行绑定,如果之前在HTML中手动定义了idmainCanvas的Canvas元素,那么Renderer可以这样写:

var renderer = new THREE.WebGLRenderer({
canvas: document.getElementById('mainCanvas')
});

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

var renderer = new THREE.WebGLRenderer();
renderer.setSize(, );
document.getElementsByTagName('body')[].appendChild(renderer.domElement);

上面代码的第二行表示设置Canvas的宽400像素,高300像素。第三行将渲染器对应的Canvas元素添加到<body>中。

我们可以使用下面的代码将背景色(用于清除画面的颜色)设置为黑色:threejs使用的0x颜色

renderer.setClearColor(0x000000);

场景(Scene)

在Three.js中添加的物体都是添加到场景中的,因此它相当于一个大容器。一般说,场景里没有很复杂的操作,在程序最开始的时候进行实例化,然后将物体添加到场景中即可。

var scene = new THREE.Scene();

照相机(Camera)

在介绍照相机设置前,我们先来简单了解下坐标系。WebGL和Three.js使用的坐标系是右手坐标系,看起来就是这样的:

这里,我们定义了一个透视投影的照相机,具体原理将在下一章中展开。

var camera = new THREE.PerspectiveCamera(,  / , , );
camera.position.set(, , );
scene.add(camera);

长方体

我们要创建一个x、y、z方向长度分别为123的长方体,并将其设置为红色。

var cube = new THREE.Mesh(new THREE.CubeGeometry(, , ),
new THREE.MeshBasicMaterial({
color: 0xff0000
})
);
scene.add(cube);

那么这里长度为1的单位是什么呢?这里的长度是在物体坐标系中的,其单位与屏幕分辨率等无关,简单地说,它就是一个虚拟空间的坐标系,1代表多少并没有实际的意义,而重要的是相对长度。

渲染

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

renderer.render(scene, camera);

完整代码

function init() {
// renderer
var renderer = new THREE.WebGLRenderer({
canvas: document.getElementById('mainCanvas')
});
renderer.setClearColor(0x000000); // black // scene
var scene = new THREE.Scene(); // camera
var camera = new THREE.PerspectiveCamera(, / , , );
camera.position.set(, , );
scene.add(camera); // a cube in the scene
var cube = new THREE.Mesh(new THREE.CubeGeometry(, , ),
new THREE.MeshBasicMaterial({
color: 0xff0000
})
);
scene.add(cube); // render
renderer.render(scene, camera);
}

附上链接http://runjs.cn/detail/xtj5fstx

可能有的同学说看起来不像一个立方体

那现在调整一下参数,现在是不是看的出来了

// camera
var camera = new THREE.PerspectiveCamera(, / , , );
camera.position.set(, , );
camera.lookAt(new THREE.Vector3(, , ));
scene.add(camera); // a cube in the scene
var cube = new THREE.Mesh(new THREE.CubeGeometry(, , ),
new THREE.MeshBasicMaterial({
color: 0xff0000,
wireframe: true
})
);

【webGL】threejs入门 ---创建一个简单立方体的更多相关文章

  1. (转)Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  2. Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  3. 一个先进的App框架:使用Ionic创建一个简单的APP

    原文  http://www.w3cplus.com/mobile/building-simple-app-using-ionic-advanced-html5-mobile-app-framewor ...

  4. BitAdminCore框架应用篇:(二)创建一个简单的增删改查模块

    NET Core应用框架之BitAdminCore框架应用篇系列 框架演示:http://bit.bitdao.cn 框架源码:https://github.com/chenyinxin/cookie ...

  5. 我的第一个activiti实例 (代码方式) ctiviti入门列子一个简单的activiti请假流程

    转: (activiti入门列子一个简单的activiti请假流程) 我的第一个activiti实例 2017年05月31日 14:29:45 chf_mixueer 阅读数:1223   整个项目的 ...

  6. Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏

    Unity 2D游戏开发高速入门第1章创建一个简单的2D游戏 即使是如今,非常多初学游戏开发的同学.在谈到Unity的时候.依旧会觉得Unity仅仅能用于制作3D游戏的. 实际上.Unity在2013 ...

  7. 如何创建一个简单 APT 仓库

    0. 无废话版本 需求: 有一堆 .deb 包,想把它们做成一个 APT 仓库,这样就可以用apk install pkgname进行安装了,这样一方面自己可以规避 dpkg -i xxx.deb 时 ...

  8. 通过创建一个简单的骰子游戏来探究 Python

    在我的这系列的第一篇文章 中, 我已经讲解如何使用 Python 创建一个简单的.基于文本的骰子游戏.这次,我将展示如何使用 Python 模块 Pygame 来创建一个图形化游戏.它将需要几篇文章才 ...

  9. 在 Visual Studio 中创建一个简单的 C# 控制台应用程序

    转载:https://blog.csdn.net/qq_43994242/article/details/87260824 快速入门:使用 Visual Studio 创建第一个 C# 控制台应用 h ...

随机推荐

  1. 使用SharpZipLib实现文件压缩、解压

    接口 public interface IUnZip { /// <summary> /// 功能:解压zip格式的文件. /// </summary> /// <par ...

  2. bzoj 2434 阿狸的打字机 fail树的性质

    如果a串是另b串的后缀,那么在trie图上沿着b的fail指针走一定可以走到a串. 而a串在b串里出现多少次就是它是多少个前缀的后缀. 所以把fail边反向建树维护个dfs序就行了. 并不是很难... ...

  3. Javascript数值转换(string,int,json)

    数值: 在JavaScript中,数值转换一般有三种方式: 一.Number(param)函数:param可以用于任何数据类型 1.1 param是Boolean值,true和false分别转换为1和 ...

  4. 响应式布局-Rem的用法

    前言: 文章较为系统地介绍了rem这个新的文字大小单位,绝对干货,绝对好文.转载时略有改动.   先来看看一些基本理念,比如: 响应式网页不仅仅是响应不同类型的设备,而且需要响应不同的用户需求.响应式 ...

  5. 设置height:100%无效的解决方法

    设置height:100%无效的解决方法 刚接触网页排版的新手,常出现这种情况:设置table和div的高height="100%"无效,使用CSS来设置height:" ...

  6. R语言获取数据类型信息的一些有用函数

    向量.因子.时间序列x[i]:  矩阵.数据框x[i, j] x[i, ] x[, j]:  数组就是根据维度多打几个逗号而已x[i, j, k, -]:  列表要用双重中括号x[[i]].  特殊的 ...

  7. redis 在后台启动

    昨天在cmd窗口启动,窗口关闭,再次访问会报错,所以在次打开 首先你要安装服务:redis-server --service-install redis.windows.conf --loglevel ...

  8. Java学习笔记15

    do-while循环时while循环的变体语法如下:do{  // 循环体 语句(组);}while(循环继续条件); 如果循环中的语句至少需要执行一次,那么建议使用do-while循环. for循环 ...

  9. stackoverfow访问 ajax.googleapis.com

    本文实验环境:Fedora 23 先用nslookup 查看stackoverflow.com的ip -vc参数,表示用强制用TCP 查到的stackoverflow的地址似乎没错, 用本地的DNS解 ...

  10. <c ss高效开发实战>看完了,Bootstrap学习是关键

    Bootstrap果真给我们带来了很多便利,学习CSS,必须要掌握很多框架和快速学习的方法. 这本书看完了,也写过几篇读书笔记,墙裂推荐.不上书封面了,只上书的导图. 这里说几点学习CSS的心得 1. ...