中央に点線でキューブが回るだけのサンプルですが、LineDashedMaterial の確認だけならこれで十分です。 cube ファンクションで 12 個の 線が作成されていますが、一つの線に Vector3 座標を二つ使って線を引いています。THREE.LinePieces を使っているので、二点のペアをを繋げるので連鎖はしません。デフォルトの THREE.LineStrip を使うと、点が連鎖して描画されるので、一筆書きになります。 このサンプルでは正確に立方体を作成する為に、『二点のペア』を使っているので、同一座標がある事に注意して下さい。 r53 では WebGL、r56 で Canvas ※ WebGL では、 geometryCube.computeLineDistances(); でキューブのデータを完成させる必要があります。また、{ antialias: true } を WebGLRenderer の引数に渡さないと、ラインの表示の乱れが大きいです 更新履歴にそうあります。このサンプルコードは r56 で動作しますし、r53 〜 r55 までなら、WebGLRenderer で動作するはずです。ですが、
いずれにしても点線が動作するのは Google Chrome か Firefox だけなので注意して下さい。IE11 で動作していました。 canvas でのデモ WebGL でのデモ ( three69.min.js のみで動作します ) ▼ CanvasRenderer ※ 利便性の為に、jQuery を使用しています。
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="http://winofsql.jp/js/three/three69.min.js"></script>
<script type="text/javascript" src="http://winofsql.jp/js/three/renderers/Projector.js"></script>
<script type="text/javascript" src="http://winofsql.jp/js/three/renderers/CanvasRenderer.js"></script>
<div id="three_canvas_container"></div>
<script type="text/javascript">
var WIDTH = 600;
var HEIGHT = 600;
var renderer, scene, camera, stats;
var object;
$("#three_canvas_container")
.css({
width: WIDTH+"px",
height: HEIGHT+"px"
});
init(); // 仕様作成
animate(); // アニメーション開始
// ***********************************
// 描画仕様作成
// ***********************************
function init() {
// 遠近法カメラ作成
camera = new THREE.PerspectiveCamera(
// 視野の上下角度
40,
// カメラビューのアスペクト比
WIDTH / HEIGHT,
// 表示可能な一番近い距離
1,
// 表示可能な一番遠い距離
200
);
// 座標におけるカメラの位置
camera.position.z = 150;
// シーン作成
scene = new THREE.Scene();
// 一辺 50 のキューブの座標を作成
var geometryCube = cube( 50 );
// ラインでキューブを作成
object = new THREE.Line(
geometryCube,
// 点線の仕様を決定
new THREE.LineDashedMaterial( {
color: 0xffaa00,
dashSize: 3,
gapSize: 1,
linewidth: 2
} ),
// 二つの座標をペアとして使用する
THREE.LinePieces
);
// シーンにオブジェクト(ラインで作成したキューブ)を追加
scene.add( object );
// Canvas で描画します
renderer = new THREE.CanvasRenderer( );
// 描画サイズの設定
renderer.setSize( WIDTH, HEIGHT );
// 描画領域の色を設定します
renderer.setClearColor( 0x404040 );
// 描画対象とする three_canvas_container に Three.js の
// 描画システムを実装
var container = $( '#three_canvas_container' )[0];
container.appendChild( renderer.domElement );
}
// ***********************************
// ラインによるキューブ作成
// ***********************************
function cube( size ) {
var h = size * 0.5;
var geometry = new THREE.Geometry();
geometry.vertices.push( new THREE.Vector3( -h, -h, -h ) );
geometry.vertices.push( new THREE.Vector3( -h, h, -h ) );
geometry.vertices.push( new THREE.Vector3( -h, h, -h ) );
geometry.vertices.push( new THREE.Vector3( h, h, -h ) );
geometry.vertices.push( new THREE.Vector3( h, h, -h ) );
geometry.vertices.push( new THREE.Vector3( h, -h, -h ) );
geometry.vertices.push( new THREE.Vector3( h, -h, -h ) );
geometry.vertices.push( new THREE.Vector3( -h, -h, -h ) );
geometry.vertices.push( new THREE.Vector3( -h, -h, h ) );
geometry.vertices.push( new THREE.Vector3( -h, h, h ) );
geometry.vertices.push( new THREE.Vector3( -h, h, h ) );
geometry.vertices.push( new THREE.Vector3( h, h, h ) );
geometry.vertices.push( new THREE.Vector3( h, h, h ) );
geometry.vertices.push( new THREE.Vector3( h, -h, h ) );
geometry.vertices.push( new THREE.Vector3( h, -h, h ) );
geometry.vertices.push( new THREE.Vector3( -h, -h, h ) );
geometry.vertices.push( new THREE.Vector3( -h, -h, -h ) );
geometry.vertices.push( new THREE.Vector3( -h, -h, h ) );
geometry.vertices.push( new THREE.Vector3( -h, h, -h ) );
geometry.vertices.push( new THREE.Vector3( -h, h, h ) );
geometry.vertices.push( new THREE.Vector3( h, h, -h ) );
geometry.vertices.push( new THREE.Vector3( h, h, h ) );
geometry.vertices.push( new THREE.Vector3( h, -h, -h ) );
geometry.vertices.push( new THREE.Vector3( h, -h, h ) );
return geometry;
}
// ***********************************
// アニメーション用繰り返し処理
// ***********************************
function animate() {
// アニメーション用のこの関数の再呼び出しの予約
requestAnimationFrame( animate );
// 描画
render();
}
// ***********************************
// 実際の描画
// ***********************************
function render() {
// アニメーション用の時間間隔
var time = Date.now() * 0.001;
// x 軸で回転
object.rotation.x = 0.25 * time;
// object.rotation.y = 0.25 * time;
// 描画実行
renderer.render( scene, camera );
}
</script>
|
|
【Three.jsの最新記事】
- 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 の座標系の向きを テクスチャを貼りつけたキューブと 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 : あるスケールでの平均した座標集合の作成







中央に点線でキューブが回るだけのサンプルですが、LineDashedMaterial の確認だけならこれで十分です。
cube ファンクションで 12 個の 線が作成されていますが、一つの線に Vector3 座標を二つ使って線を引いています。




















