phn形式について

「phn形式について」の編集履歴(バックアップ)一覧に戻る

phn形式について - (2008/08/17 (日) 07:26:49) のソース

#right(){このページの最終更新日時&update(j)}
|はじめに。&br()このページは「Phun本家のWiki(英語)において、有志により取りまとめられた、[*.phn]ファイルのフォーマットに関する内容」([[*ソース>http://phun.cs.umu.se/wiki/.phn]])を参考に作成したものです。「Phunのシーンデータがどのように保存されているか」に関してまとめています。現在、Phun ver3.5までの内容となっています。&br()完全な日本語訳というわけではありません。追記、削除した内容もあります。&br()Phun ver4.0以降はphnファイル形式が大きく変更されました。内容は[[本家wikiの.phnのページ>http://www.phunland.com/wiki/.phn]](英語)で確認することができます。|

目次
#contents()

*概要
Phunで作成したデータはphn形式で保存されます。このphn形式はPhunに特有のファイル形式です(Phunのバージョンによっても内容が異なる場合があります)。WindowsでPhunをインストールした場合、シーンデータは、C:\Program Files\Phun\Scenesという位置に保存されます。他人の作成したシーンは[[Phun.jpのPhnデータアップロード掲示板>http://www.phun.jp/upload/phn/cgi-bin/upload.cgi]]や[[Phun box>http://www.phunland.com/wiki/Phunbox/ja]]などで手に入れることができます。[[Phun.jpのphn再生方法>http://www.phun.jp/manual/manual9.html]]も参照してください。

[*.phn]ファイルはテキストデータで開くと人間が読める形式になっています。もちろん編集が可能です。
[*.phn]ファイルの編集はあくまで自己責任でお願いします。編集時にはファイルのバックアップを取りましょう。
注意:大文字、小文字は別の文字として扱われます。表記を間違えないようにしましょう。

Phunには7種類の物質の種類があります(※ベータ版4.0以降Box(長方形)とPen(ペン)が加わりました。)。
|circle  |円|
|fixjoint|固定具|
|hinge   |蝶番|
|plane   |平面|
|polygon |多角形|
|spring  |バネ|
|water   |水|

これらを記述するために、[*.phn]ファイル内は、基本的に以下のような構造をしています。
セミコロンは区切りを表します。末尾を表しているわけではありません。最後のプロパティと最後のオブジェクトの後ろには付かないようです。
>version = 1;
>{
>  性質1 = 性質1の値;
>  性質2 = 性質2の値
>};
>{
>  性質3 = 性質3の値;
>  性質4 = 性質4の値
>}



*Circles(円)
円は、Circleツールを用いて作成されます。タイヤやボールなどに使われます。

円の持つ性質は以下のとおりです。

|[*.phn]での記述|どのような値をとるか              |説明|
|angle          |小数                              |角度([[ラジアン単位>http://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%B8%E3%82%A2%E3%83%B3]])。-pi~pi の間で正規化されてると思う。|
|body           |非負整数                          |もしこの記述がなければ(body = ...の行が抜けていたら)、後述のidと同じ値になります。&br()bodyの値が等しいオブジェクトは結合されている1つのオブジェクトとして認識されます。body = 0のときは背景に固定されます。|
|collide        |true もしくは false               |他のオブジェクトと衝突するならtrue、しないならfalse。Ver.3.5ではcollideSetとcollideWaterという属性になっています。|
|color          |3つの小数(0~1)                   |RGBで色を表します。(左から順に[赤Red,緑Green,青Blue])。HSLではありません。| 
|density        |非負小数                          |物質の密度です。なお、空気の密度は0.01程度、水の密度は1.0程度です。| 
|friction       |非負小数                          |物質の摩擦係数です。値が大きいほど滑りにくくなります。|
|id             |自然数                            |固有のGeometry IDです。これはバネや固定具、蝶番などを取り付けるのに使用します。|
|pos            |2組の小数[x,y]                    |オブジェクトの中心座標[x,y]を設定します。|
|radius         |非負小数                          |円の半径を設定します。| 
|restitution    |非負小数                          |物質の反発係数です。値が大きいほどよく弾みます。| 
|tracked        |true もしくは false               |Follow object(カメラ追尾)をするならtrue、しないならfalse。追尾できるオブジェクトは1つのシーンに1個だけです。|
|type           |"circle"                          |物質の種類を選択します。|



*Fix joints(固定具)
fixjointはFixateツールを使用することで作成され、画面上では×マークで表されます。
2つのオブジェクトを固定することによって1つのオブジェクトとして扱うことができ、body値を同じにするのと似た効果が得られます。

fixjointの持つ性質は以下のとおりです。

|[*.phn]での記述|どのような値をとるか              |説明|
|color          |3つの小数(0~1)                   |RGBで色を表します。(左から順に[赤Red,緑Green,青Blue])。HSLではありません。| 
|geom0          |対象オブジェクトのGeometry ID     |固定する2つのオブジェクトのうちの1つのGeometry IDです。|
|geom0pos       |2つの小数                         |固定する位置を設定します。取付対象となるオブジェクトの中心を原点とした相対座標なので注意。|
|geom1          |対象オブジェクトのGeometry ID     |固定する2つのオブジェクトのうちのもう1つのGeometry IDです。|
|geom1pos       |2つの小数                         |固定する位置を設定します。取付対象となるオブジェクトの中心を原点とした相対座標なので注意。|
|size           |非負小数                          |表示される×マークのサイズを選択します。|
|type           |"fixjoint"                        |物質の種類を選択します。|



*Hinges(蝶番)
hingeはHingeツールを使用することで作成され、画面上では◎マークで表されます。
オブジェクトに回転軸を設けることができ、モーターとして回転運動をさせることもできます。

蝶番の持つ性質は以下のとおりです。

|[*.phn]での記述|どのような値をとるか              |説明|
|ccw            |true もしくは false               |後記のmotorの回転方向を選択します。falseで時計回り、trueで反時計回りです。|
|color          |3つの小数(0~1)                   |RGBで色を表します。(左から順に[赤Red,緑Green,青Blue])|
|geom0          |対象オブジェクトのGeometry ID     |蝶番を取り付ける2つのオブジェクトのうちの1つのGeometry IDです。|
|geom0pos       |2つの小数                         |蝶番を固定する位置を設定します。取付対象となるオブジェクトの中心を原点とした相対座標なので注意。|
|geom1          |対象オブジェクトのGeometry ID     |蝶番を取り付ける2つのオブジェクトのうちのもう1つのGeometry IDです。|
|geom1pos       |2つの小数                         |蝶番を固定する位置を設定します。取付対象となるオブジェクトの中心を原点とした相対座標なので注意。|
|motor          |true もしくは false               |蝶番に回転運動をさせるかどうか選択します。|
|motorSpeed     |非負小数                          |モーターの最高回転数を設定します。rpmではなくrad/秒なので注意。|
|motorTorque    |非負小数(最大は+inf)              |モーターの回転の強さを設定します。|
|size           |非負小数                          |表示される◎マークのサイズを選択します。|
|type           |"hinge"                           |物質の種類を選択します。|



*Planes(平面)

planeはPlaneツールを使用することで平面を作成することができます。

平面の持つ性質は以下のとおりです。

|[*.phn]での記述|どのような値をとるか              |説明|
|angle          |小数                              |角度([[ラジアン単位>http://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%B8%E3%82%A2%E3%83%B3]])。-pi~pi の間で正規化されてると思う。|
|body           |非負整数                          |もしこの記述がなければ(body = ...の行が抜けていたら)、後述のidと同じ値になります。&br()bodyの値が等しいオブジェクトは結合されている1つのオブジェクトとして認識されます。body = 0のときは背景に固定されます。|
|color          |3つの小数(0~1)                   |RGBで色を表します。(左から順に[赤Red,緑Green,青Blue])|
|dist           |decimal value (pos./neg.)         |length of normal|
|friction       |非負小数                          |物質の摩擦係数です。値が大きいほど滑りにくくなります。|
|id             |自然数                            |固有のGeometry IDです。これはバネや固定具、蝶番などを取り付けるのに使用します。|
|normal         |Couple decimal values (pos./neg.) |direction of normal|
|pos            |2つの小数                         |オブジェクトの中心座標[x,y]を指定します。|
|restitution    |非負小数                          |物質の反発係数です。値が大きいほどよく弾みます。| 
|type           |"plane"                           |物質の種類を選択します。|



*Polygons(多角形)

PhunのBoxツールとBrushツールで作成されたオブジェクトは多角形として表されます。
これを編集することによって閉じた形であれば何でも作ることができます。 [[simple polygons>http://en.wikipedia.org/wiki/Simple_polygon ]]

多角形の持つ性質は以下のとおりです。

|[*.phn]での記述|どのような値をとるか              |説明|
|angle          |小数                              |角度([[ラジアン単位>http://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%B8%E3%82%A2%E3%83%B3]])。-pi~pi の間で正規化されてると思う。|
|body           |非負整数                          |もしこの記述がなければ(body = ...の行が抜けていたら)、後述のidと同じ値になります。&br()bodyの値が等しいオブジェクトは結合されている1つのオブジェクトとして認識されます。body = 0のときは背景に固定されます。|
|collide        |true もしくは false               |他のオブジェクトと衝突するならtrue、しないならfalse。Ver.3.5ではcollideSetとcollideWaterという属性になっています。|
|color          |3つの小数(0~1)                   |RGBで色を表します。(左から順に[赤Red,緑Green,青Blue])|
|density        |非負小数                          |物質の密度です。なお、空気の密度は0.01程度、水の密度は1.0程度です。| 
|friction       |非負小数                          |物質の摩擦係数です。値が大きいほど滑りにくくなります。|
|id             |自然数                            |固有のGeometry IDです。これはバネや固定具、蝶番などを取り付けるのに使用します。|
|pos            |2つの小数                         |オブジェクトの中心座標[x,y]を指定します。|
|restitution    |非負小数                          |物質の反発係数です。値が大きいほどよく弾みます。| 
|tracked        |true もしくは false               |Follow object(カメラ追尾)をするならtrue、しないならfalse。追尾できるオブジェクトは1つのシーンに1個だけです。|
|type           |"polygon"                         |物質の種類を選択します。|
|vecs           |小数                              |オブジェクトの頂点座標[x,y]のリストです。[[頂点1],[頂点2]…]|


Phunは無効な座標を読み込むことができないので、多角形の頂点座標の設定は特別な注意が必要です。
座標と座標を結ぶ線が交差しないように順序良く頂点座標を設定してください。

簡単な正方形を例にすると正しい設定は下のようになります。

[ [-1,-1],[1,-1],[1,1],[-1,1] ]

しかし、下の設定は読み込めません。

[ [-1,-1],[1,1],[-1,1],[1,-1] ]

[-1,-1]と[1,1]を結ぶ線と[-1,1]を[1,-1]結ぶ線が重なってしまっています。


3.5現在、PolygonとCircleの違いは、名前の他は形状がvecsかradiusで指定されているかだけ。



*Springs(バネ)

springはSpringツールを使用することで、オブジェクトにバネを取り付けることができます。
元の長さから伸ばしたり縮めたりするほど大きな力が発生します。

バネの持つ性質は以下のとおりです。

|[*.phn]での記述|どのような値をとるか              |説明|
|color          |3つの小数(0~1)                   |RGBで色を表します。(左から順に[赤Red,緑Green,青Blue])。HSLではありません。| 
|dampingFactor  |Positive decimal                  |制動係数です。バネが振動し続けるのを抑えます。|
|geom0          |対象オブジェクトのGeometry ID     |バネを取り付ける2つのオブジェクトのうちの1つのGeometry IDです。|
|geom0pos       |2つの小数                         |バネを固定する位置を設定します。取付対象となるオブジェクトの中心を原点とした相対座標なので注意。|
|geom1          |対象オブジェクトのGeometry ID     |バネを取り付ける2つのオブジェクトのうちのもう1つのGeometry IDです。|
|geom1pos       |2つの小数                         |バネを固定する位置を設定します。取付対象となるオブジェクトの中心を原点とした相対座標なので注意。|
|length         |非負小数                          |何も力がかかっていない時のバネの長さです。|
|size           |非負小数                          |画面に表示されるバネの大きさを設定します。|
|strengthFactor |非負小数                          |バネ定数 k を設定します。 [[F = -kx(フックの法則)>http://en.wikipedia.org/wiki/Hooke%27s_law]]|
|type           |"spring"                          |物質の種類を選択します。|



*Water(水)

Phun内で水は粒子として表されます。
simple water rendering がONの時、水粒子は半径約0.1の青い円として表されます。
大量の水を表現する為には個々の水粒子のリストを[*.phn]内に全て書かなければいけません。

水の持つ性質は以下のとおりです。

|[*.phn]での記述|どのような値をとるか              |説明|
|type           |"water"                           |物質の種類を選択します。|
|vecs           |小数                              |水粒子の[x,y]座標リストです。[[水粒子1の座標],[水粒子2の座標]…]|



*Ver.3.5から追加されたcollideSetとcollideWaterについて

collideWaterはtrue/falseで設定できますが、collideSetはA,B,Cに割り当てられた数値を加算した値によって組み合わせを判別しているようです。
また、多角形と円は何もない時の値が0なのに対し、平面では-8となっています。

|CollisionGroup|多角形と円の値|平面の値|
|なし          |0|-8|
|A             |1|-7|
|B             |2|-6|
|C             |4|-4|
|AB            |3|-5|
|AC            |5|-3|
|BC            |6|-2|
|ABC           |7|-1|

*その他
**物質の前後関係について
物体の前後関係は、原則として次の表のとおりです。
|奥|water(水)|
|↓|plane(平面), polygon(多角形), circle(円)|
|手前|fixjoint(固定具), hinge(蝶番), spring(バネ)|
この表で同列にあるものに関しては、[*.phn]ファイル内で先頭にあるオブジェクトの方が、Phunを開いたときに奥に表示されます。
これは、&bold(){[*.phn]ファイルが読み込まれるときに、先頭のオブジェクトから順に配置される}と考えることができます。

**Phunツールについて
現在、[*.phn]ファイルを作成・編集するツールが数多く公開されています。
ツールを知らない方は、[[ツール解説]]のページが参考になるでしょう。

//機械翻訳とか見ながら訳してみました。下手な文章ですいません
//
//私がこのページを作成したのですが、最初の数行で止めていたので、ちゃんと仕上がっていて感動しました。GJです。
//物体の前後関係に関する文章を追記しました。目次もつけました。(tatt61880)
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。