Babylon.js入门教程和开发实例

techbrood 发表于 2016-10-10 23:52:52

标签: webgl, babylonjs, html5, canvas, 教程

- +

Babylon.js是一款WebGL开发框架。和Three.js类似。主要的技术区别是Three.js还试图回退兼容CSS 3D。

Three.js是完全社区推动的,比Babylon.js要成熟些,而Babylon.js是微软推动的,和微软的相关技术结合更好。

本文对Babylon.js的使用做个简单的介绍。首先的首先,请确保你的浏览器支持WebGL(IE11+/Edge/Firefox 4+/Google Chrome 9+/ Opera 15+/Safari...)。

如何你使用sublime等桌面工具开发,那么首先你得下载最新版本的BabylonJS,创建一个项目,文件如下:

yourProject
    |- index.html
    |- babylon.2.3.js

在本文中,我们简化下,直接使用在线开发工具http://wow.techbrood.com/fiddle/new

只要有浏览器即可,无需下载或安装任何软件。

在其中的HTML面板()中编写如下代码:

<script src="http://cdn.babylonjs.com/2-3/babylon.js"></script>  
<canvas id="renderCanvas"></canvas>

WebGL需要借助HTML5的canvas元素来作为3D渲染的容器。所以上面的代码我们在文档中插入了一个id为renderCanvas的canvas元素。接着我们在CSS面板()中编写如下样式代码,让canvas元素占满预览渲染窗口(右下角的窗口):

html, body {  
        overflow: hidden;  
        width   : 100%;  
        height  : 100%;  
        margin  : 0;  
        padding : 0;  
}  
 
#renderCanvas {  
        width   : 100%;  
        height  : 100%;  
        touch-action: none;  
}

接着我们在JavaScript面板()中编写JS脚本:

window.addEventListener('DOMContentLoaded', function() {  
        // 我们的渲染代码  
});

上面的代码使得我们的绘制脚本确保会在文档加载完成后被执行。

我们接下来完成一个基本场景、基本3D网孔模型的创建。首先我们获得canvas元素:

var canvas = document.getElementById('renderCanvas');

然后,使用该canvas元素创建babylon渲染引擎:

var engine = new BABYLON.Engine(canvas, true);

接着,我们来创建3D场景,包含相机、光源和两个基本的网孔模型(一个球体和一个平面):

var createScene = function() {  
    // 创建一个基本的Scene对象,用来容纳所有其他对象  
    var scene = new BABYLON.Scene(engine);  
  
    // 创建一个相机,设置其位置为(x:0, y:5, z:-10)  
    var camera = new BABYLON.FreeCamera('camera1', new BABYLON.Vector3(0, 5,-10), scene);  
  
    // 相机聚焦在场景原点位置  
    camera.setTarget(BABYLON.Vector3.Zero());  
  
    // 使得我们可以控制相机拍摄角度,和three.js中的OrbitsControl效果类似,但简单得多  
    camera.attachControl(canvas, false);  
  
    // 创建一个半球形光源,朝向为天空  
    var light = new BABYLON.HemisphericLight('light1', new BABYLON.Vector3(0,1,0), scene);  
  
    // 创建一个内置的“球”体;其构造函数的参数:名称、宽度、深度、精度,场景,其中精度表示表面细分数。  
    var sphere = BABYLON.Mesh.CreateSphere('sphere1', 16, 2, scene);  
  
    // 设置球体位置,使其位于平面之上  
    sphere.position.y = 1;  
  
    // 创建一个内置的“地面”形状;其构造函数的5个参数和球体一样  
    var ground = BABYLON.Mesh.CreateGround('ground1', 6, 6, 2, scene);  
  
    return scene;  
}  
var scene = createScene();

接下来,我们需要在canvas中渲染这个场景(注意渲染是一个定时循环):

engine.runRenderLoop(function() {  
    scene.render();  
});

这样一个简单而完整的WebGL应用就开发好了!点击[运行]菜单或者按住CTRL+R快捷键,预览窗口将呈现如下的结果:


