目次
#contents
*目的 [#scd22263]
Colladaは多くの3Dアプリケーションで作成できる3次元モデリングの標準的なフォーマットです。~
GoogleEarthのKMLフォーマットと組み合わせることで、GoogleEarth上で高度な表現が可能となります。~
また、ColladaはKMLと同様XMLファイルなのでXMLパッケージを用いて根気さえあれば、Rのプログラムで作成可能ですが、~
根気がない方はGoogle3DギャラリーからColladaデータを仕入れることができます。~
仕入れたColladaデータを種にして、KMLを作成することで、GoogleEarth上で3Dモデルを自由に表示できます。~
注)この方法はTMEを参考にしています。http://thematicmapping.org/~

*コメント [#fdaf6383]
#comment(below)
- XMLパッケージでColladaデータ(***.dae)を変更を追加。これでモデルの色や透過度も変えられます。 -- [[okinawa]] &new{2009-05-08 (金) 18:37:55};
- XMLパッケージでdoc.kmlを変更を追加。簡単でしょ? -- [[okinawa]] &new{2009-05-08 (金) 15:38:40};
- おっ!考えてますね。平面や空中に3Dグラフ表示ってのもありだと思ってます。要はGEをキャンバスにして何を作れるかということですね。 -- [[okinawa]] &new{2009-05-08 (金) 08:36:41};
- GEの主題図表示は、一度に世界全体を見ることができないこと。この技術を使って、NHKスペシャルでよく使われるような、メルカトルまたはミラー図法で変換された地図上での立体グラフの表示を、GEの平面で表示される場所に、世界地図画像を表示して、Collada お図形をトッピングすれば... --  &new{2009-05-07 (木) 15:41:37};
- ごくろうさまです --  &new{2009-05-03 (日) 20:47:54};

*本家および参考 [#a8c27f11]
http://www.khronos.org/collada/~
https://collada.org/mediawiki/index.php/Main_Page~
スキーマ:http://www.google.co.jp/url?sa=t&source=web&ct=res&cd=2&url=http%3A%2F%2Fwww.khronos.org%2Ffiles%2Fcollada_spec_1_4_1_jp.pdf&ei=s-0DSpqyEYTY7APVmrCeAw&usg=AFQjCNFF5BpYJ5lA5_tGk3alwxvnOBfJDQ&sig2=pxvLWaFEJ6qME80iUQBUqA~
[[XMLパッケージ覚書]]~
-http://www.khronos.org/collada/~
-https://collada.org/mediawiki/index.php/Main_Page~
-スキーマ:http://www.google.co.jp/url?sa=t&source=web&ct=res&cd=2&url=http%3A%2F%2Fwww.khronos.org%2Ffiles%2Fcollada_spec_1_4_1_jp.pdf&ei=s-0DSpqyEYTY7APVmrCeAw&usg=AFQjCNFF5BpYJ5lA5_tGk3alwxvnOBfJDQ&sig2=pxvLWaFEJ6qME80iUQBUqA~
-[[XMLパッケージ覚書]]~
*サンプルデータ [#a232a5a8]
Google3Dギャラリー:http://www.google.com/intl/ja/sketchup/3dwh/~
**Cube [#kb28f286]
http://sketchup.google.com/3dwarehouse/details?mid=27544873c4d76907c1fae53e8cd38b70&prevstart=0~
~
Cubeをダウンロードした後、zipを解凍する。(このデータは基本的にkmzです。拡張子をkmzにすれば、圧縮されたままGEに表示可能です)~
 フォルダ名:Cube
 doc.kml :kmlデータ
 models - Untitled.dae :Colladaデータ本体。拡張子は.dae
 textures.txt :テクスチャーのパス
~
doc.kmlをダブルクリックして、GoogleEarthを起動させると立方体が表示される。~
#ref(ColladaとR/cube.png,30%)~
doc.kml~
 <?xml version='1.0' encoding='UTF-8'?>
 <kml xmlns='http://earth.google.com/kml/2.1'>
 <Folder>
    <name>model</name>
    <description><![CDATA[Created with <a href="http://sketchup.google.com/">Google SketchUp 7.0.1</a>]]></description>
    <DocumentSource>SketchUp</DocumentSource>
 <visibility>1</visibility>
 <LookAt>
 <heading>262.191</heading>
 <tilt>44.1136</tilt>
 <latitude>40.01699238066453</latitude>
 <longitude>-105.28299564475</longitude>
 <range>24.53937342688344</range>
 <altitude>19.53467884911257</altitude>
 </LookAt>
 <Folder>
 <name>Tour</name>
 <Placemark>
 <name><![CDATA[Camera]]></name>
 <visibility>1</visibility>
 <LookAt>
 <heading>262.191</heading>
 <tilt>44.1136</tilt>
 <latitude>40.01699238066453</latitude>
 <longitude>-105.28299564475</longitude>
 <range>24.53937342688344</range>
 <altitude>19.53467884911257</altitude>
 </LookAt>
 </Placemark>
 </Folder>
  <Placemark>
    <name>Model</name>
    <description><![CDATA[]]></description>
    <Style id='default'>
    </Style>
    <Model>
        <altitudeMode>relativeToGround</altitudeMode>
        <Location>
            <longitude>-105.283000000000</longitude>
            <latitude>40.017000000000</latitude>
            <altitude>0.000000000000</altitude>
        </Location>
        <Orientation>
            <heading>0</heading>
            <tilt>0</tilt>
            <roll>0</roll>
        </Orientation>
        <Scale>
            <x>1.0</x>
            <y>1.0</y>
            <z>1.0</z>
        </Scale>
        <Link>
            <href>models/Untitled.dae</href>
        </Link>
    </Model>
  </Placemark></Folder>
 </kml>
モデルの大きさをコントロールしているのは、
        <Scale>
            <x>1.0</x>
            <y>1.0</y>
            <z>1.0</z>
        </Scale>
の部分なので、この部分を調整することでモデルを変形させることができる。~
例えば、<z>10.0</z>をとすることで、モデルに高さを与えることができる。~
#ref(ColladaとR/cube2.png,30%)~
モデルのデータへのリンクは~
       <Link>
           <href>models/Untitled.dae</href>
       </Link>
で、~
モデルの位置は
       <Location>
           <longitude>-105.283000000000</longitude>
           <latitude>40.017000000000</latitude>
           <altitude>0.000000000000</altitude>
       </Location>
で表されている。ここを変更することで、任意の位置にモデルを表示させることが出来る。(カメラ位置等も同時に変更する必要がある)~
#ref(ColladaとR/cube3.png,30%)~
**Earth(テクスチャー付きモデル) [#jdac5075]
http://sketchup.google.com/3dwarehouse/details?mid=e28ae2b252fb673dd3dc6a02a09b40ca&prevstart=0~
 フォルダ名:Earth
 doc.kml :kmlデータ
 models - Earth.dae :Colladaデータ本体
 images - texture0.jpg :テクスチャー画像本体
 textures.txt :テクスチャーのパス
~
doc.kmlの構造は、Cubeと同じ。imagesフォルダ内にテクスチャー画像本体、textures.txtにテクスチャーのパスが書かれている。~
~
textures.txt
 <../images/texture0.jpg> <../images/texture0.jpg>
#ref(ColladaとR/earth.PNG,30%)~

*XMLパッケージでdoc.kmlを変更 [#o44738f4]
注)R2.9.0 XML1.96で実行。R2.9.0 XML2.3だと ' がうまく処理できない。(Mac,Win)~
 library(XML)
 doc<-xmlTreeParse("c:/Cube/doc.kml")
 x<-xmlRoot(doc)
nameの取り出し
 > x[["Folder"]][["name"]]
 <name>Untitled</name>
LookAtの取り出し
 > x[["Folder"]][["LookAt"]]
 <LookAt>
  <heading>262.191</heading>
  <tilt>44.1136</tilt>
  <latitude>40.01701377579173</latitude>
  <longitude>-105.2827974289775</longitude>
  <range>21.03339538452086</range>
  <altitude>19.53467884911257</altitude>
 </LookAt>
カメラ位置
 > x[["Folder"]][["Folder"]][["Placemark"]][["LookAt"]]
 <LookAt>
  <heading>262.191</heading>
  <tilt>44.1136</tilt>
  <latitude>40.01701377579173</latitude>
  <longitude>-105.2827974289775</longitude>
  <range>21.03339538452086</range>
  <altitude>19.53467884911257</altitude>
 </LookAt>
 > 
Locationの取り出し
 > x[["Folder"]][["Placemark"]][["Model"]][["Location"]]
 <Location>
  <longitude>-105.283000000000</longitude>
  <latitude>40.017000000000</latitude>
  <altitude>0.000000000000</altitude>
 </Location>
 > 

Scaleの取り出し
 > x[["Folder"]][["Placemark"]][["Model"]][["Scale"]]
 <Scale>
  <x>1.0</x>
  <y>1.0</y>
  <z>1.0</z>
 </Scale>
 > 
モデルの高さを10倍にしてノードに書き込む。書き込む時はxmlNode()を使う。
 > x[["Folder"]][["Placemark"]][["Model"]][["Scale"]][["z"]]<-xmlNode("z","10.0")
 > x[["Folder"]][["Placemark"]][["Model"]][["Scale"]][["z"]]
 [1] "<z>10.0</z>"
保存
 >saveXML(x,"c:/Cube/doc2.kml",prefix = '<?xml version="1.0" encoding="UTF-8"?>\n')
#ref(ColladaとR/cube2.png,30%)~
Earthモデルでこんなこともできる
#ref(ColladaとR/earth2.PNG,30%)~

*XMLパッケージでColladaデータ(***.dae)を変更 [#c3c4de1f]
次にColladaデータを変更してみよう。変更場所は、主に色関係の所だけだ。~
 <?xml version="1.0" encoding="utf-8"?>
 <COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
 〜中略〜
   <library_effects>
      <effect id="FrontColorNoCulling-effect" name="FrontColorNoCulling-effect">
         <profile_COMMON>
            <technique sid="COMMON">
               <phong>
                  <emission>
                     <color>0.000000 0.000000 0.000000 1</color>
                  </emission>
                  <ambient>
                     <color>0.000000 0.000000 0.000000 1</color>
                  </ambient>
                  <diffuse>
                     <color>1.000000 1.000000 1.000000 1</color>
                  </diffuse>
                  <specular>
                     <color>0.330000 0.330000 0.330000 1</color>
                  </specular>
                  <shininess>
                     <float>20.000000</float>
                  </shininess>
                  <reflectivity>
                     <float>0.100000</float>
                  </reflectivity>
                  <transparent>
                     <color>1 1 1 1</color>
                  </transparent>
                  <transparency>
                     <float>0.000000</float>
                  </transparency>
               </phong>
            </technique>
            <extra>
               <technique profile="GOOGLEEARTH">
                  <double_sided>1</double_sided>
               </technique>
            </extra>
         </profile_COMMON>
      </effect>
      <effect id="ForegroundColor-effect" name="ForegroundColor-effect">
         <profile_COMMON>
            <technique sid="COMMON">
               <phong>
                  <emission>
                     <color>0.000000 0.000000 0.000000 1</color>
                  </emission>
                  <ambient>
                     <color>0.000000 0.000000 0.000000 1</color>
                  </ambient>
                  <diffuse>
                     <color>0.000000 0.000000 0.000000 1</color>
                  </diffuse>
                  <specular>
                     <color>0.330000 0.330000 0.330000 1</color>
                  </specular>
                  <shininess>
                     <float>20.000000</float>
                  </shininess>
                  <reflectivity>
                     <float>0.100000</float>
                  </reflectivity>
                  <transparent>
                     <color>1 1 1 1</color>
                  </transparent>
                  <transparency>
                     <float>0.000000</float>
                  </transparency>
               </phong>
            </technique>
            <extra>
               <technique profile="GOOGLEEARTH">
                  <double_sided>1</double_sided>
               </technique>
            </extra>
         </profile_COMMON>
      </effect>
   </library_effects>
 〜中略〜
   <scene>
      <instance_visual_scene url="#SketchUpScene"/>
   </scene>
 </COLLADA>
色関係のタグは2種類ある。ここでは最初のタグだけ変えてみる。~
で、プログラムは~
 library(XML)
 doc<-xmlTreeParse("c:/Cube/models/Untitled.dae")
 x<-xmlRoot(doc)
各要素の値を取り出す
 > x[["library_effects"]][[1]][[1]][[1]][["phong"]][["emission"]][["color"]]
 <color>0.000000 0.000000 0.000000 1</color>
 > x[["library_effects"]][[1]][[1]][[1]][["phong"]][["ambient"]][["color"]]
 <color>0.000000 0.000000 0.000000 1</color>
 > x[["library_effects"]][[1]][[1]][[1]][["phong"]][["diffuse"]][["color"]]
 <color>1.000000 1.000000 1.000000 1</color>
 > x[["library_effects"]][[1]][[1]][[1]][["phong"]][["transparency"]][["float"]]
 <float>0.000000</float>
値の変更(emissionを赤に)
 > x[["library_effects"]][[1]][[1]][[1]][["phong"]][["emission"]][["color"]]<-xmlNode("color","1 0 0 1")
 > saveXML(x,"c:/Cube/models/Untitled.dae",prefix = '<?xml version="1.0" encoding="UTF-8"?>\n')
#ref(ColladaとR/cube4.PNG,30%)~
**Colladaのタグ<phong>要素 [#mf8517f8]
Colladaのスキーマ参照
 <phong>要素の子要素
 <emission>このオブジェクトから放射される光源の量
 <ambient>このオブジェクトから放射される環境光の量
 <diffuse>このオブジェクトから反射される拡散光の量
 <specular>このオブジェクトから反射される鏡面反射光の量
 <transparency>反射されたカラーに追加する完全鏡面反射の量を0.0〜1.0のスカラー値として宣言

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Google
WWW を検索 OKADAJP.ORG を検索