ラベル streetview の投稿を表示しています。 すべての投稿を表示
ラベル streetview の投稿を表示しています。 すべての投稿を表示

2012年2月13日月曜日

Google Street View 上に Three.js の 3D グラフィックを表示

実行結果は

http://psychedesire.webcrow.jp/stmon/

キャラクタがボヨンボヨンします。
WebGL対応のブラウザで開いてください。Chromeとかなら大丈夫だと思うよ。



コチラより。
今のところGoogleに怒られていません。
まぁ、アクセス自体が無いからねぇ。

3D オブジェクトは、メタセコイアで作り、それを Blender にインポートして、Blender から .js に変換しました。
mesh.rotation.x とかが動かない?よくわからないので、
camera.rotaion.x とかで無理矢理キャラクタをボヨンボヨン動かしています。

殆どのやり方は、


空が狭い: Three.jsでMQOデータを表示するまで

こちらを参考にしましたが、違うやり方をしたのが2点あって、
1点が、
Blender に メタセコイアのデータ .mqp をインポートする場合は、
 
 Blender2.5~2.6 - とあるPGの研究記録Ⅱ(レコーダー)

このインポータを使いました。Blender の最新 2.6.1 にも対応しています。

2点目が、
Blender から Three.js への エクスポータが、現状 2.6.0 にしか対応していないので、
 \Blender\2.61\scripts\addons\io_mesh_threejs\__init__.py
の28行目の 2.6.0 を 2.6.1 に書き換えました。

苦労した点、というわけじゃないけど、
ブラウザで3Dオブジェクトを表示したときに、どこにオブジェクトがあるのか、わからなかったので、
カメラの位置とかを色々動かして、なんとか最適なカメラポジションとか設定しました。
なんせ、3Dがわからないので。
コツとしては(?)オブジェクトを、ステージに対して、凄く巨大にすればいいみたいです。
あと、何故か、上下逆転する?ので、Blender上でY軸に180度回転させたりしています。

画像的に言うと、メタセコで






こうやって作って、
Blenderで

こうしてから、Three.js にエクスポートしてる感じです。。。
よくわからないけど、 これでうまくいった。
取り合えず、素材を6個作るので限界だった~。
3Dで凄い造型を作る人って、凄いよね。

マウスのイヴェント処理に応じて、3Dオブジェクトのカメラ位置を変えたり、
連動してストリートビューの表示を変えたり出来たら、見た目部分はOKかなーと思います。
あとは、部品だよね。これは。あまりにショボすぎるけど、
フリーのやつ使うのもねー。せっかくだから自作したいもんねー。

Googleに怒られるまで、チョコチョコイジって遊びたいですね。

2012年2月11日土曜日

Google Street View にモンスターが出現するWebアプリ作った。



超適当です。アハハハハ。
 ストモンと言います。ここで見れますよ。
http://psychedesire.webcrow.jp/stmon/

Google Map API の v3 というのが出ていて、
それだと、 Flash ではなく、 html5 で Street Viewが見れるようなので、
思い切ってやっちゃいました!エヘヘヘヘ。
知らなかったわぁ~。

Googleストリートビュー内で銃を撃てる『Google Shoot View』が閉鎖

まぁ、こういう前例があるので、直ぐに使えなくなると思いますけども。

GoogleChromeでしか動かないかも知れません。
他のブラウザは試してないです。

郵便番号を入れると、
その郵便番号近辺の地域で卵が孵ります。
で、勝手にモンスターの種類が決まります。

その内容でよければ、名前をつけて保存してください。
保存したモンスターは、ストモンって書いたアイコンを押せば見れます。
他は何も出来ません。

ほんとは、Three.js で作った3Dオブジェクトを表示させたかったけど、
心の中の悪魔が、
『どうせGoogleに消せって言われるんでしょ?』
と言ったので、凄く適当になりました。


製作時間10時間ほどです。
データストレージは WebStorage(localStorage) なので、
サーバ側に何か残したりしていません。
郵便番号投げると住所のJSONを返してくれるAPIがあったので、
使わせていただきました。

郵便番号検索API by グルーブテクノロジー株式会社

スマホと連動すれば楽しいのになぁとか、
夢が広がるんですけどね。残念だなぁ。

2012年2月8日水曜日

Three.js と Google Street View で 街にモンスター出現

なんて出来たら楽しいんじゃないかと思ったので、やってみた。

みんなが使っている、インターネットを見るためのソフト(ブラウザ)に、
Javascriptでプログラムを組んだりするだけで、
3Dの画像なんかを表示する技術が出来つつあります。

Three.js というJavascriptフレームワークを使うと、3Dグラフィックをブラウザに楽に描画できます。

でも、3Dグラフィックをコードだけでプログラミングするのはめんどうくさい。
巷には、 ShadeやPoser、3DSMAX、メタセコイア、六角大王、Blenderなど、
3Dグラフィックを出来るだけ簡単に作れるようなソフトがあって、
そんなソフトと同じように、Three.js用のデータを作れるものが、ThreeFabという名前で公開されています。

Moongift さんの紹介記事
Three.js対応。Webブラウザ上で3Dモデルを作成「ThreeFab」

