擬似反射マップを探していて面白いサイトを見つけた。


http://www.360cities.net/




妄想焼きおにぎり-360cities


世界中のパノラマ写真が見られる。


すげーきれいに撮られていて、撮影者はどこにいるんだ?




--------------




さて前回3D-PDFに使用した反射マップをつけるJavascriptの解説。


簡単なスクリプトの知識はあるものという前提とします。


分からない場合は、javascriptの解説のサイトなどを参考にして見てください。




//ここからJavascriptの内容


if( scene.materials.getByName("refmap") != undefined){

var reftex = scene.materials.getByName("refmap").diffuseTexture.getImage();

}


//上記の部分は3D-PDF内にあるマテリアル(材質)


//の名前で"refmap"というものがあるかを調べています。


//その後 reftexという変数を作って


//refmapマテリアルが持っているテクスチャ画像を取り込んでいます。




for (var m=0; m < scene.materials.count ; m++){

//for文を使っています。


//mという変数を作って、0、1、2、・・・マテリアル全部の数 まで


//カウントしていきます。





if( scene.materials.getByIndex(m) != undefined){


//マテリアルを番号順に調べて、ちゃんと存在している場合


// 次の{・・・}内のスクリプトを実行します。






var cmat = scene.materials.getByIndex(m)


//cmatという変数を作ってm番のマテリアルを取り込んでいます。




if( reftex != null){


//一番最初のスクリプトでreftexが作成されたか?


//reftexが存在する場合次の{・・・}内のスクリプトを実行します。







if( cmat.name.search(/mirror/i) != -1 ){


//cmatに入れたマテリアルの名前にmirrorという文字が含まれて


//いるか調べて次の{・・・}内のスクリプトを実行します。





//このmirrorの部分を任意の文字に置き換えて


//続く行に材質パラメータの変更を書き加えることで


//反射マップに限らず、材質の変更を作ることが可能です。






cmat.reflectionTexture.setImage(reftex);


//cmatに入れたマテリアルに反射マップを適用しています。







cmat.reflectionTexture.amount = 1.0;


//反射マップの強さをは1.0(最大)にしています。




cmat.diffuseColor.set(0,0,0);


//拡散反射の色をRGBで指定しています。


//0,0,0だと黒になります。


//1,1,1が最大値で白になります。


//鏡は拡散反射を持たないので黒にしましたが


//この一文を消せば、拡散反射のある鏡になります。




cmat.ambientColor.set(0,0,0);


//環境光に対する明るさを指定しています。






}//if( cmat.name.search・・・の範囲

}//if( reftex != null){の範囲

}//if( scene.materials.getByIndex・・・の範囲


}//ここまでがforで繰り返される範囲


//ここまでがJavascriptの内容





BentleyViewから書き出した3D-PDFでは


マテリアルの名前に日本語を使った場合、うまく文字検索できないので


マテリアルには半角英数文字を使用した方が良いです。




ここに出てきた以外のパラメータを変更する場合は


Acrobat 3D JavaScript Reference
を参考にしてください。



(※130619追記:関連記事3D-PDFの機能拡張Javascriptを公開