physics.jsの使い方2:
カメラの設定とマウス操作/物理シミュレーション環境構築用HTML5フレームワーク「physics.js」
文責:遠藤理平
公開日:2015年01月23日
最終更新日:2015年01月23日
前項「physics.jsの使い方1:「physics.js」のはじめかた」では、ウェブブラウザ内に仮想物理実験室を構築するための最小構成について解説しました。 前項では真っ白の3次元空間中に軸オブジェクトが表示されただけの味気ない実装でしたが、 本項では背景色の指定とマウス操作によるカメラパラメータの操作を実装します。
2-1. 実行結果
マウス操作によりカメラパラメータの操作が可能となります。
マウス操作によるカメラパラメータの操作
| 左ボタンマウスドラック | カメラの位置位置座標の移動 | 
|---|---|
| 右ボタンマウスドラック | カメラの視点の中心座標の移動 | 
| マウススクロール | 視点中心座標からカメラ位置座標までの距離を変更 | 
2-2. 背景色の指定方法
仮想物理実験室の3次元グラフィックスの背景色は、レンダリングする際のパラメータが格納されている「rendererプロパティ」を指定します。 背景色はPhysLabクラスのコンストラクタの引数に「rendererプロパティ」を次のように指定します。
//仮想物理実験室オブジェクトの生成
PHYSICS.physLab = new PHYSICS.PhysLab({
	(省略)
	//レンダラー関連パラメータ
	renderer : {
		clearColor : 0xE1FCFF,       //クリアーカラー(背景色)
	},
	(省略)
});
「rendererプロパティ」は背景色の他、背景透明度、アンチエイリアス処理の有無、ステンシルバッファ利用の有無を指定することができます。 「rendererプロパティ」で指定可能なパラメータは次のとおりです。
rendererプロパティで指定可能なパラメータ
| プロパティ名 | データ型 | デフォルト値 | 説明 | 
|---|---|---|---|
| renderer | <object> | 
		{ clearColor : 0xFFFFFF, clearAlpha : 1.0, parameters : { antialias: false, stencil: true, }  | 
	
		3次元グラフィックスのレンダラーのパラメータを指定するオブジェクト。プロパティの意味は次のとおり。 clearColor : クリアーカラー(背景色) clearAlpha : クリアーアルファ値(背景透明度) parameters : WebGLRendererクラスのコンストラクタに渡すパラメータ  | 
カメラの各種パラメータの指定
仮想物理実験室内の3次元空間を2次元平面であるディスプレイに射影するのがカメラの役割となります。 その射影方法を決めるのがカメラの特徴を表すパラメータで、「cameraプロパティ」に与えます。 本仮想物理実験室では、three.jsで指定可能な2種類のカメラ(透視投影カメラと正投影カメラ)を選択することができます。
//仮想物理実験室オブジェクトの生成
PHYSICS.physLab = new PHYSICS.PhysLab({
	(省略)
	//カメラ関連パラメータ
	camera: {                        
		type : "Perspective",      //カメラの種類 ( Perspective | Orthographic)
		position: {x:5, y:5, z:5}, //カメラの位置
		target: {x:0, y:0, z:0.5}, //カメラの視野中心座標
	},
	(省略)
});
なお、「cameraプロパティ」には透視投影カメラと正投影カメラで指定可能な全てのパラメータを全て指定することができます。 「cameraプロパティに」指定可能なパラメータは次のとおりです。
cameraプロパティで指定可能なパラメータ
| プロパティ名 | データ型 | デフォルト値 | 説明 | 
|---|---|---|---|
| camera | <object> | 
		{ type : "Perspective", position: { x:15, y:0, z:15 }, up : { x:0, y:0, z:1 }, target: { x:0, y:0, z:0 }, fov : 45, near : 0.1, far : 100, left : -10, right: 10, top: 10, bottom: -10, }  | 
	
		3次元グラフィックスのカメラの種類とパラメータを指定するオブジェクト。カメラとして透視投影(デフォルト)、正投影が用意されている。プロパティの意味は次のとおり。 type: カメラの種類( Perspective | Orthographic) position: カメラの位置座標 up: カメラの上ベクトル target: カメラの向き中心座標 fov: 視野角 near: 視体積手前までの距離 far: 視体積の奥までの距離 left: 視体積の左までの距離(正投影) right: 視体積の右までの距離(正投影) top: 視体積の上までの距離(正投影) bottom: 視体積の下までの距離(正投影)  | 
2-3. マウス操作によるカメラ関連パラメータの操作
PhysLabクラスのコンストラクタの引数に「trackballプロパティ」を指定することで、 仮想物理実験室の3次元空間中のカメラをマウスで操作することが可能となります。
//仮想物理実験室オブジェクトの生成
PHYSICS.physLab = new PHYSICS.PhysLab({
	(省略)
	//トラックボール関連パラメータ
	trackball : {
		enabled : true,   //トラックボール利用の有無
	},
	(省略)
});
なお、マウス操作によるカメラパラメータの変化量は、「trackballプロパティ」で詳細に指定することができます。
trackballプロパティで指定可能なパラメータ
| プロパティ名 | データ型 | デフォルト値 | 説明 | 
|---|---|---|---|
| trackball | <object> | 
		{ enabled : false, noRotate : false, rotateSpeed : 2.0, noZoom : false, zoomSpeed : 1.0, noPan : false, panSpeed : 1.0, staticMoving : true, dynamicDampingFactor : 0.3, }  | 
	
		enabled :トラックボール利用の有無 noRotate : トラックボールの回転無効化 rotateSpeed : トラックボールの回転速度の設定 noZoom : トラックボールの拡大無効化 zoomSpeed : トラックボールの拡大速度の設定 noPan : トラックボールのカメラ中心移動の無効化と中心速度の設定 panSpeed : 中心速度の設定 staticMoving : トラックボールのスタティックムーブの有効化 dynamicDampingFactor : トラックボールのダイナミックムーブ時の減衰定数  | 

 
 


