《WebGL入门指南》——第2章,第2.3节一个简单的Three.js网页

2.3 一个简单的Three.js网页
WebGL入门指南
好了,我想现在是时候来编写你的第一个 WebGL 程序了。在这一节中,你会看到上手Three.js是一件相当简单的事情。示例2-1实际上是第1章中的那个绘制正方形示例的翻版,但是将代码从150行精简到30行。由此可见,在使用Three.js之后对代码的压缩量之大。

示例2-1 一个简单的Three.js网页

<!DOCTYPE html>
<html>
<head>
<title>A Simple Three.js Page</title>
     <script src="../libs/Three.js"></script>
     <script>
     function onLoad()
     {
          // 抓取作为Canvas容器的<div>标签
        var container = document.getElementById("container");
        // 创建Three.js渲染器,并添加到<div>标签中
         var renderer = new THREE.WebGLRenderer();
         renderer.setSize(container.offsetWidth, container.offsetHeight);
         container.appendChild( renderer.domElement );
         // 创建Three.js场景
         var scene = new THREE.Scene();
         // 创建相机,并添加到场景中
        var camera = new THREE.PerspectiveCamera( 45,
             container.offsetWidth / container.offsetHeight, 1, 4000 );
        camera.position.set( 0, 0, 3.3333 );
        scene.add( camera );
        // 创建一个矩形几何体,并添加到场景中
        var geometry = new THREE.PlaneGeometry(1, 1);
        var mesh = new THREE.Mesh( geometry,
             new THREE.MeshBasicMaterial( ) );
        scene.add( mesh );
        // 渲染绘制
         renderer.render( scene, camera );
     }
     </script>
</head>
<body onLoad="onLoad();">
    <div id="container"
       style="width:500px; height:500px; background-color:#000000">
    </div>
</body>
</html>

让我们来遍历一下代码,看看它是如何工作的。

首先,我们使用了

然后我们添加了绘制正方形的代码。整个程序都放在了一个onLoad()函数中,并响应页面的onLoad事件。

在函数体中,我们首先找到页面中用于WebGL渲染的元素,并存储在container变量中。然后,我们初始化了Three.js的渲染器对象renderer。渲染器负责所有的Three.js的绘制工作(当然,是通过WebGL上下文来进行的)。我们构建了渲染器对象,并把它设置成和Canvas容器相同的尺寸,然后作为一个DOM子元素添加到容器中。

然后,我们建立了一个场景(scene)。在Three.js中,场景是最高级的对象,用于容纳所有的其他图形对象(Three.js中的对象都是作为父子层级存在的,我们在稍后的章节中会进行讲解)。当有了场景之后,我们就可以往里面添加其他的对象:一个相机和一个网格。相机定义了我们从哪里观察场景,在这个示例中,我们通过变换相机的位置属性,把它调整到距离原点3.3333个单位的位置(稍微往后一些)。之后,我们又通过Three.js中内置的 PlaneGeometry对象添加了一个1x1大小的矩形。然后通过配置材质来告诉Three.js如何对其进行着色。在这个示例中,我们使用的材质类型是MeshBasicMaterial(使用单一颜色,比如纯白色)。在Three.js中,物体的默认位置都是0,0,0,所以我们的白色矩形将会出现在原点位置。

最后,我们需要渲染整个场景。我们通过调用渲染器的render()方法,来处理场景和相机。

最终的运行结果如图2-1所示。是不是很熟悉呢?

图2-1 使用Three.js重新编写的绘制正方形的示例

需要注意的是,Three.js紧密的符合了我们在第1章中介绍的图形学的概念:我们处理的是对象(而不是处理那些充满了各种数字的顶点数组),我们通过相机观察场景和物体,使用变换来移动它们,使用材质来定义它们的外观。我们仅仅使用了短短的30行代码,就生成了之前使用原生WebGL编写150行代码才生成的图形。

很多老道的Web开发者也许已经发现了很多令人不快的地方。首先是对于onLoad事件的使用;在后面的章节中,我们将不再使用这种方法来检测页面加载,而是启用jQuery中的强大的ready()方法。其次,整个程序都放在了一个函数中;显然在编写更复杂的应用时我们无法再这么做。在之后的章节中,我会介绍一个非常简单的框架,以便使用Three.js来编写多模块应用。那我为什么还要如此而为呢?这是因为我想要尝试保证尽可能少的改动代码块,使得示例尽量清晰简单。所以,各位资深开发者们,请再忍耐一个章节,结构化的代码稍后奉上。

时间: 2024-12-03 23:35:10

《WebGL入门指南》——第2章,第2.3节一个简单的Three.js网页的相关文章

《WebGL入门指南》——导读

目 录第1章 WebGL简介 1.1 WebGL--一个技术定义 1.2 3D图形学--入门 1.3 WebGL原生API 1.4 本章小结 第2章 你的第一个WebGL程序 2.1 Three.js--一个JavaScript 3D引擎 2.2 建立Three.js运行环境 2.3 一个简单的Three.js网页2.4 一个真实的3D示例 2.5 本章小结 第3章 图形 第4章 动画 第5章 交互 第6章 2D与3D的整合 第7章 实战WebGL 第8章 你的第一个WebGL游戏 后记 附录A

