LoginSignup
5
3

More than 5 years have passed since last update.

GLBoost と他の主要 WebGL ライブラリを比較してみる

Last updated at Posted at 2016-12-03

この記事はGLBoost Advent Calender 2016の3日目の記事です。

GLBoost は @emadurandal さんが絶賛開発中の国産 WebGL ライブラリです。

概要比較

まずは GLBoost がどのようなライブラリなのか、他の主要 WebGL ライブラリと比較して特徴を見ていきたいと思います。

比較項目 GLBoost.js Three.js Babylon.js
最新バージョン バージョン情報無し (2016.12.03) r83dev (2016.12.01) 2.5beta (2016.12.02)
ファイル名 glboost.js (429KB ※未圧縮) three.min.js (490KB) babylon.js (1.21MB)
人気(watch/star/fork) 8 / 34 / 6 1,863 / 29,218 / 10,112 378 / 3,910 / 1,002
作者 emadurandal mrdoob deltakosh
ライセンス MIT MIT Apache v2
特徴 純国産ライブラリ。日本語でのサポートが手厚い。 一番人気があり情報量も多い。 MSの中の人が中心に開発。開発言語はTypeScript
座標系 右手座標系 右手座標系 左手座標系
レンダラの種類 WebGL/WebGL2 WebGL/Canvas/CSS3 WebGL
glTFファイル対応 標準 Plugin Plugin
GitHub Link Link Link
APIリファレンス Link Link Link
サンプル Link Link Link
サポート掲示板 Link Link Link

コード比較

次にコードを眺めながら、違いを見ていきたいと思います。

比較項目 GLBoost.js Three.js Babylon.js
レンダラの初期化

var canvas = document.getElementById("canvas");
var glBoostContext = new GLBoost.GLBoostMiddleContext(canvas);
var renderer = glBoostContext.createRenderer({
  clearColor: {red: 0.0, green: 0.0, blue: 0.0, alpha: 1}
});

var canvas = document.getElementById("canvas");
var renderer = new THREE.WebGLRenderer();
container.appendChild( renderer.domElement );

var canvas = document.getElementById("canvas");
var engine = new BABYLON.Engine(canvas, true);
シーンの作成

var scene = glBoostContext.createScene();

var scene = new THREE.Scene();

var scene = new BABYLON.Scene(engine);
カメラの作成

var camera = glBoostContext.createCamera({
  eye: new GLBoost.Vector3(0.0, 0.0, 200.0),
  center: new GLBoost.Vector3(0.0, 0.0, 0.0),
  up: new GLBoost.Vector3(0.0, 1.0, 0.0)
}, {
  fovy: 45.0,
  aspect: 1.0,
  zNear: 0.1,
  zFar: 1000.0
});
scene.addChild(camera);

var camera = new THREE.PerspectiveCamera(45, 1, 0.1, 1000);
camera.position.z = 200;

var camera = new BABYLON.FreeCamera("Camera", new BABYLON.Vector3(0, 0, 0), scene);
ライトの作成

var light = glBoostContext.createPointLight(
  new GLBoost.Vector3(1, 1, 1));
light.translate = new GLBoost.Vector3(0,150,0);
scene.addChild(light);

var light = new THREE.PointLight(0xffffff);
light.position.set(0,150,0);
scene.add(light);

var light = new BABYLON.PointLight("Omni", new BABYLON.Vector3(0, 150, 0), scene);
light.diffuse = new BABYLON.Color3(1, 1, 1);
表示する物体の作成

var material = glBoostContext.createClassicMaterial();
material.diffuseColor = new GLBoost.Vector(0,1,0,1);
var geometry = 
  glBoostContext.createCube(
    new GLBoost.Vector3(100,100,100), 
    new GLBoost.Vector4(1,1,1,1));
var cube = glBoostContext.createMesh(geometry, material);
scene.addChild(cube);

var geometry = new THREE.CubeGeometry(100, 100, 100);
var material = new THREE.MeshBasicMaterial({color: "blue"});
var cube = new THREE.Mesh(geometry, material);
scene.add(cube);

var cube = BABYLON.Mesh.CreateBox("Cube", 1.0, scene);
var material = new BABYLON.StandardMaterial("default", scene);
material.emissiveColor = new BABYLON.Color3(0.0, 0.0, 1.0);
cube.material = material;
レンダリング

var expression = glBoostContext.createExpressionAndRenderPasses(1);
expression.renderPasses[0].scene = scene;
expression.prepareToRender();

var render = function() {
  renderer.clearCanvas();
  renderer.draw(expression);
  requestAnimationFrame(render);
};

function render() {
  requestAnimationFrame(render);
  renderer.render(scene, camera);
};
render();

var renderLoop = function () {
  scene.render();
};
engine.runRenderLoop(renderLoop);

なんとなく、雰囲気が伝わったでしょうか?

その他比較サンプル

最後に、各種サンプルへのリンクを紹介したいと思います。GLBoost への移植等の参考になれば幸いです。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3