2001/08 Technical Note DataBase
 
  2000/ 0405060708  2001/ 0304070810  2002/ 0103040511  2004/ 01  
index  


2001/8/3 MAXR4でのプラグイン開発の環境設定
2001/8/3 MAXScriptの使い方「シェイプクラスの定義方法」
2001/8/3 MAXスクリプトによるファイル読み込みのテンプレートソースコード



 
     
  MAXR4でのプラグイン開発の環境設定
 
 

name:上坂浩光
e-mail:kohsaka@live-net.co.jp
date:2001/8/3

 
     
 
 

machine name:NU
os(version):Windows2000(SP1)
application:VisualStudio(開発環境)->3DStudioMAX(動作環境)
other:

 
     
  ■現象
3DStudioMAX R4においてプラグイン開発をする場合、プロジェクトの設定が 変更になったので注意。

R4からは描画メソッドにDirectXが加わった為、どんなプラグインタイプの プロジェクトであっても、DirectX関連のヘッダーとライブラリーをリンクしないと ビルド時にエラーが起こる。

ex.)
> aiimp.obj : error LNK2001: 外部シンボル ""public: virtual
> char * __thiscall
> ClassDesc::GetRsrcString(long)"
> (?GetRsrcString@ClassDesc@@UAEPADJ@Z)" は未
> 解決です
> Release\MAPINP.DLI : fatal error LNK1120: 外部参照 1 が未解決です。

■解決策
Step1)
DirectXのSDKを手に入れる必要がある。

http://www.microsoft.com/japan/developer/directx/default.asp

ここからDirectXのSDKをダウンロードする。ただし、140Mb位あるので、 MSDNや、雑誌に付属するCD-ROMから手に入れる方が懸命かも。

Step2)
プロジェクト設定の「C++」→「カテゴリー:プリプロセッサ」の インクルードファイルのパスに、以下のパスを追加する必要がある。

..\..\DirectX8SDK\include (パス名は任意)

*自分では、このヘッダーをインクルードしていなくても、MAXのヘッダーファイル がこれらを参照している為に必要。

Step3)
プロジェクト設定の「リンク」→「カテゴリー:インプット」→「追加ライブラリー のパス」に以下のパスを追加

..\..\DirectX8SDK\lib (パス名は任意)

以上。

 
     

 
     
  MAXScriptの使い方「シェイプクラスの定義方法」
 
 

name:上坂浩光
e-mail:kohsaka@live-net.co.jp
date:2001/8/3

 
     
 
 

machine name:NU
os(version):Windows2000(SP1)
application:3DStudioMAX
other:

 
     
  ■スプラインシェイプの概念
MAXスクリプトでシェイプクラスを作るには、まず、スプラインシェイプの構造を 理解しておく必要があります。以下の図のようになっています。
 
     
   
     
  ここにかかれている全体がスプラインシェイプ。それぞれのラインがスプラインとなり、1からの番号で識別されます。また、スプラインの中は、これも1からの番号で頂点が定義されます。


■実際の作り方。

1)ノードのサブクラスであるスプラインシェイプクラスを作ります。

sp = splineshape()

これは、単なる入れ物で、ジオメトリーはこの下にスプラインクラスを定義するスプラインクラスにあります。

2)スプラインシェイプクラスにスプラインクラスを追加する

addNewSpline sp

先ほどの入れ物にジオメトリー保持の実態部分であるスプラインクラスを追加します。

3)スプラインに対して頂点を追加していく

addknot sp 1 #corner #line [x,y,z]

そして、そのスプラインクラスに対して、頂点を一づつ定義していきます。
この例では、頂点をコーナータイプに、セグメントタイプをラインにしています。

