http://jsdo.it/sworc/rJym/fullscreen Three.js で苦労する事 とにかく、Three.js は 3D を扱うので奥が深いです。専門用語も最初はさっぱり解りませんし、3D に関する日本語の解説を探すのも一苦労です。 参考 カメラのレンズの種類 さらに Three.js のアップデートは速度は速く、頻繁に行われるのでいろいろ注意しなければならない事も多いのですが、何より『パラメータ』の多さに頭がクラクラします。 アプリケーションを作っていても、その時は覚えていますが、『カメラの引数の意味はええ・・っと』みたいな事は良くあって、こんな時は実際に動かすのが一番なんですが、準備に結構時間もかかったり。 で、そんな時の為の方法としては、jQuery の スライダーを使うといいと思うのです。 jsdo.it のメリット 何と言っても、他人のコードを試してみたい時に『フォーク』すれば、直ぐに開発環境が整うところです。自分にしても、自分のサイトで環境を作るより手軽に公開できて、自分で再確認もできます。 自分のサイトだと、安心しきっちゃってコードが間違っていても、気が付かない事も多いですが、jsdo.it に貼ったとたんいろいろ気になってチェックもしますし、一石三鳥 ぐらいの効果もあります。 jsdo.it では、フルスクリーンの実行画面でソースコードを見れば全体像がわかるし、公開ページでは JavaScript と HTML と CSS を分けて書くようになっているので分析もしやすいです。 唯一・・・ちょっと重いので、埋め込みコードは使わないほうがいいです。例えば、埋め込みコードをブログに貼ると、そこが固まるせいでブログがそこ以降表示されなかったりします。
<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-color:#e0e0e0;
border: solid 1px #000000;
}
</style>
<table>
<tr>
<td style='width:50px;'>x 座標</td><td> -</td><td><div id="slider1"></div></td><td> + </td>
</tr><tr>
<td>y 座標</td><td> -</td><td><div id="slider2"></div></td><td> + </td>
</tr><tr>
<td>z 座標</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">
// *************************************
// x 座標
// *************************************
$(function () {
$("#slider1").slider({
range: "min",
step: 1,
min: -200,
max: 200,
value: 0,
slide: function (event, ui) {
cube.position.x = ui.value;
}
});
});
// *************************************
// y 座標
// *************************************
$(function () {
$("#slider2").slider({
range: "min",
step: 1,
min: -200,
max: 200,
value: 0,
slide: function (event, ui) {
cube.position.y = ui.value;
}
});
});
// *************************************
// z 座標
// *************************************
$(function () {
$("#slider3").slider({
range: "min",
step: 1,
min: -450,
max: 450,
value: 0,
slide: function (event, ui) {
cube.position.z = ui.value;
}
});
});
</script>
<script type="text/javascript">
var v_width = 500;
var v_height = 500;
var v_iamge_url = 'https://lh5.googleusercontent.com/-tpwrnApVF0Q/UJZ7JFriUeI/AAAAAAAALAY/sTLRuOhyX1U/s640/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, -100, 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>
関連する記事 THREE.PerspectiveCamera ( 透視法射影カメラ ) の引数 MeshLambertMaterial について 全てを確認したわけではありませんが、知ってる範囲において MeshLambertMaterial は、ライト効果を対応しているのですが、Canvas では意味を持ちません。以前作者さんが Canvas でも対応しようとしていた時期もありましたが、いろいろ問題があって、Canvas では MeshBasicMaterial と同等かな・・・とだいたいの感覚で思っていました。 Canvas 環境で、少し古いバージョンでは、 MeshLambertMaterial で、透過 png を使ってもキューブが透過されなかったのですが、( MeshBasicMaterial では透過されていた ) この 55 バージョンでは透過されるようです。 いずれにしても、本来の表現力は WebGL 使って初めて発揮されます。 ( WebGL は画像(Imageオブジェクト)が同一ドメインでないと使えないようですが )
|
|
【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 でキューブの『テクスチャ面設定』とスケール・X軸回転を 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 : あるスケールでの平均した座標集合の作成




























