※ 現時点で既に Three.js(r56:2013/02/15) が出ています。jsdo.it での実行 jsdo.it のソースコード公開ページ 座標系のテスト Three.js の座標系の向きを テクスチャを貼りつけたキューブと jQuery のスライダー で確認する Three.js の全体像はとても把握しずらいので、調整内容を別々に確認したほうが良いので、まず最初に座標系のテストコードを作成しています。 キューブに関する値の変更 厳密に言うと、 1) Geometry ( どのような形状、つまりどのような座標で表現されるか ) 2) Material ( 材質、つまりどのような表示特性を持つか ) 3) 3Dオブジェクト ( Geometry と Material で、表示対象の実体としての『もの』) みたいな事になっています。ここで、スケールとX軸回転は、3) に対して行っているので、とても一般的なものであり、見え方としては『カメラ』と同様な意味があります。但し、『カメラ』はシーンに対して動作が反映されるので、対象物が二つ以上の場合には、3Dオブジェクト を動かすのとは違った意味になって来ます。 3Dオブジェクト が一つの場合は、カメラの動作は相対的に考えて似たようなものになります。 材質に対する両面性 .side というプロパティに、0、1、2 をセットする事によって、前面、背面、両面というテクスチャの描画方法が決まります。これは、カメラがその3Dオブジェクトの中に入ってしまった時にとても意味があるのですが、ここではテクスチャ自身に透過PNG を使って効果を解りやすくしています。 通常、テクスチャは透過していなてので、3Dオブジェクトの中は意味が無い場合も多いですが、例えば球状の空を球の裏側に貼りつけて、カメラを中に置く場合もあり、カメラの視点移動が前提で、外側から見る必要がある場合もあるかもしれません。
// side THREE.FrontSide = 0; THREE.BackSide = 1; THREE.DoubleSide = 2;この両面パラメータは、r55 からかどうかは確認していませんが、つい最近の過去のバージョンからr50 から仕様変更がされています。[Change log] Object3D's flipSided and doubleSided properties are now Material's side propertyjavascript - Three.js: The Surface is One-Sided - Stack Overflow その他にも調整の為の仕様変更 MeshLambertMaterial の Canvas での動作が、MeshBasicMaterial と同様に変更されています。これは以前からの仕様変更に伴う調整がやっと追いついた感じのものですが、以前はキューブそのものに色が付いていたので、それはそれで代替えがあったらと思うのですが、調べるのは困難です。
<link rel="stylesheet" href="https://googledrive.com/host/0B9Jymqpro6gSVlB5Wm52U29wTlE/jquery/jqcss/black-tie/jquery-ui-1.8.20.custom.css" type="text/css" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.0/jquery-ui.min.js"></script>
<script type="text/javascript" src="http://homepage2.nifty.com/lightbox/three//three.min55.js"></script>
<style type="text/css">
td {
padding: 5px;
}
#slider1, #slider2, #slider3 {
width: 200px;
margin: 0 0 0 20px;
}
#container_three canvas {
background: url(https://lh4.googleusercontent.com/-qGsOjUoCvyw/T-VZ62iPMSI/AAAAAAAAG5Y/O0NhvMUvm9U/s200/_img.png);
border: solid 1px #000000;
}
</style>
<table>
<tr>
<td style='width:120px;'>前面/後面/両面</td> <td></td><td><div id="slider1"></div></td><td> </td>
</tr><tr>
<td>スケール</td><td> -</td><td><div id="slider2"></div></td><td> + </td>
</tr><tr>
<td>x 座標を回転</td><td> -</td><td><div id="slider3"></div></td><td> + </td>
</tr>
</table>
<div id="base" style=''>
<div id="container_three"></div>
</div>
<script type="text/javascript">
// *************************************
// 前面 / 後面 / 両面
// *************************************
$(function () {
$("#slider1").slider({
range: "min",
step: 1,
min: 0,
max: 2,
value: 0,
slide: function (event, ui) {
material.side = ui.value;
}
});
});
// *************************************
// スケール
// *************************************
$(function () {
$("#slider2").slider({
range: "min",
step: 0.01,
min: -4,
max: 4,
value: 1,
slide: function (event, ui) {
cube.scale.x = cube.scale.y = cube.scale.z = ui.value;
}
});
});
// *************************************
// x 座標を回転
// *************************************
$(function () {
$("#slider3").slider({
range: "min",
step: 0.01,
min: -1 * Math.PI,
max: 1 * Math.PI,
value: 0.6,
slide: function (event, ui) {
cube.rotation.x = ui.value;
console.log(ui.value)
}
});
});
var v_width = 500;
var v_height = 500;
var v_iamge_url = 'http://toolbox.winofsql.jp/image/basic_elf.png';
var container;
var camera, scene, renderer;
var mesh;
var material,cube
init();
animate();
function init() {
container = document.getElementById( 'container_three' );
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera( 50, 1, 1, 10000 );
camera.position.set( 0, 0, 650 );
scene.add( camera );
var image = new Image()
image.onload = function () {
var texture = new THREE.Texture( this );
texture.needsUpdate = true;
material = new THREE.MeshLambertMaterial({map: texture });
material.overdraw = true;
// キューブ
cube = new THREE.Mesh(new THREE.CubeGeometry(200, 200, 200), material);
cube.rotation.x = 0.6;
scene.add(cube);
};
image.src = v_iamge_url;
renderer = new THREE.CanvasRenderer();
renderer.setSize( v_width, v_height );
container.appendChild( renderer.domElement );
}
function animate() {
requestAnimationFrame( animate );
render();
}
function render() {
if ( cube ) {
cube.rotation.y -= 0.005;
}
renderer.render( scene, camera );
}
</script>
WebGLRenderer に差し替えて実行する時の注意 Canvas では、Image オブジェクトにに別ドメインを指定しても問題無かったのですが、WebGL ではエラーになっていたので注意して下さい とりあえずすぐテストしたい場合 http://toolbox.winofsql.jp/tool_html_links.htm
|
|
【Three.jsの最新記事】
- r69 で再チェックしました / Three.js(r53) で追加された LineDashedMaterial のサンプルを簡素化して解りやすくしました
- Three.js(r69) : Lineメソッドで使用する頂点の配列を持つ Geometry オブジェクト
- Three.js : 好きな背景透過画像を飛翔させる
- Three.js : Vector3 オブジェクトのコンストラクタ / result = x || 0; という書き方
- Three.js : WebGL限定の Cube テクスチャによる『パノラマ背景』
- Three.js : 球を使った『パノラマ背景』
- Three.js の canvas_geometry_birds の『鳥』だけを取り出して考える
- ユーザ定義の THREE.UserCubes1 オブジェクトを使って、カメラでその周りを周回する
- Three.js : カメラが発射する Ray(光) にヒットするオブジェクトを総取りする
- Three.js の点線表示の詳細( 特に Windows で WebGL では線の太さは実装なし )
- Three.js の座標系の向きを テクスチャを貼りつけたキューブと jQuery のスライダー で確認する
- Three.js を使って DAZStudio でレンダリングした女性をちょっと湾曲した炎の前に立たす 〜 Three.js エフェクトの可能性
- Three.js 3Dゲームワールド(を夢見て)リアルサンプル
- Three.js の webgl_geometry_minecraft.html で使われている Cube World を使って、3D モデルを乗っけてカメラを動かすとかなりいい雰囲気です
- THREE.Scene クラスの remove メソッド
- Three.js の個別ソースを使った部分カスタマイズ
- Three.js : あるスケールでの平均した座標集合の作成




























