↑上や←左のタブでコンテンツを選べます
[一つ前] [一つ次] [前の未読] [次の未読] [スレッド表示][新規投稿] [この記事に返信] [記事一覧]

 3008. SUFファイルの仕様    糸瓜     05/30(日) 09:12
  3009. Re: SUFファイルの仕様    ozaki     05/30(日) 11:59
 ┃┗ 3014. Re: SUFファイルの仕様    AceCreek     05/30(日) 15:19
  3021. SUFファイル・ATRファイル・FRMファイルの仕様    たかつ(ドーガ)     05/31(月) 18:32
  ┗ 3026. Re: SUFファイル・ATRファイル・FRMファイルの仕様    糸瓜     05/31(月) 19:50

SUFファイル・ATRファイル・FRMファイルの仕様
[パスワード:     ]
#3021   2004/05/31(月) 18:32   投稿者: たかつ(ドーガ)   参照記事: 3008

ちょっと発掘してみました。
X68000時代の「DoGA CGAシステム」のマニュアルに
載っていたものを再入力して、最近の追加仕様を修正したものです。

---ここから---
○基本用語
  オブジェクト: 形状ファイルにおいて空間座標に定義された物体。
  プリミティブ: 形状の定義における最も基本的な要素。
  アトリビュート: プリミティブの表面の属性。

○基本方針
  ・ファイルの形式はテキストファイル
  ・語と語の間は1つ以上の空白で区切られる
  ・'('、')'、'{'、'}' の前後には空白は無くてもよい
  ・/* から */ までの間はコメントになる

  ・座標系は右手系であり、
     物体の前方向がX軸正方向
     物体の左方向がY軸正方向
     物体の上方向がZ軸正方向
   となる

◎形状ファイル(*.suf)

○オブジェクトの宣言
 形状ファイルには1個以上のオブジェクトの宣言が存在する。
オブジェクトの宣言は以下のようになる

---書式ここから---
obj suf <オブジェクト名>
{
  <オブジェクト本体>
}
---書式ここまで---

○オブジェクト名
  任意の文字列。大文字・小文字の区別はしない
  空白を含む場合には、" で括る必要がある。


○オブジェクト本体
 <オブジェクト本体>は複数の形状定義文から成り立っている。
 形状定義文には、
  ・アトリビュート指定
  ・プリミティブ指定
 がある

○アトリビュート指定
 アトリビュート指定を行うと、以後のプリミティブのアトリビュートが
 変更される。オブジェクト本体内で何度でも指定できる。
---書式ここから---
atr <アトリビュート名>
---書式ここまで---
 アトリビュートの実体はアトリビュートファイルで定義される

○アトリビュート名
  任意の文字列。大文字・小文字の区別はしない
  空白を含む場合には、" で括る必要がある。

○プリミティブ指定
 プリミティブ指定は、poly、shade、uvpoly、uvshade の4種類がある

○プリミティブ poly
 プリミティブ poly では、頂点のX、Y、Z座標を多角形の頂点の数だけ並べる

---書式ここから---
prim poly (
  <頂点1座標X> <頂点1座標Y> <頂点1座標Z>
  <頂点2座標X> <頂点2座標Y> <頂点2座標Z>
  <頂点3座標X> <頂点3座標Y> <頂点3座標Z>
   ...
)
---書式ここまで---

○プリミティブ shade
 プリミティブ shade では、頂点の座標の法線ベクトルを頂点の数だけ並べる

---書式ここから---
prim poly (
  <頂点1座標X> <頂点1座標Y> <頂点1座標Z> <頂点1法線X> <頂点1法線Y> <頂点1法線Z>
  <頂点2座標X> <頂点2座標Y> <頂点2座標Z> <頂点2法線X> <頂点2法線Y> <頂点2法線Z>
  <頂点3座標X> <頂点3座標Y> <頂点3座標Z> <頂点3法線X> <頂点3法線Y> <頂点3法線Z>
   ...
)
---書式ここまで---

○プリミティブ uvpoly
 プリミティブ uvpoly では、頂点の座標とマッピング用のUV座標を並べる

---書式ここから---
prim poly (
  <頂点1座標X> <頂点1座標Y> <頂点1座標Z> <頂点1U> <頂点1V>
  <頂点2座標X> <頂点2座標Y> <頂点2座標Z> <頂点2U> <頂点2V>
  <頂点3座標X> <頂点3座標Y> <頂点3座標Z> <頂点3U> <頂点3V>
   ...
)
---書式ここまで---

