資料室 ページ指定表示
資料室 ページ指定表示
 ■Report Liblary..._____________
| HOME | | 最新3ページ | | 最新100リスト | | 10回毎一覧 | | ANDOR  | | 辞書 |

Close

Only
000014.LightWaveのプラグイン(altrnssv) 
  (2001年05月13日(日) 18:11)

Open
ダウンロード:altrnssv.lzh

UnrealTournamentのキャラクターモデルを作る過程で、私のようにLightWaveとMetasequoiaを使う人は
LightWaveでモーションをつけた後、シェイプモーションとしてデータを持たなければなりません。
が、LWにはフレームごとに変形データを保存する機能が無く、
1フレーム進めては保存を繰り返さなければなりません。
面倒なので、LScriptというLWのスクリプトを使用して一連化してしまおうと思ったのですが、
資料が少なく、しかも出来そうもないので、仕方なくプラグインを作成することにしました。
以下は、Windows2kでVC++6.0を使用することを前提に記します。

1.SDKをダウンロードしてこよう
まずは、http://www.dstorm.co.jp/dev/からSDKをDLしてきます。
lwsdk65.zipは必須。includeやlibが入っています。
docj65.zipは日本語マニュアルなので是非DLしておきましょう。
devkit20.zipはサンプルです。参考にしましょう。

2.server.libをコンパイルしよう
SDKのマニュアルに則って、server.libを作成しなければなりません。
lwsdk65\source\のファイル、servdesc.c、username.c、startup.c、shutdown.cをコンパイルします。
 2−1.プロジェクト作成
  まずVCを起動し、新規プロジェクトをlwsdk65\sourceにWin32Static Liblraryの
  プロジェクト名serverで作成します。
  lwsdk65\source\から必要な4ファイルをlwsdk65\source\server\にコピーし
  プロジェクトに追加します。
  
 2−2.アクティブな構成
  ビルド→アクティブな構成の設定→server - Win32Releaseを選択します。
  
 2−3.プリプロセッサの設定
  プロジェクト→設定→C/C++タブ→プリプロセッサの定義に「,_X86_,_WIN32」を追加します。
  
 2−4.インクルードファイルの設定
  ツール→オプション→ディレクトリにlwsdk65\includeのフルパスを指定します。
  (例:C:\LIGHTWAVE\SDK\LWSDK65\INCLUDE)
  VC終了後、この設定は保存され次回から初期値として入ります。
  
 2−5.コンパイル
  これで、ビルド→ビルドか、ビルド→リビルドを選択すれば
  C:\LightWave\sdk\lwsdk65\source\server\Release\server.libが作成されます。

3.プラグインをコンパイルしよう
これで準備が整いましたので、実際にプラグインをコンパイルします。
VCを起動し、各々の環境に合わせプロジェクトを作成します。
プロジェクトはWin32 Dynamic-Link Libraryで作成します。
(例:「C:\LightWave\Programs\Plugins\user\blscr\」に「altrnssv」)

 3−1.アクティブな構成
  必要に応じて、アクティブな構成を変えましょう。
 3−2.プリプロセッサの設定
  プロジェクト→設定→C/C++タブ→プリプロセッサの定義に「,_X86_,_WIN32」を追加します。
 3−3.server.libを登録する
  作成しておいたserver.libをリンク対象に含めます。
  server.libはプロジェクトフォルダの中にコピーしておきます。
  ついでに出力ファイルを../altrnssv.pにしておきます。(各々のプラグイン名にして下さい)
  
 3−4.必須ファイルの追加
  プロジェクトにlwsdk65\source\にある、servmain.c、serv.defを追加します。
  これで基礎は構築完了です。

4.サンプル「All Frame Transrated Object Saver」のソース解説
以下はaltrnssvのソースコードです。基本的なプラグインの書き方の説明をします。
理解できずに、間違っている部分も在るかも知れません。そのときはご指摘ください。

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
とりあえずこの3つ。基本ですね。
#include <lwserver.h>
#include <lwcmdseq.h>
#include <lwhost.h>
#include <lwgeneric.h>
#include <lwrender.h>
lwserver.h以外は必要に応じてインクルードします。
XCALL_( int )
AllTransdSav(
  long version,
  GlobalFunc *global,
  LWLayoutGeneric *local,
  void *serverData
) {
AllTransdSavは任意です。
引数はこれが基準らしいんですが、
LWLayoutGenericの部分はプラグインの種類により変わるらしいので、
サンプルを参考にして下さい。
  //LWMessageFuncs  *msg;
  LWInterfaceInfo *intinfo;
  LWSceneInfo *sceneinfo;
  char fname[512];
  int i;
msgはinfoコマンド(情報ダイアログ)を表示するための宣言です。
iniinfo、sceneinfoはレイアウト上の情報を取得するための変数です。
int iなんかはforの中で定義したかったのですが、
あくまでも「cpp」ではなく「c」なので不可。
  /* CHECK THE INTERFACE VERSION. */
  XCALL_INIT;
  if( version != LWMODCOMMAND_VERSION )
    return AFUNC_BADVERSION;
バージョンが違うなら終了します。
  //msg = (*global)( LWMESSAGEFUNCS_GLOBAL, GFUSE_TRANSIENT );
  intinfo = global( LWINTERFACEINFO_GLOBAL, GFUSE_TRANSIENT );
  sceneinfo = global( LWSCENEINFO_GLOBAL, GFUSE_TRANSIENT );
それぞれのグローバルを呼び出します。
  (*local->evaluate) ( local->data, "GoToFrame 0" );
  for( i = 0; i <= intinfo->previewEnd; i ++ ) {
    memset( fname, 0x00, sizeof( fname ) );
    strcpy( fname, "SaveTransformed " );
    strcat( fname, sceneinfo->filename );
    fname[strlen(fname)-4] = 0x00;
    sprintf( fname, "%s%03d.lwo", fname, i );
    (*local->evaluate) ( local->data, fname );
    //(*msg->info)( "COMMAND", fname );
    (*local->evaluate) ( local->data, "NextFrame" );
  }
  return AFUNC_OK;
}
フレーム数分だけ、変形状態保存を繰り返します。
evalute関数のコマンドはレイアウトのメニューにある
コマンドリスト保存で出力されたテキストを見てください。
ServerRecord ServerDesc[] = {
   { LWLAYOUTGENERIC_CLASS, "AllTransdSav", AllTransdSav },
   { NULL }
};
プラグインの登録部分です。
メインになる関数を登録します。
1つのファイルにいくつものプラグインを登録することも出来ます。
ServerDescが配列になっていますので、
必要なだけ追加して、最後にNULLを付けてください。
LWLAYOUTGENERIC_CLASSの部分はプラグインの種類により変わるので
サンプルを参照してください。
以上、altrnssv.cをプロジェクトに追加してコンパイルします。 私の環境では次のようなワーニングがでますが、とりあえず正常動作しているようです。 >LINK : warning LNK4098: defaultlib "LIBC" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください ダウンロード:altrnssv.lzh 関連リンク: D-STORM D-STORM Developer's Page LScript(英語)

| HOME | | 最新3ページ | | 最新100リスト | | 10回毎一覧 |
■0x112 ■0x227 ■0x55F ■0xDDF ■0xF36 ■0xF8B ■0xEBC ■0x114 ■0x33F ■0x77F ■0xAAF ■0xEEF
____________Report Library Ver2.00β 2003/08/27_bomber@xps.jp_http://bomber.xps.jp/_