我们还可以给3D模型添加材料,比如给地面添加材料,代码类似如下:

var groundMaterial = new BABYLON.StandardMaterial("groundMaterial", scene);  
groundMaterial.diffuseColor = new BABYLON.Color3(0.1, 0.3, 0.1);  
  
var ground = BABYLON.Mesh.CreateGround("ground", 10, 10, 2, scene);  
ground.material = groundMaterial;  
ground.receiveShadows = true;

最终的作品如下图所示,点击图片可以链接到在线演示



possitive(16) views21435 comments1

发送私信

最新评论

iefreer 2016-10-10 23:59:12

http://doc.babylonjs.com/


请先 登录 再评论.
相关文章
  • 谷歌ARCore技术特性简介

    谷歌美国时间2017.8.29号刚发布了ARCore预览版,这是一个类似于苹果ARKit的增强现实SDK,在此之前,谷歌虽然已投资AR平台Tango,但由于需要特定的硬件和传感器,...

  • WebGL Roadmap

    Unity 5.0 shipped with a working preview of our WebGL technology in March this year. Since then, Google has disabled (by default) NPAPI support in the...

  • 常见面试题JavaScript闭包(ES5语法)

    JavaScript闭包(Closure)是常见的JS面试题,是否理解闭包是一个简单的区分JS初级和高级程序员的判例。几乎每个JS程序员都在使用闭包,有意或无意间。比如编写一个jQuery鼠标点击处理函数:$(function()

  • HTML5动画背后的数学 - 粒子群仿生算法简介

    本站收录了多个算法可视化动画,如模拟鸟群运动:http://wow.techbrood.com/fiddle/30529等等。这里面除...

  • HTML5、Hybrid APP、Native APP对比和技术选型

    HTML5和Native APP都很容易理解。为了获得HTML5的移植性和移动本地应用的高性能,搞出来一些混合APP的解决方案。比如Apache的Cordova(也就是以前的PhoneGap),...

  • 使用SVG和CSS3创建圆形进度条动画

    圆形进度条是一个经典的控制面板元素,常用于显示任务进度,比如用户档案的完整程度,或者升级状态。有很多方法来实现圆形进度条,比如用JS, CSS3, Canvas, SVG...

  • Three.js 对象局部坐标转换为世界坐标

    在Three.js中进行顶点几何计算时,一个需要注意的地方是,需要统一坐标系。比如你通过Three.js提供的API创建了一个球体网孔对象,那么默认情况下,各网孔顶点的...

  • 粒子运动模拟 - Verlet积分算法简介

    Verlet算法是经典力学(牛顿力学)中的一种最为普遍的积分方法,被广泛运用在分子运动模拟(Molecular Dynamics Simulation),行星运动以及织物变形模拟等领域...

  • Blender2.7 快捷键一览表

    通用操作
    停止当前操作:ESC
    快捷搜索:SPACE撤销:ctrl+z重做:ctrl+shift+z渲染:F12
    单选:鼠标右键(RMB)全选:A
    框选:B
    刷选:...

  • WebGL入门教程6 - 光照效果和Phong光照模型

    正是因为有了光,世界才能被我们看见,在3D的世界里,光照给物体带来真实的视觉感受。当光照射在某一表面上时,它可能被吸收、反射或投射。其中入射到表面上的一...

  • 使用Canvas绘制完美的不完美圆形

    真实世界是不完美的,当我们需要模拟真实世界时,经常需要引入不完美/不规则的形状。比如陨石、雨滴、行星、树叶、绵延的海岸线、云朵等。本文介绍如何基于Canva...

  • HTML网页布局:静态、自适应、流式、响应式

    静态布局(Static Layout)即传统Web设计,对于PC设计一个Layout,在屏幕宽高有调整时,使用横向和竖向的滚动条来查阅被遮掩部分;对于移动设备,单独设计一个布...

  • 更多...