○プリミティブ uvshade
 プリミティブ uvshade では、頂点の座標・法線・UV座標を並べる

---書式ここから---
prim poly (
  <座標X> <座標Y> <座標Z> <法線X> <法線Y> <法線Z> <U> <V>
  <座標X> <座標Y> <座標Z> <法線X> <法線Y> <法線Z> <U> <V>
  <座標X> <座標Y> <座標Z> <法線X> <法線Y> <法線Z> <U> <V>
   ...
)
---書式ここまで---


◎アトリビュートファイル(*.atr)

○アトリビュートの宣言
 アトリビュートファイルには、1個以上のアトリビュートの宣言が存在する。
 アトリビュートの宣言は次のようになる
---書式ここから---
atr <アトリビュート名>
{
  <アトリビュート本体>
}
---書式ここまで---

○アトリビュート本体
 アトリビュート本体は1個以上のアトリビュート文からできている。
 アトリビュート文の種類は次のようなものがある
 アトリビュート文の無いパラメータについては、0 が指定されたものとする。

col ( <色> )   : 色(0〜1)

amb ( <色> )   : アンビエント(0〜1)

dif ( <色> )   : ディフューズ(0〜1)

spc ( <色1> <色2> <色相:数値> )   : スペキュラー
                <色1> : 強さ 大きいほど輝点は明るくなる
                <色2> : サイズ 大きいほど輝点は小さくなる
                <色相> : 0の時、輝点は光源色になる
                     1の時、輝点は物体色になる

ref ( <色> )   : 反射率(0〜1)
tra ( <色> )   : 透過率(0〜1)

opt ( <オプション指定> ... )  : オプションパラメータ
                 (今後、仕様変更の可能性有り)

・以下はマッピング関係

mapwind ( <u1> <v1> <u2> <v2> ) : テクスチャの画像範囲
            mapwind 指定がある場合は、画像ファイルの
            (u1,v1)-(u2,v2)を切り出してテクスチャ画像として使う
            指定が無い場合は、画像全体を使用する。

mapsize ( <u1> <v1> <u2> <v2> ) : オブジェクト中のUV座標の範囲
            形状ファイルの中のプリミティブ指定でのUV座標の範囲
            プリミティブ指定で、この範囲を超えるUV座標が指定
            された場合には、繰り返しとなる。

colormap ( <画像ファイル名> ) : col パラメータに対応するテクスチャ
bumpmap ( <画像ファイル名> ) : バンプマッピングに対応
ambmap ( <画像ファイル名> ) : amb パラメータに対応
difmap ( <画像ファイル名> ) : dif パラメータに対応
tramap ( <画像ファイル名> ) : tra パラメータに対応
refemap ( <画像ファイル名> ) : ref パラメータに対応
spcmap ( <画像ファイル名> ) : spc パラメータの強さに対応
hmap ( <画像ファイル名> ) : spc パラメータの色相に対応
glowpoermap ( <画像ファイル名> ) : emittion (後述) パラメータに対応

○色
 色指定は
  rgb ( <数値> <数値> <数値> )
 もしくは
  <数値>
 のどちらかの形式となる。数値のみの時は、RGBすべて同じとみなす。

○画像ファイル名
  任意の文字列。大文字・小文字の区別はしない
  空白を含む場合には、" で括る必要がある。
  相対パス指定の場合は、アトリビュートファイルのあるフォルダからの
  相対となる。

○オプション指定

emittion <半径> <強さ> : glow を発生させる。現状では<半径>は意味を持たない
castshadow       : 他の物体に影を落とす
receiveshadow      : 影が落ちる
edge          : ポリゴンの輪郭を線描画する
celllookedge      : オブジェクト全体の輪郭のみ線描画する
draw <色> <幅>     : エッジ描画をポリゴンの輪郭に太さ<幅>にする
draw <色> rate <幅>   : エッジの太さを画面横幅の<幅>倍にする
emphasis        : ポリゴンの向きに合わせてエッジの太さを強調する
shader <数> ( <最小値> <最大値> <色> ) ... :
             セルアニメ調の階調を落とした色計算を行う
             <数>で階調数を指定する。
             明るさが<最小値>と<最大値>の間の部分の色は <色>になる
celllookspecular <最小値> <最大値> :
             セルアニメ調の階調を落としたスペキュラーを描画する
             スペキュラー値が<最小値>以下は0に
             スペキュラー値が<最大値>以上は1になる



◎フレームファイル(*.frm)

