home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / VPR_DATA / DOGA / SOURCES / REND.LZH / RENDSRC.DOC < prev   
Text File  |  1996-08-02  |  12KB  |  364 lines

  1. REND ver.2.25+T8.2.8 ソースファイル
  2.  
  3. 対応機種
  4. ・X68000    (GCC)
  5. ・X68000+68881/2(GCC + FPPP)
  6. ・X68030+68882    (GCC)
  7. ・PC-9801    (DJGPP)
  8. ・DOS/V        (DJGPP)
  9. ・MS-WINDOWS    (Borland C++)
  10. ・UNIX(X-Window)(GCC)
  11. ・UNIX(端末)    (GCC)
  12.  
  13. 実行ファイルの生成には基本的に gcc, gnu-make が必要です。
  14.  
  15. 1.生成方法
  16.  
  17. 1.1 読み込みライブラリ reader.a の生成
  18.  
  19. % cd reader
  20. % make             <- X680x0の場合
  21. % make -f makefile.dj    <- MS-DOS+djgccの場合
  22. % make -f makefile.unx    <- UNIXの場合
  23.  
  24. 1.2 画像入出力ライブラリ piclib.a の生成
  25.  
  26. % cd ../pic1600
  27. % make             <- X680x0の場合
  28. % make -f makefile.dj    <- MS-DOS+djgccの場合
  29. % make -f makefile.unx    <- UNIXの場合
  30.  
  31. 1.3 レンダラーの生成
  32.  
  33. % cd ../rend
  34. % make             <- X680x0の場合
  35. % make -f makefile.dj    <- MS-DOS+djgccの場合
  36. % make -f makefile.x11    <- UNIX, X-Windowの場合
  37. % make -f makefile.unx    <- UNIXの場合
  38.  
  39. で生成できるはずです。
  40.  
  41. 2. カスタマイズ
  42. カスタマイズは基本的に、makefileの修正で行なってください。
  43.  
  44. 2.1 読み込みライブラリ  reader
  45.  
  46. 以下の3種類のカスタマイズが可能です。
  47.  
  48.     -DBUFFERING        ファイル読み込みをバッファリングして高速化する
  49.  
  50.     -DVIRTUAL        仮想記憶を可能にする
  51.     -DFLOAT            浮動小数点を float で行なう
  52.     -DINLINE_VECTOR        ベクトル演算をインライン関数にする
  53.     -DINLINE_MATRIX        行列演算をインライン関数にする
  54.  
  55.     -DBUFFERING以外は同じオプションを rend でも付加する必要があります。
  56.  
  57.     -DWINDOWS        WINDOWSであることを示す。
  58.     -DUNIX            UNIXであることを示す。
  59.     -DX68000        X680x0であることを示す。
  60.     -DDJ            DJGCCであることを示す。
  61.  
  62. 2.2 画像入出力ライブラリ piclib
  63.     -DLittleEndian        バイトオーダが Little Endian である (86系)
  64.  
  65. 2.3 レンダラー rend
  66.     -DFULLCOLOR        内部処理をフルカラーにしてディザリングを可能に
  67.     -DHIVISION        解像度の種類を増やす
  68.                 (320x240,640x480,1024x1024,2048x2048, etc)
  69.     -DEXTENDMAP        マッピングの歪みを減少
  70.     -DSPEC            マッピング、半透明体にスペキュラーを生成可能
  71.     -DEDGEANTI        背景とのアンチエイリアスを消去可能
  72.     -DWIREVIEW        ワイヤーフレーム画像生成可能(X680x0専用)
  73.     -DSTAR            背景星生成可能
  74.     -DMAPANTI        マッピングにアンチエイリアスが可能
  75.     -DBACKFACE        表面(左回り)のみ作画可能
  76.     -DREFMAP        環境マッピングが可能
  77.     -DBGMAKE        背景球生成可能
  78.  
  79.     -DFLOAT            浮動小数点を float で行なう
  80.     -DINLINE_VECTOR        ベクトル演算をインライン関数にする
  81.     -DINLINE_MATRIX        行列演算をインライン関数にする
  82.  
  83.     -DWINDOWS        WINDOWSであることを示す。
  84.     -DUNIX            UNIXであることを示す。
  85.     -DX68000        X680x0であることを示す。
  86.     -DDJ            DJGCCであることを示す。
  87.  
  88. 3. ソースファイル
  89.  
  90. 3.1 読み込みライブラリ  reader
  91.  
  92. コンパイルするとreader.a(X68000の場合、68.a, 681.a, 030.a) が生成されます
  93.  
  94. X68000でコンパイルする時はディレクトリ 68, 681, 030 が必要です
  95.  
  96.     reader.h    読み込みライブラリ用ヘッダファイル
  97.     alloc.c        メモリ管理
  98.     objread.c    形状ファイル読み込み
  99.     atrread.c    アトリビュートファイル読み込み
  100.     objatr.c    形状、アトリビュート照合
  101.     framread.c    フレームファイル読み込み
  102.     matrix.c    行列演算(-DINLINE_MATRIX時はreader.hにインクルード)
  103.     vector.c    ベクトル演算(-DINLINE_VECTOR時はreader.hにインクルード)
  104.     temp.c        形状データのダンプ
  105.     virtual.c    仮想記憶
  106.     scanner.c    トークン切り出し
  107.     word.c        語彙解析
  108.     strcmpi.c    strcmpi()関数
  109.  
  110.     makefile    X680x0+gcc用makefile(68000, +68881, 68030)
  111.     makefile.68    X680x0+gcc用makefile(makefileから呼び出される)
  112.     makefile.dj    MS-DOS+djgcc用makefile
  113.     makefile.unx    UNIX+gcc用makefile
  114.  
  115. 3.2 画像入出力ライブラリ piclib
  116.     piclib.c    ライブラリ本体
  117.     token.c        トークン読み込み処理
  118.     string.c    文字列処理
  119.     file.c        ファイル入出力
  120.     sequence.c    連番処理
  121.     reduce.c    減色(誤差拡散など)処理
  122.     f_16_16.c    3万色 DoGA PIC 入出力
  123.     f_25_7.c    1600万色 DoGA PIC 入出力
  124.     f_rgbt8.c    1ピクセル4バイトのベタファイル入力
  125.     f_rgb8.c    1ピクセル3バイトのベタファイル入力
  126.     f_pic.c        3万色 柳沢 PIC 入力
  127.     f_bmp.c        Windows BMP 入出力
  128.     f_disp.c    X680x0 画面入出力
  129.     version.c    バージョン管理
  130.  
  131.  
  132. 3.3 レンダラー rend
  133.  
  134. X68000でコンパイルする時はディレクトリ 68, 681, 030 が必要
  135.  
  136.     rend.c        メインルーチン、引数解析など
  137.     dir.c        ワイルドカード展開
  138.     command.c    コマンド呼びだし
  139.     star.c        背景星生成
  140.     map.c        テクスチャマッピング
  141.     back.c        背景読み込み
  142.     viewconv.c    透視変換
  143.     color.c        色計算
  144.     glib.c          変数定義
  145.     display.c    スキャンラインコンバージョン
  146.     edgelist.c    エッジリスト処理
  147.     picout.c    画像ファイル出力
  148.     version.c    バージョン管理
  149.  
  150.     crtx68k.c    X68000用表示ルーチン
  151.     crt98.c        PC-9801用表示ルーチン
  152.     crtwin.c    Windows用表示ルーチン
  153.     crtnone.c    何も表示しない表示ルーチン
  154.  
  155.     makefile    X680x0+gcc用makefile(68000, +68881, 68030)
  156.     makefile.68    X680x0+gcc用makefile(makefileから呼び出される)
  157.     makefile.dj    MS-DOS+djgcc用makefile
  158.     makefile.unx    UNIX+gcc用makefile
  159.     makefile.x11    X-Window対応版用makefile
  160.  
  161.  
  162. 4. 移植
  163.  
  164. 4.1 読み込みライブラリ
  165.  
  166. 基本的に機種依存部はほとんどありません。
  167.  
  168. (1) 互換性のないテンポラリファイルのため、IDを埋め込んでいるので、
  169.     temp.c 中に新たに ID を定義してください。
  170.  
  171. (2) 機種によってはメモリ確保量が確定できないので、alloc.c 中のメモリ取得
  172.     ルーチンは機種依存しています。新たに追加してください。
  173.  
  174. (3) strcmpi関数がない場合は、strcmpi.c も入れてください。
  175.  
  176. 4.2 画像入出力ライブラリ piclib
  177.  
  178. 基本的に機種依存部はありません。
  179.  
  180. (1) f_disp.c は X680x0 専用です。
  181.  
  182. (2) 一応、新しい画像フォーマットに対応させることも可能です。
  183.     1ピクセル 3 バイトのベタファイル入力ルーチンもあるので、
  184.     ヘッダ入力ルーチンさえ作れば ppm にも対応可能でしょう。
  185.  
  186. 4.3 レンダラー
  187.  
  188. 基本的に機種依存部は画面表示ルーチン crt???.c だけです。
  189.  
  190. 1つの変数と4つの関数を用意する必要があります。
  191.  
  192. char    *program = "Do-GA C.G.A System Rendering Program" ;
  193. プログラム名です。起動時に表示されます。
  194.  
  195. void    crtinit( int line );
  196. 画面表示の初期化ルーチンです。起動時に一度だけ呼ばれます。
  197. line は表示する縦のドット数です。
  198.  
  199. void    crtclr( void );
  200. 画面消去ルーチンです。各画像の作画直前に呼び出されます。
  201.  
  202. void    crtout( short *framebuf, int xlen, int y );
  203. 1ライン出力ルーチンです。X68000型の色コードの長さ xlenの 配列 framebuf
  204. の内容を上からyドット目に作画してください。
  205.  
  206. void    crtout24( short *framebuf, int xlen, int y );
  207. 1ライン出力ルーチンです。ColorCode型の色コードの長さ xlenの 配列 framebuf
  208. の内容を上からyドット目に作画してください。-DCRTFULLCOLOR 指定時のみ有効
  209. です。
  210.  
  211. void    crtline( int x1, int y1, int x2, int y2 );
  212. 直線描画ルーチンです。(x1,y1)-(x2,y2)へのラインを引いてください。
  213.  
  214. 5. reader ライブラリ使用方法
  215.  
  216. reader ライブラリではアトリビュートファイル、形状ファイル、フレームファイルの
  217. 読み込み関数を提供します。提供する関数は以下の通りです。
  218.  
  219. 5.1 atrread.c
  220.  
  221.     書式    Atr     *atrread( filename, atr )
  222.             char    *filename ;     /*  アトリビュートファイル名    */
  223.             Atr     *atr ;          /*  アトリビュート構造体        */
  224.  
  225.     機能    アトリビュートファイルから入力します。
  226.             アトリビュート構造体( READER.H 参照 ) を確保し、入力されたデータ
  227.             をその中の各フィールドに格納します。
  228.             同一ファイル内にアトリビュートが複数ある場合や、それまでに別のファ
  229.             イルから読み込んだアトリビュートがある時は線形リストとして連結しま
  230.             す。
  231.             atr はそれまでに読み込んだアトリビュート構造体を指定します。
  232.             最初に読み込む時は NULL を指定します。
  233.  
  234.     戻り値  atr に入力されたアトリビュートを連結し、返します。
  235.             エラーの時は NULL を返します。
  236.  
  237. 5.2 objread.c
  238.  
  239.     書式    Object  *objread( filename, obj )
  240.             char    *filename ;     /*  形状ファイル名          */
  241.             Object  *obj ;          /*  オブジェクト構造体      */
  242.  
  243.     機能    形状ファイルから入力します。
  244.             オブジェクト構造体( READER.H 参照 ) を確保し、入力されたデータを
  245.             その中の各フィールドに格納します。
  246.             オブジェクト構造体の内部で参照しているプリミティブ構造体も確保し、
  247.             データを格納します。
  248.             同一ファイル内にオブジェクトが複数ある場合や、それまでに別のファイ
  249.             ルから読み込んだオブジェクトがある時は線形リストとして連結します。
  250.             obj はそれまでに読み込んだオブジェクト構造体を指定します。
  251.             最初に読み込む時は NULL を指定します。
  252.  
  253.     戻り値  obj に入力されたオブジェクトを連結し、返します。
  254.  
  255. 5.3 objatr.c
  256.  
  257.     書式    int         objatr( obj, atr )
  258.             Object   *obj ;
  259.             Atr      *atr ;
  260.  
  261.     機能    atrread, objread  関数で読み取ったデータからアトリビュート名を対応
  262.             付けます
  263.  
  264.     戻り値  obj 内で参照されているアトリビュート名が atr  内になければエラーと
  265.             なります。エラーの時は FALSE  を返します。正常終了すると TRUE を返
  266.             します。
  267.  
  268. 5.4 framread.c
  269.  
  270.     書式    int     frameopen( framefile )
  271.             char    *framefile ;    /*  フレームファイル名  */
  272.  
  273.     機能    フレームファイルをオープンします。
  274.  
  275.     戻り値  正常にオープンできた時は1、できなかった時は0を返します。
  276.  
  277.  
  278.  
  279.     書式    void    frameclose()
  280.  
  281.     機能    frameopen でオープンしたフレームファイルをクローズします。
  282.  
  283.  
  284.  
  285.     書式    Frame   *frameread( obj )
  286.             Object  *obj ;      /*  オブジェクト構造体  */
  287.  
  288.     機能    フレームファイルから入力します。
  289.             フレーム構造体( READER.H 参照 ) を確保し、入力されたデータをその
  290.             中の各フィールドに格納します。
  291.             フレーム構造体の内部で参照している環境、視点、光源などの構造体も確
  292.             保し、データを格納します。
  293.             obj は objread  で得たオブジェクト構造体を指定します。
  294.             フレームファイル内で参照されているオブジェクト名がオブジェクト構造
  295.             体になければエラーを出します。
  296.  
  297.     戻り値  フレーム構造体を返します。
  298.  
  299.  
  300.  
  301.     書式    void    framefree( frame )
  302.             Frame   *frame ;    /*  フレーム構造体  */
  303.  
  304.     機能    frameread で確保したフレーム構造体のメモリを開放します。
  305.  
  306.  
  307.  
  308.     書式    int     frameskip()
  309.  
  310.     機能    フレームファイルを1フレーム分読み飛ばします。
  311.  
  312.     戻り値  正常読めた時は1、読めなかった時は0を返します。
  313.  
  314. 5.5 matrix.c
  315.  
  316.     以下の関数すべて使用できます。
  317.     使い方は、関数名から想像するか、ソースファイル内のコメントを見てください。
  318.  
  319.     void    m_print( Matrix );
  320.     void    m_unit( Matrix );
  321.     void    m_mov( Matrix, Vector );
  322.     void    m_rot( Matrix, int, double );
  323.     void    m_scal( Matrix, Point );
  324.     void    m_vec( Matrix, Vector, Vector );
  325.     void    m_copy( Matrix, Matrix );
  326.     void    m_mult( Matrix, Matrix, Matrix );
  327.     void    vec_mult_mat( Vector*, Vector*, Matrix, int, int );
  328.     void    m_trans( Matrix, Matrix );
  329.     int     m_inv( Matrix, Matrix );
  330.     void    v_copy( Vector, Vector );
  331.     void    v_print( char*, Vector );
  332.     void    ftov( Vector, double, double, double );
  333.     double  v_length( Vector );
  334.     void    v_unit( Vector, Vector );
  335.     double  s_pro( Vector, Vector );
  336.     void    v_pro( Vector, Vector, Vector );
  337.     void    v_mult( Vector, Vector, Vector );
  338.     void    v_add( Vector, Vector, Vector );
  339.     void    v_sub( Vector, Vector, Vector );
  340.     void    v_s_mult( Vector, Vector, double );
  341.  
  342. 5.6 alloc.c
  343.  
  344.     メモリの管理関数、ライブラリの内部で確保するデータ領域の管理をします。
  345.     このライブラリの関数を使う時は最初に meminit 関数を実行してください。
  346.  
  347.     書式    void    meminit( memsize )
  348.             long    memsize ;   /*  使用メモリのサイズ  */
  349.  
  350.     機能    使用メモリ量をバイト単位で設定します。
  351.             0を指定すると取れるだけ取ります。
  352.  
  353.  
  354. 6. 今後の予定
  355.   (1) 各種画像フォーマットへの対応
  356.  
  357. 7. 配布規定
  358.     不特定多数への再配布(ネットへのアップロード)は禁止とします。
  359.     バグを発見したり、新しい機種に移植した時はソースの差分を
  360.     知らせてくれると嬉しいですが、強制はしません。
  361.  
  362.                     1996.6.13 高津/Project Team DoGA
  363.                     taka2@doga.higashiyodogawa.osaka.jp
  364.