割とまじめにgeo系をやる必要が出てきたのでメモ。
d3.js の geometry 変換を THREE.js 上のレンダラで利用できないかいろいろ調べていて、
d3で地図を描く時、標準になっている GeoJSONという地図データを表現するためのJSONフォーマットが良さそうという事に。*1
この記事を参考に、GeoJSONを読んでTHREE.jsのマテリアルとして表示させてみた。
記事にあるように、 こちらのライブラリで一度 GeoJSONを読み込んで、 d3 の geometry 変換で経緯座標系をメルカトル地図に変換、 SVG Pathにする。地図座標 -> デカルト座標系への変換。
それをTHREE Meshマテリアルのパスにして3Dオブジェクトとして生成する。
国内の地図データが必要なときは、国土交通省国土政策局GISHPのサイトで 国土数値情報のデータが公開されているので、
ここから shape 形式のデータが利用できる。
shap形式のデータを GeoJSON に直すには、 GDAL というコマンドラインのツール や QGIS というpython製の素敵なツールがある。
こちらの記事でとても詳しく紹介されている。
応用して openframeworks でもメッシュマテリアルとして使えないかやってみた。
ラップして addon化してみた。未完成だけどサクっと地図を書きたいときに。
変換式は d3.js のコード内の geometry らへんを参考にした。
今のところメルカトル、パノラマ投影法、ランベルト正積方位図法、ステレオ投影法のモード切り替え可能。
d3 すばらしいので geometry に限らずと THREE.js の合わせ技が他にもないか探っていきたいところ。
*1 TopoJSON という GeoJSON を圧縮したフォーマットがあり、こちらも d3 では標準的なフォーマットになっている。モビリティの事を考えても有利だし TopoJSONに対応したい。
ofxGeoJSON is an addon for openFrameworks to load and draw GeoJSON format files.
Development Repository on GitHub
Converting Geo Coordinate to Cartesian Coodinate (Mercator / Equirectangular / Azimuthal Equarlarea / Streographic / Spherical Projection)
The “ARTSAT: Introduction” corner documenting research and development related to the satellite art project was set up as part of the “Open Space 2012″ exhibition with the aim to introduce the activities of the “ARTSAT: Art and Satellite Project”.
http://artsat.jp/exhibition/#phase2
“Open Space 2012″ exhibition is divided into three parts/periods.
“Physical Satellite” comprises various experimental and creative activities themed around satellite art. I developed "Geomagnetic Texture" a part of this division,
The “INVADER” art satellite has a built-in magnetic sensor for measuring geomagnetic fields. By measuring geomagnetism it is possible to determine the satellite’s attitude like using a compass. In addition, in consideration of influences on both the satellite’s temperature and electrical power, INVADER was fitted with a permanent magnet on the inside, in order to stabilize the satellite’s attitude as it rotates around an axis defined by the axis of geomagnetism. The magnetic sensor’s time variations obtained by way of simulation are visualized in the form of moiré patterns.
需要があるか分からないが、SuperColliderでDMX制御についてメモ。
インターフェースとしては ENTTEC USB Proがメジャーな様。 SuperColliderではExtensionでquarksに dmxというのが存在する。結局はSerialPortでパケット整形してあげてるようだ。
これでサクっとできると思ったのだが、DMX512を送るのに baud rate 57600で、シリアルパケットが詰まるので結局oscを受けてシリアルパケットを整形する部分をPythonでする事にした。
https://github.com/c0z3n/pySimpleDMX この辺りのコードが参考になった。
OSCを送る際にfloatやIntegerの列でパケットを作ってしまうと、型認識のパケットがいちいち入ってしまい効率が悪いので、 512ch分のInt8Arrayを作ってあげてパケットを作るとblob形式になる。
これはSuperColliderの.sendMsgメソッドの仕様で例えば以下のようにする。NetAddr("localhost", 3000).sendMsg("/example_blob", Int8Array[0,1,2]); とblob型でOSCを送信する。
今回は一つの灯体にrgb 3ch分で使い色の表現を行い、またenttecへの送りのserial usbのビット深度は8bit intだったので、 この方式は使えた。
また、グラデーション表現やOSCの送りでfadeアニメーションするようなDMX.scライブラリの拡張カテゴリなども今回用意した。
https://github.com/moxuse/korogaru-pavilion/blob/master/lib/class/DMXPlus.sc