ColladaとR
の編集
http://www.okadajp.org/RWiki/?Collada%E3%81%A8R
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
目次 #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パッケージ覚書]]~ *サンプルデータ [#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のスカラー値として宣言
タイムスタンプを変更しない
目次 #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パッケージ覚書]]~ *サンプルデータ [#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のスカラー値として宣言
テキスト整形のルールを表示する
添付ファイル:
cube3.png
1243件
[
詳細
]
cube.png
1240件
[
詳細
]
cube4.PNG
1193件
[
詳細
]
earth.PNG
1222件
[
詳細
]
earth2.PNG
1235件
[
詳細
]
cube2.png
1231件
[
詳細
]