さて、前回jsonモデルの出力までをご説明しました。
CINEMA4DからWebGLへの出力(Blender経由)
今回は、そのモデルをブラウザーで表示する方法について書きたいと思います。
ブラウザーは最新のものを使用してください。
WebGLを使いますが、前回もご紹介したthree.jsを使用します。
下記のjsを使用しますので、three.jsから制作する環境にコピーしておきます。
three.min.js
OrbitControls.js
htmlのページで読み込んで使用します。
<head> <script src="three.min.js"></script> <script src="OrbitControls.js"></script> </head>
続いて、three.jsのシーンを構築します。
シーン構築に関してはthree.jsのサンプル等もありますので、いろいろいじってみることをおすすめします。
ただ、ローカルでは上手く動作しないこともありますので、実際のサーバに近い環境でテストする方がトラブルも少ないでしょう。
var TOTAL_FRAMES = 90;
// 変数
var mesh;
var scene;
var camera;
var renderer;
var controls;
var lastKeyFrame = null;
var currentKeyFrame = 0;
var flamerate = 1;
init();
function init() {
var width = 640;
var height = 480;
scene = new THREE.Scene(); // シーン作成
// カメラを生成、位置の指定
camera = new THREE.PerspectiveCamera(50, width/height, 1, 10000);
camera.position.z = 200;
camera.position.y = 00;
// 光源 光源色、光強度、光源からの減衰係数を指定して生成
var pointLightA = new THREE.PointLight(0xFFFFFF, 1, 0);
pointLightA.position.set(0, 10, 100); // 光源位置を設定
scene.add(pointLightA); // シーンに追加
// 必要に応じて複数生成してください
// レンダラー
renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height);
// マウスで視点移動出来るようにします
controls = new THREE.OrbitControls(camera, renderer.domElement);
// モデルを読み込みます
var loader = new THREE.JSONLoader();
loader.load('models/h4.json', function (geometry, materials) {
for (var i = 0, l = materials.length; i < l; i++) {
materials[i].morphTargets = true;
}
mesh = new THREE.MorphAnimMesh(geometry, new THREE.MeshFaceMaterial(materials));
mesh.position.set(0, 0, 0);
mesh.scale.set(100, 100, 100);
scene.add(mesh);
animate();
});
}
// アニメーション
function animate() {
requestAnimationFrame(animate);
lastKeyFrame = currentKeyFrame;
currentKeyFrame = currentKeyFrame + flamerate;
if (TOTAL_FRAMES < currentKeyFrame) {
currentKeyFrame = 0;
}
mesh.morphTargetInfluences[lastKeyFrame] = 0;
mesh.morphTargetInfluences[currentKeyFrame] = 1;
renderer.render(scene, camera);
controls.update();
}