で、これを使いながら、GoogleStreetView上に、自分の作った3Dグラフィックを描画できないかという実験です。
あ、結果から言うと、失敗です。

まずは、ThreeFab の準備。
ThreeFab はGit 上にありますので、
Git が既に使えるという状態であれば、
Windowsのコマンドプロンプトを開いて、
cd c:\
git clone git://github.com/blackjk3/threefab
とすれば、
Cドライブ直下の threefab というディレクトリ に ファイルがダウンロードされ展開されます。
C:\threefab\index.html を GoogleChrome にドラッグアンドドロップすれば、
ThreeFab が使えます。(この使い方であってるのか?取り合えず動いた)
で、実際に3Dオブジェクトを作ってみた。





なんだこのタコチュウ。
で、出来たので(多分10分くらいで作った)、右上のエクスポートを押すと、
なんかいっぱいJavascriptコードが表示されるので、どっかにコピーしておきます。

次は Google Street View。
まずは、

http://code.google.com/intl/ja/apis/maps/documentation/javascript/v2/services.html

ここの左上の登録してAPIキーを取得をクリックして、
APIキーを取得します。
使うウェブサイトのアドレスを入れたら、APIキーが取得できると思うので、
Javascript のところに書いてあるものをまるっとコピーします。

で、どうやって使うかというと、

ストリートビューを表示する

ここに書いてあるのを改造しちゃいましょう。でへ。てへぺろ。
ていうか、openspc2.org って、色々なサンプルがあって凄いよねぇ。

で、なんかうまいことやろうと思ったけど、ThreeFab から export した Javascript のコードが動かない。
よく見ると、ところどころ、必要ないっぽい }); が存在している…
そこの部分をコメントアウトしても、なんか何にも表示されないし。
まぁ、仕方ない。こういう時は、あきらめよう。検索しても何も出てこない。
つか、そもそも Three.js の使い方が判らないからなー。

Three.js のサンプルコードを表示することにします。
Three.js もGit にあります。
いちいち clone とかしなくても、 Git のページをちょっと下にスクロールすると、
Minified Library って書いたリンクがあるので、それをダウンロードして使うと良いです。
その下にサンプルコードがある(赤い線の立方体がアニメーションするやつ)ので、
それをまんまコピペした。

で、ぽこぽこ書いてみた。
[CSS]
        <style>
*{margin:0;padding:0;vertical-align:middle;}
#streetview{
    position:absolute;
    top     :0;
    left    :0;
    width   :640px;
    height  :480px;
}
#three{
    position:absolute;
    top     :0;
    left    :0;
    width   :640px;
    height  :480px;
}
        </style>

[Javascript]
// Three.js のサンプルコード
    var camera, scene, renderer,geometry, material, mesh;
    function init() {
        scene = new THREE.Scene();
        // camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 10000 );
        camera = new THREE.PerspectiveCamera( 75, 640 / 480, 1, 10000 );
        camera.position.z = 500;
        scene.add( camera );
        geometry = new THREE.CubeGeometry( 200, 200, 200 );
        material = new THREE.MeshBasicMaterial( { color: 0xff0000, wireframe: true } );
        mesh = new THREE.Mesh( geometry, material );
        scene.add( mesh );
        renderer = new THREE.CanvasRenderer();
        // renderer.setSize( window.innerWidth, window.innerHeight );
        renderer.setSize("640","480");
        // document.body.appendChild( renderer.domElement );
        $("#three").append(renderer.domElement);
    }

    function animate() {
        // note: three.js includes requestAnimationFrame shim
        requestAnimationFrame( animate );
        render();
    }

    function render() {
        mesh.rotation.x += 0.01;
        mesh.rotation.y += 0.02;
        renderer.render( scene, camera );
    }

// StreetView の 描画
var makeStreetView = function(callback){
    var streetObj = new GStreetviewPanorama(document.getElementById("streetview"));
    var sibuya = new GLatLng(35.660748,139.701762);
    streetObj.setLocationAndPOV(sibuya);
    if(callback && typeof(callback) == "function){callback();}
};

$(document).ready(function(){
    makeStreetView(function(){
        init();
        animate();
    });
});

[html]
    <body>
        <div id='three'></div>
        <div id='streetview'></div>
    </body>

みたいにしたけど、残念。Google Street View はFlashで動くので、z-index が効きません。
なので、Google Street View の上に、3Dオブジェクトを描画することが出来ませんでした。
Google Street View の下のレイヤに、赤い立方体が回っている感じになった。

Flash コンテンツが z-index を無視して覆い被さってしまう件
[flash][javascript] Flash の z-index を Javascript から有効にする
z-indexを無視してFlashが上に重なってしまうのに対処

色々調べたけど、まぁ、無理だなぁ。
あとからパラメタ書き換えたけど、うまくいかなかった。

つか、そもそも、Google Street View のAPI利用規約とかにひっかかりそうなので、
だめだろうな。うむ。


『地図上のロゴや属性を改変したり、見えにくくしないでください。』

って書いてあるしね。
でもまぁ、ブラウザで Three.js を使ったりすることを体験できたから良かった。
サンプルをみてるだけで満足することが多いので、
何かしら自分で作ってみることって大事ですよね。
結局サンプルはっつけただけの記事書いておいて、ですけど、そう思います。