addKnot <shape> <spline_index_integer> ( #smooth | #corner | #bezier | #bezierCorner ) \
( #curve | #line ) <position_point3> [invec_point3 outvec_point3] [where_integer]

*<shape>  :スプラインシェイプクラス
*<spline_index_integer>  :何番目のスプラインに対して頂点を定義するか
* ( #smooth | #corner | #bezier | #bezierCorner ) >()内は省略可能を示す。
     :頂点タイプ。
     :スムーズ、コーナー、ベジェ、ベジェコーナーです。
*( #curve | #line )  :セグメントタイプ。カーブ、ラインです。
* <position_point3>  :頂点座標(point3タイプ)
*[invec_point3 outvec_point3]
     :頂点タイプがベジェ、ベジェコーナーを指定した場合の
     :インベクトルとアウトベクトルをpoint3タイプで指定。
*(where_integer)   :どこに頂点を追加するか?省略すると最後に追加される。

4)シェイプをアップデート
updateshape sp

このコマンドによって、ジオメトリーに与えた変更が実際のシェイプに与えられます。

 
     

 
     
  MAXスクリプトによるファイル読み込みのテンプレートソースコード
 
 

name:上坂浩光
e-mail:kohsaka@live-net.co.jp
date:2001/8/3

 
     
 
 

machine name:NU
os(version):Windows2000(SP1)
application:3DStudioMAX
other:

 
     
  3Dデータが定義されたテキストファイルをMAXで読み取り3D化したいというケースは、結構発生すると思います。
それをC++のプラグインでいちいち作るのも手間ですので、MAXスクリプトで行うのがよいでしょう。

ここにそのためのテンプレート(骨格)となるようなサンプルコードを提供します。
これをもとに各自、読み込みプラグインを作ってみてください。

ちなみに、ここに上げるコードは、モニターで再現できる色空間を3Dで表した座標列を読み取って、ワイヤーモデルを作るものです。

読み取るデータの形式は、

_________________________________________________________________
L* a* b*

0 0 0
0.34 2.37 -6.46
0.94 6.62 -17.34
1.93 13.55 -28.19
3.34 23.39 -37.66
5.23 32.43 -45.83
7.63 38.71 -52.74
10.33 43.18 -58.8
12.98 47.51 -64.7



_________________________________________________________________
このように、X,Y,Zに対応する座標値が単純に並んでいるものです。

■カラーデータ読み込みサンプルコード
______________________________________________________________________________________________
utility ReadColorSpace "カラーデータの読み込み"
(
 --Ver1
 --<2001/7/31>
 --・ファーストリリース

 --ファイルの読み込み
 function ReadFile sFilename =
 (
  --ファイルのオープン
  fp=openFile sFilename

  --2行分読み飛ばす
  LineStr = readline fp
  LineStr = readline fp

  --スプラインシェイプを作る
  sp = splineshape()

  --スプラインを作る(このスプラインセグメントに対して頂点を追加していく
  addNewSpline sp

  while not eof fp do
  (
   --一行読み込み、名前に変換
   LineStr = readline fp
   Str=filterString LineStr " "
   --format "Str=%\n"Str
   --format "Str.count=%\n" Str.count
   if Str.count<3 then
   continue

   x = Str[1] as float
   y = Str[2] as float
   z = Str[3] as float

   --format "x=% y=% z=%\n" x y z

   addknot sp 1 #corner #line [x,y,z]
  )
  --シェイプをアップデート
  updateshape sp

  close fp

  return true
 )

 --インターフェース定義
 button LoadFile "読み込み" toolTip:"カラースペースの3D定義ファイルを読み込みます"
 label label04 "---------------------------"
 label label05 "by Hiromitsu Kohsaka"

 --パネルの初期化
 on ReadColorSpace open do
 (
 )

 --ファイル読み込み
 on LoadFile pressed do
 (
  --レンダリングファイル名の入力
  sFileName = getOpenFileName caption:"カラースペースの3D定義ファイルの読み込み" \
  types:"カラースペース定義ファイル(*txt)|*.txt"

  if sFileName != undefined then
  (
   ReadFile sFilename
  )
 )
)
______________________________________________________________________________________________

 
     

↑Top