phn形式について


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

このページの最終更新日時 2008年10月21日 (火) 03時52分15秒
|はじめに。
このページは、[*.phn]ファイルのフォーマットに関する内容をまとめたものです。Phunのシーンデータがどのように保存されているかを知ることができます。現在、Phun ver3.5までの内容となっています。※Phun ver4.0以降はphnファイル形式が大きく変更されました。ver4.0以降の内容→本家wikiのPhnの項目

目次

概要

Phunで作成したデータはphn形式で保存されます。このphn形式はPhunに特有のファイル形式です(Phunのバージョンによっても内容が異なる場合があります)。WindowsでPhunをインストールした場合、シーンデータは、C:\Program Files\Phun\Scenesという位置に保存されます。他人の作成したシーンはPhun boxPhun.jpのPhnデータアップロード掲示板で手に入れることができます。ダウンロードしたシーンデータファイルの開き方も参照してください。

[*.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 小数 角度(ラジアン単位)。-pi~pi の間で正規化されてると思う。
body 非負整数 もしこの記述がなければ(body = ...の行が抜けていたら)、後述のidと同じ値になります。
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 小数 角度(ラジアン単位)。-pi~pi の間で正規化されてると思う。
body 非負整数 もしこの記述がなければ(body = ...の行が抜けていたら)、後述のidと同じ値になります。
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

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

[*.phn]での記述 どのような値をとるか 説明
angle 小数 角度(ラジアン単位)。-pi~pi の間で正規化されてると思う。
body 非負整数 もしこの記述がなければ(body = ...の行が抜けていたら)、後述のidと同じ値になります。
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(フックの法則)
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を開いたときに奥に表示されます。
これは、 [*.phn]ファイルが読み込まれるときに、先頭のオブジェクトから順に配置される と考えることができます。

groupについて

Phun beta 3.5以前では、ctrl + [*] ([*]は数字キー)でグループ化を行い、[*]の数字を押すことで、そのグループを選択状態にすることができました。このとき、
group = 7;
といった情報がphnファイルに加えられます(この場合はctrl + [7])。
このグループ化は、Phun beta 4.0以降ではctrl + Gでのグループ化に置き換えられたため、Phun beta 4.0以降では、phnファイル内にgroupの項目が使えなくなりました。

Phunツールについて

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

ツールボックス

下から選んでください:

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