擬似反射マップを探していて面白いサイトを見つけた。
すげーきれいに撮られていて、撮影者はどこにいるんだ?
--------------
さて前回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を公開