《WebGL入门指南》——第2章,第2.4节一个真实的3D示例

2.4 一个真实的3D示例 WebGL入门指南 到目前为止,你也许在想"真是个还不错的正方形",然后开始怀疑我们什么时候开始画一些真正的3D图形.好吧,那就现在吧!在示例2-2中我们将会用更有趣的物体来代替正方形,我们将会完成一个看起来还不错.并且展示了大部分WebGL主要特性.同时还保持代码简洁的页面. 图2-2就是页面的最终效果.其中我们设置了标题文字,添加了一个表面贴有图片的立方体,然后在页面底部也添加了文字.另外值得一提的是,这个页面是可以交互的:点击画布元素,立方体就会开始或

《WebGL入门指南》——第1章,第1.4节本章小结

1.4 本章小结 WebGL入门指南 这样我们就结束了WebGL基础知识之旅.噢!东西可真多啊!现在你也许在想,仅仅在屏幕上画一个正方形就如此兴师动众.而且,这还不是一个真正的3D物体!好吧,我部分同意你的意见.WebGL编程,在这个等级上的编程,是相当困难的.标准的设计者做出这样一个决定还是相当清醒的,他们用这样一个既小巧又简单的标准,换取了WebGL强大的能力,而付出的代价是开发者必须要在应用程序端编写大量的代码. 显然,在大部分情况下,我们不会使用WebGL来绘制2D物体.HTML5的2D

《WebGL入门指南》——第2章,第2.5节本章小结

2.5 本章小结 WebGL入门指南 本章介绍了第一个真实示例.我必须要说,这其实还是很轻松的.仅仅使用了很少的代码,我们就可以创建一个包含3D内容的HTML网页,装扮它,用动画赋予它生命,然后让它可以交互.你要意识到在过去这是根本不可能的.感谢WebGL,让这一切都变成了现实.而又有了Three.js,可以让你在开发前不必先去考取一个计算机图形学的学位. 我们已经构建和运行起来了WebGL,剩下的就都是细节了.

《WebGL入门指南》——第1章,第1.2节3D图形学——入门

1.2 3D图形学--入门 WebGL入门指南 "数学太难了啦!" --芭比娃娃 也许有点不太好听,但是我必须得说,当我写3D图形的代码的时候,我会和芭比一样,有强烈的欲望想要用疯狂购物来放纵一下自己.因为3D图形编程通常很难,而且需要大量的数学知识.幸运的是,你不需要先成为数学大师再来写WebGL应用:我们会使用各种框架来代替我们去做其中大部分的复杂工作.尽管如此,理解底层的工作原理依然是非常重要的,因此下面我尝试在几页的篇幅内总结出整个3D图形学的基础知识. 1.2.1 3D坐标系

《WebGL入门指南》——第2章,第2.1节Three.js——一个JavaScript 3D引擎

2.1 Three.js--一个JavaScript 3D引擎 WebGL入门指南 需求是创新之母.每个开发者在项目之初都必须不厌其烦的使用WebGL原生API来编写代码,直到可以建立一个自己的代码库,以用于随后的通用3D编程.事实上,已经有很多人完成了这项工作.现在有很多不错的WebGL开源框架,例如GLGE(http://www.glge.org/).SceneJS(http://www.scenejs.org/).CubicVR(http://www.cubicvr.org/)等.每个框架

《WebGL入门指南》——第1章,第1.3节WebGL原生API

1.3 WebGL原生API WebGL入门指南 计算机图形学中的基本概念在过去的数年中从未发生过变化.但图形技术却不断进化,特别是最近几年,伴随着设备和操作系统的多样化.这些百花齐放的图形技术的根基则是诞生于20世纪80年代末期的OpenGL.OpenGL作为行业规范已经存在了非常长的时间,并且成功经受住了来自微软的DirectX的竞争考验,无可争辩的成为了3D图形编程的领衔者. 但是并非所有的OpenGL都是一样的.根据不同平台的不同特征,包括台式电脑.智能电视.手机和平板电脑等,人们开发了

《WebGL入门指南》——第1章,第1.1节WebGL——一个技术定义

1.1 WebGL--一个技术定义 WebGL入门指南 WebGL 标准是由科纳斯组织(Khronos Group)开发和维护的,该组织还是管理着 OpenGL.COLLADA等其他你也许早有耳闻的规范的标准组织.以下是科纳斯组织的网站上对WebGL的官方描述: WebGL是免授权费的,跨平台的应用程序接口API,它将OpenGL ES 2.0作为在HTML网页内的3D绘图环境,作为低级别文档对象模型接口开放.它使用OpenGL渲染语言GLSL ES,并可被整洁地与其他3D内容上层或下层的网页内

《WebGL入门指南》——第2章,第2.2节建立Three.js运行环境

2.2 建立Three.js运行环境 WebGL入门指南 你要做的第一件事情就是从GitHub上获取到最新版的Three.js包.Three.js在GitHub上的地址是https://github.com/mrdoob/three.js/.复制到本地之后,你可以在build/Three.js目录找到打包好的库文件.另外,Three.js的全部源代码都在src文件夹中.而API文档则是直接连接到GitHub网站,但这份文档相当简陋,你最好还是对照源代码来上手. Three.js使用了Google