godai-kaihatsu / gondwana

https://gondwana.godai.co.jp/
2 stars 0 forks source link

GeoObject に Billboard 機能が欲しい #25

Closed usagi closed 6 years ago

usagi commented 6 years ago

GeoObject は低レベルAPIをサポートし任意のポリゴンを表現できるが、ユーザーにとっては「点」の情報を表示するために、

  1. XY-YZ-ZXの3平面にテクスチャーを持ち、どの方位からもおよそ適当に表示される擬似的なビルボード様のポリゴンを作る
  2. 正四面体やUV球を作る
  3. 1枚の面を作りcamera情報に基いてビルボード化するためにRotationを操作する

などの何れもユーザーレベルでは比較的高コストな手間を要する。

GeoObject に新たに Billboard: bool プロパティーを追加し、 API でこれを設定可能とする事でビルボードを用いたいユーザーのコストを低減したい。

また、この対応により、 #23 のようなフォーマットで点を可視化するコストも合理化できる。

usagi commented 6 years ago

API 追加

/// @param id GeoObject ID
/// return ビルボード設定が有効な場合は true, それ以外は false
bool IsBillboard( int32 id );
/// @param id GeoObject ID
/// @param is_billboard ビルボード設定を有効にする場合は true, それ以外は false
void SetBillboard( const bool is_billboard ) const;
usagi commented 6 years ago

API Reference 書いた:

usagi commented 6 years ago

実装した。

curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.New" }'
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetVertexLocal", "params": { "id": 0, "vertices": [ 0.0, 0.0, 0.0, -1000, 0, -1000, 1000, 0, -1000, -1000, 0, 1000, 1000, 0, 1000 ] } }'
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetUV", "params": { "id": 0, "uvs": [ 0.5,0.5, 0,1, 1,1, 0,0, 1,0 ] } }'
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetLocationByAltLatLon", "params": { "id": 0, "location": [ 1898.0, 42.826667, 140.811389 ] } }'
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetIndex", "params": { "id": 0, "indices": [ 0,1,2, 0,3,1, 0,2,4, 0,4,3, 0,2,1, 0,1,3, 0,4,2, 0,3,4 ] } }'
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetMaterialType", "params": { "id": 0, "material_type": "Texture" } }'
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetBillboard", "params": { "id": 0, "is_billboard": true } }'

image

常にカメラを向く地物を扱えるようになった。

usagi commented 6 years ago

テクスチャーを EmissiveColorFactor = 1.0 にすれば昼夜によらず見える絵看板になる。

curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetMaterialParam", "params": { "id": 0, "material_params": { "EmissiveColorFactor": 1 } } }'

image

usagi commented 6 years ago

この実装は 4.0.0.11 に取り込む。