Bootstrap

WebGL+Three.js学习博客(一)

一、什么是WebGL

WebGL(全写Web Graphics Library)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,这样Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型了,还能创建复杂的导航和数据视觉化。

WebGL是在浏览器中实现三维效果的一套规范。当然用它的原生api来开发还是相对比较困难的,这里我们选择一个很优秀的开源框架:Three.js

二、什么是Three.js

Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机、光影、材质等各种对象。你可以在它的主页上看到许多精彩的演示。不过,这款引擎还处在比较不成熟的开发阶段,其不够丰富的 API 以及匮乏的文档增加了初学者的学习难度(尤其是文档的匮乏)three.js的代码托管在github上面。

三、javascript能写高效率的3D程序吗?

能。技术在进步,几年前也许这是不行,写3D程序,最好是用c++,这样才能保证效率,但是现在,世界改变了。javascript的计算能力因为google的V8引
擎得到了迅猛的增强,做3D程序,做服务器都没有问题。如果你对服务器感兴趣,你可以看看nodejs,当然,不是现在。现在,你最好保持热情,将Three.js学精深,在以后的工作学习中做出
更大的成绩。----来自WebGL中文网

四、下载Three.js以及源目录说明

1. 下载

官网:https://threejs.org/
在这里插入图片描述
让我们打开新鲜的解压文件:
在这里插入图片描述
看一下目录:

  • build:里面含有 Three.js 构建出来的 JavaScript 文件,three.js 和three.min.js 。可以直接引入使用,min是压缩版;
  • docs:three.js的帮助文档,里面是各个函数的api,但是没有全面的解释。
  • editor:Three.js 的一个网页版的模型编辑器,类似3D-max的简单编辑程序,它能创建一些三维物体。
  • examples:Three.js 的官方案例,跟docs一样,没有解释。
  • src:Three.js 的源文件;
  • test:一些官方测试代码,基本用不到;
  • utils:相关插件工具脚本,python文件的工具目录。例如将3D-Max格式的模型转换为three.js特有的json模型。
  • .gitignore文件: git工具的过滤规则文件,没有用。
  • LICENSE文件:版权信息。
  • README.md文件:介绍three.js的一个文件,里面还包含了各个版本的更新内容列表。
  • 其他:开发环境搭建、开发所需要的文件,如果不对 Three.js 进行二次开发,用不到。

五、关于运行浏览器

Three.js本质上是Webgl,所以我们使用的浏览器需要支持WebGL。
支持Webgl的浏览器很多:例如Chrome、FireFox、360安全浏览器6.0等,而IE浏览器对Webgl标准的支持就不太好。

六、 第一个Three.js案例

网上⑧了一个例子,把three.js文件copy到项目中,引入到下面的html内:

<!DOCTYPE html>
<html>
<head>
    <meta charset=utf-8>
    <style>
        body {
            margin: 0;
        }
        canvas {
            width: 100%;
            height: 100%;
            display: block;
        }
    </style>
</head>

<body onload="init()">
    <script src="../../assets/expand/plugins/Three/three.js"></script>
    <script>
        //声明一些全局变量
        var renderer, camera, scene, geometry, material, mesh;
        //初始化渲染器
        function initRenderer() {
            renderer = new THREE.WebGLRenderer();//实例化渲染器
            renderer.setSize(window.innerWidth, window.innerHeight);//设置宽和高
            document.body.appendChild(renderer.domElement);//添加到dom
        }

        //初始化场景
        function initScene() {
            scene = new THREE.Scene();//实例化场景
        }
        //初始化相机
        function initCamera() {
            camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 200);
            //实例化相机
            camera.position.set(0, 0, 15);
        }

        //创建模型
        function initMesh() {
            geometry = new THREE.BoxGeometry( 2, 2, 2 );//创建几何体
        	material = new THREE.MeshNormalMaterial();//创建材质
        	mesh = new THREE.Mesh( geometry, material );//创建网格
        	scene.add( mesh ); //将网格添加到场景
        }

        //运行动画
        function animate() {
            requestAnimationFrame(animate);
            //循环调用函数
        mesh.rotation.x += 0.01;
        //每帧网格模型的沿x轴旋转0.01弧度
        mesh.rotation.y += 0.02; //每帧网格模型的沿y轴旋转0.02弧度
        renderer.render( scene, camera ); //渲染界面
         }

         //初始化函数,页面加载完成是调用
        function init() {
            initRenderer();
            initScene();
            initCamera();
            initMesh();
            animate();
        }

    </script>


</body>
</html>

效果:
在这里插入图片描述
一个不断运动的正方体。

本章结束,下一章会详细分析Three.js

;