○フレームファイルの構成
  フレームファイルでは各フレームごとのデータを順にならべて記述している。
  1フレーム分のデータは<環境定義>部分と<フレーム定義>部分にわかれる。
  <環境定義>部分は省略可能

  以下の記述方法について
    [ … ] : 囲まれた部分は省略可能
    ...  : 直前の記述の繰り返し
    |   : 前後の記述のどちらか

○環境定義
  <環境定義>の書式
    env { <環境文> ... }
  <環境文>には次の種類がある。
    back ( <色> )  : 背景色(ベタぬり)
    back ( <画像ファイル名> [<画像番号>] [image|sphere] )
            : 背景画像指定 画像ファイルが動画の場合、<画像番号>
             指定がない場合は1枚目の画像を、指定がある場合は
             その画像を背景として使用する。
             image がある場合は、作画画面に背景画像をあわせる。
             sphere の場合(デフォルト)は、背景球に画像を貼る。
    star ( <数> )  : 背景星表示。全天球に<数>個の星を配置する。
    depth ( <数> <色> )
            : 空気遠近指定。<数>は半減距離で、この距離はなれた
             物体は本来の色と<色>指定を半分ずつ混合した色になる。

    refmap ( <画像ファイル名> )
            : 環境マッピング指定。アトリビュート指定で反射率のある
             物体には <画像ファイル名> で指定した画像が背景球にある
             ように写り込む。


○フレーム定義
  <フレーム> 定義の書式
    fram { <フレーム文> ... }
  <フレーム文> には次のような種類がある。
    ・座標変換指定
    ・オブジェクト指定
    ・視点指定
    ・光源指定
    ・ターゲット指定
    ・オプション指定

○座標変換指定
  以降に続くフレーム文に対し座標変換を行う。
  mov ( <x> <y> <z> )   : 平行移動
  rotx ( <x> )      : x軸まわりの回転(指定単位は度)
  roty ( <y> )      : y軸まわりの回転
  rotz ( <z> )      : z軸まわりの回転
  scal ( <x> <y> <z> )  : 各軸方向の拡大
  vec ( <fx> <fy> <fz> <ux> <uy> <uz> )
              : ( <fx> <fy> <fz> ) が x軸(前)で
               ( <ux> <uy> <uz> ) が z軸(上)になるように回転する
  mat ( <a11> <a12> <a13> <a14>
     <a21> <a22> <a23> <a24>
     <a31> <a32> <a33> <a34>
     <a41> <a42> <a43> <a44> )
              : アフィン変換行列指定による変換

○オブジェクト指定
  obj <オブジェクト名>

○視点指定
  eye [opt <オプション指定> ... ] deg ( <角度> )
               : 水平方向の画角を指定
  eye [opt <オプション指定> ... ] scr ( <距離> <大きさ> )
               : スクリーンまでの距離と幅を指定
  オプション指定
    focus ( <距離>|target <半径> <範囲> )
               : ピンボケ処理を行う。<距離>の前後<範囲>に
                ピントが合い、最大ボケ半径を<半径>にする。
                <半径>は画面横幅に対する比率。
                <距離> の代わりに target と指定した場合は、
                ターゲット指定までの距離でピントが合う。

○ターゲット指定
  target          : 視点の向きをtarget指定のある座標に向ける

○光源指定
  light [ opt <オプション指定> ... ] pal ( <色> <ベクトル> )
               : <ベクトル> 方向に照らす平行光源
  light [ opt <オプション指定> ... ] point ( <色> <距離> )
               : <距離> でちょうど <色> になるように減衰する点光源
                (距離の二乗に反比例)
  light [ opt <オプション指定> ... ] spot ( <色> <ベクトル> <サイズ> [<距離>] )
               : <ベクトル> 方向に照らすスポット光源
                <サイズ>が0の時広く1の時狭い。
                <距離>指定がある場合は、その距離で<色>に
                なるように減衰する
  オプション指定
    castshadow      : 影を落とす

○オプション指定
  lensflare ( <強さ> <種類> )
               : レンズフレアを発生させる。
                <種類> は 0〜2

○階層化
  { … } によって階層構造をなすことができる。
  { … } の中の座標変換は { … } の中でのみ有効

---ここまで---

このページのURLは http://doga.jp/tkbbs/tkbbs.cgi?bbs=doga&number=3021 です
[一つ前] [一つ次] [前の未読] [次の未読] [スレッド表示][新規投稿] [この記事に返信] [記事一覧]