メッシュは、ポリゴン面のセットから構成されるビジュアルオブジェクトである。メッシュは、頂点のセットと面のセットを定義する。メッシュの詳細については、「Direct3DRMMesh」を参照すること。
プログレッシブメッシュは、ベースメッシュ (粗いバージョン) およびメッシュをさらに精製するために使用される頂点分割レコードのセットとして格納されるメッシュである。つまり、プログレッシブな精製が可能である。これによって、メッシュ用のレンダリングの詳細レベルをセットし、リモートソースからのプログレッシブダウンロードも可能になる。
プログレッシブメッシュは、Microsoft® Direct3D®保持モードのビジュアルであり、ビジュアル処理の標準的な方法で使用することができる。つまり、プログレッシブメッシュは、フレーム階層に追加すること、複数回のインスタンス化、およびピックも可能である。
Direct3DRMProgressiveMeshインターフェイスのメソッドを使用して、レンダリングする頂点または面の数をセットし、レンダリング詳細を制御することができる。レンダリングに必要な最小詳細レベルを指定することもできる。通常、プログレッシブメッシュは、ベースメッシュが一度使用可能になるとレンダリングされるが、Direct3DRMProgressiveMesh.SetMinRenderDetailメソッドによってレンダリングの前にそれ以上の詳細レベルが必要であると指定することができる。また、Direct3DRMProgressiveMesh.CreateMeshメソッドを使用して、プログレッシブメッシュ固有の状態からDirect3DRMMeshオブジェクトを構築することもできる。
プログレッシブメッシュを、ファイル、リソース、メモリ、またはURLからロードすることができる。ローディングは同期式でも非同期式でも行える。ダウンロードの状態はDirect3DRMProgressiveMesh.GetLoadStatusメソッドによってチェックし、Direct3DRMProgressiveMesh.Abortメソッドでダウンロードを終了することができる。ローディングが非同期式の場合、ロードの進行状態を調べるためにDirect3DRMProgressiveMesh.RegisterEventsとDirect3DRMProgressiveMesh.GetLoadStatusメソッドを介してイベントを使用するかどうかはアプリケーション次第である。
Direct3DRMProgressiveMeshオブジェクトは、Direct3DRM3.CreateProgressiveMeshメソッドを使うことによって作成される。作成後、オブジェクトは階層に追加できるが、少なくともベースメッシュが使用可能になるまで、レンダリングされない。
Direct3DRMProgressiveMeshインターフェイスのメソッドは、以下のグループにまとめることができる。
メッシュの生成とコピー | CreateMesh |
Duplicate | |
GetBox | |
ロード | Abort |
GetLoadStatus | |
LoadFromFile | |
クオリティの設定 | SetQuality |
GetQuality | |
詳細の管理 | GetDetail |
GetFaceDetail | |
GetFaceDetailRange | |
GetVertexDetail | |
GetVertexDetailRange | |
SetDetail | |
SetFaceDetail | |
SetMinRenderDetail | |
SetVertexDetail | |
イベントの登録 | RegisterEvents |
Direct3DRMProgressiveMeshインターフェイスは、Direct3DRMObjectインターフェイスから次のメソッドを継承する。
AddDestroyCallback |
CloneObject |
DeleteDestroyCallback |
GetAppData |
GetClassName |
GetName |
SetAppData |
SetName |
現在アクティブなダウンロードを中止する。
構文
object.Abort( )
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
注意
このメソッドが使われる前にベースメッシュがダウンロードされている場合、その効果は、プログレッシブメッシュがロードされ、分割頂点が有効な状態にあり、プログレッシブメッシュがレンダリング可能である場合と同じである。他のプログレッシブメッシュメソッドも使うことができる。Direct3DRMProgressiveMesh.Abortを呼び出す前にベースメッシュがダウンロードされておらず、シーンにプログレッシブメッシュを追加した場合、Direct3DRMViewport2.Renderメソッドは成功するが、プログレッシブメッシュへのレンダリングは行われない。また、プログレッシブメッシュを使用するとき (たとえば、メッシュやクローンを作成するため) にベースメッシュがダウンロードされていなければ、呼び出しはD3DRMERR_NOTENOUGHDATAを返す。
未解決のイベントがあれば、それらが通知される。
現在の詳細レベルでメッシュを構築する。
構文
object.CreateMesh( ) As Direct3DRMMesh
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
戻り値
新しく生成されたDirect3DRMMeshオブジェクトを返す。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
注意
アプリケーションがまだ使用可能になっていない詳細レベルを要求したり、ベースメッシュが使用可能になっていない場合、このメソッドはD3DRMERR_NOTENOUGHDATAというエラーを返す。
Direct3DRMProgressiveMeshオブジェクトのコピーを作成する。このコピーは、オリジナルと幾何図形や面データをすべて共有する。しかし、オリジナルとは別に詳細レベルを設定することができる。これは、同一のメッシュデータを階層の異なる部分で、ただし、異なる詳細レベルで使用できるようにする。本質的に、フレーム階層内にプログレッシブメッシュの2つのインスタンスがあると言える。
構文
object.Duplicate( ) As Direct3DRMProgressiveMesh
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
戻り値
新しく生成されるDirect3DRMProgressiveMeshオブジェクトを返す。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
注意
複製中のプログレッシブメッシュには、少なくともそのベースメッシュをロードしておかなければならない。現在、非同期でロード中のプログレッシブメッシュ上でこのメソッドを使うと、複製されたメッシュはロードしているプログレッシブメッシュが複製されたときに持っていた詳細レベルしか持たない。複製後にロードされた分割頂点は、複製されたメッシュでは利用できない。
プログレッシブメッシュは、ベースメッシュを表すデータセットと、分割頂点を表すデータセットを持っている。ベースメッシュデータおよびプログレッシブメッシュの現状や現在の詳細レベルを記述するデータは、複製されたメッシュ間で共有されない。しかし、分割頂点データは共有される。
Direct3DRMProgressiveMeshオブジェクトを含む境界ボックスを取得する。境界ボックスは、各次元で、子フレームを基準とする最小および最大の座標を与える。
構文
object.GetBox(box As D3DRMBOX)
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
- box
- 境界ボックスの座標がセットされるD3DRMBOX型。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
0.0と1.0の間に正規化された現在の詳細レベルのプログレッシブメッシュを返す。
構文
object.GetDetail( ) As Single
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
戻り値
現在の詳細レベルのプログレッシブメッシュがセットされる値を返す。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
注意
ベースメッシュがダウンロードされていなければ、このメソッドは、D3DRMERR_PENDINGを返す。要求されている詳細レベルが設定されていれば、戻り値は、要求レベルが満たされるまで以降の呼び出し毎に増加される。レベルが要求されていなければ、詳細レベルは、すべての分割頂点のダウンロードが完了するまで上昇する。
正規化された値0.0は頂点の最小数を表し (ベースメッシュ中の頂点数)、正規化された値1.0は頂点の最大数を表す。
プログレッシブメッシュにある面の数を取得する。
構文
object.GetFaceDetail( ) As Long
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
戻り値
プログレッシブメッシュの面の数がセットされる値を返す。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
注意
面の数が利用できなければ、このメソッドはD3DRMERR_PENDINGを返す。
プログレッシブメッシュで使用可能な最小および最大の面カウントを取得する。
構文
object.GetFaceDetailRange(min As Long, max As Long)
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
- min
- 面の最小数がセットされる値。
- max
- 面の最大数がセットされる値。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
注意
面カウントが取得できない場合、このメソッドはD3DRMERR_PENDINGを返す。
ロードの現在の状態をアプリケーションが照会することを可能にする。
構文
object.GetLoadStatus(loadStatus As D3DRMPMESHLOADSTATUS)
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
- loadStatus
- プログレッシブメッシュのロード状態を示すD3DRMPMESHLOADSTATUS型。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
プログレッシブメッシュのレンダリングクオリティを示す値を取得する。
構文
object.GetQuality( ) As CONST_D3DRMRENDERQUALITY
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
戻り値
プログレッシブメッシュのレンダリングクオリティを指定するCONST_D3DRMRENDERQUALITY列挙型のメンバを返す。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
参照
プログレッシブメッシュにある頂点の数を取得する。
構文
object.GetVertexDetail( ) As Long
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
戻り値
プログレッシブメッシュにある頂点の数がセットされる値を返す。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
注意
頂点の数が取得できない場合、このメソッドはD3DRMERR_PENDINGを返す。
メッシュ中で使用可能な最小および最大の頂点カウントを取得する
構文
object.GetVertexDetailRange(min As Long, max As Long)
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
- min
- 頂点の最小数がセットされる値。
- max
- 頂点の最大数がセットされる値。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
注意
頂点カウントが取得できない場合、このメソッドはD3DRMERR_PENDINGを返す。
プログレッシブメッシュオブジェクトをメモリ、ファイル、リソース、またはURLからロードする。ロードは同期式でも非同期式でも良い。
構文
object.LoadFromFile(sFile As String, id As String, options As CONST_D3DRMLOADFLAGS, loadTextureImplementation As Direct3DRMLoadTextureCallback3, userArgument As Object)
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
- sFile
- ロードするオブジェクトのソース。このソースは、optionsパラメータで指定されているソースフラグによって、ファイル、リソース、メモリブロック、またはストリームのどれかにできる。
- id
- ロードするオブジェクトの名前または位置。idが""の場合は、optionsパラメータをD3DRMLOAD_FIRSTに設定する。Microsoft Visual Basic® は、String データ型が指定されている場合でも、ロードするアイテムの位置を示すidパラメータの中のIntegerを受け入れる。たとえば、idパラメータに1が設定されていると、1番目の位置のオブジェクトがロードされる。
- options
- ロードを実行する方法を記述するCONST_D3DRMLOADFLAGS列挙型の1つ以上の値。
- loadTextureImplementation
- Direct3DRMLoadTextureCallback3コールバックインターフェイス。遭遇した任意のテクスチャをロードするのに使用される。テクスチャは、2で割れる幅と長さでなければならない。このコールバックは、ローダが遭遇したテクスチャ名と、ユーザ定義のargsパラメータによって使われる。新しいスレッドは、このコールバックに対しては生成されない。
- userArgument
- コールバックに渡されるユーザ定義データ。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
注意
プログレッシブメッシュは、初期化しない限り有効にならない。非同期式ダウンロードが指定されていれば、このAPIは直ちに戻り、別のスレッドがダウンロードを実行するために生成される。ロードの進行状態を調べるために、Direct3DRMProgressiveMesh.RegisterEventsとDirect3DRMProgressiveMesh.GetLoadStatusを使ってイベントを使用するかどうかはアプリケーション次第である。
このメソッドとDirect3DRMProgressiveMesh.Duplicateメソッドは、プログレッシブメッシュを初期化する。オブジェクトは一度しか初期化できない。したがって、プログレッシブメッシュをクローンまたは複製してから、そのクローンまたは複製したメッシュにロードすることも、以前にロードしたメッシュにロードすることもできない。
アプリケーションが、プログレッシブメッシュオブジェクトにイベントを登録するのを可能にする。イベントは、適切な条件が満たされたときに通知される。
構文
object.RegisterEvents(hEvent As Long, flags As Long, reserved As Long)
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
- hEvent
- 必要な条件が満たされたときに通知されるイベント。
- flags
- CONST_D3DRMPMESHSTATUSFLAGS列挙型の1つ以上の値。
- reserved
- 0でなければならない。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
注意
このメソッドは、ロードの進行状態を監視するために使用できる。イベントは、エラーが発生した場合にも通知されるので、アプリケーションは、通知後にDirect3DRMProgressiveMesh.GetLoadStatusメソッドを使う必要がある。
要求された詳細レベルを0.0 (最小) と1.0 (最大) の間で正規化して設定する。
構文
object.SetDetail(detail As Single)
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
- detail
- 要求された詳細レベル。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
注意
十分な詳細項目のダウンロードがまだ完了していなければ(ただし、時間がたてば使用可能)、要求は受け入れられて、D3DRMERR_PENDINGが返る。このエラーは通知であり、要求されたレベルが、十分な詳細が使用可能になると直ちに設定されるということを示すものである。
正規化した値0.0は頂点の最小数を表し (ベースメッシュにある頂点の数)、正規化した値1.0は頂点の最大数を表す。
要求される面の数を設定する。
構文
object.SetFaceDetail(count As Long)
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
- count
- 要求される面の数。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
注意
ときには、常に要求された値から1以内であるにもかかわらず、プログレッシブメッシュを要求された面の数に設定できないことがある。これは、分割頂点が1ないし2面加えることができるからである。たとえば、SetFaceDetail(20)を使うと、プログレッシブメッシュは面の詳細を19または21だけにしか設定できないかもしれない。プログレッシブメッシュにある面の実際の数は、常にDirect3DRMProgressiveMesh.GetFaceDetailメソッドを使って取得することができる。
十分な詳細項目のダウンロードがまだ完了していなければ(ただし、時間がたてば使用可能)、要求は受け入れられて、D3DRMERR_PENDINGが返る。このエラーは、通知であり、要求されたレベルが、十分な詳細が使用可能になると直ちに設定されるということを示すものである。要求されている詳細レベルが、プログレッシブメッシュで使用可能な詳細レベルより大きければ、D3DRMERR_REQUESTTOOLARGEが返る。
参照
0.0(最小詳細レベル)から1.0(最大詳細レベル)の範囲で、ロード中にレンダリングする詳細の最小レベルを設定する。通常、プログレッシブメッシュは、ベースメッシュが使用可能になった(およびメッシュがシーングラフ中に存在するようになった)後でレンダリングされる。
構文
object.SetMinRenderDetail(val As Single)
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
- val
- 要求されている最小詳細。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
注意
このメソッドは、ロード中にレンダリングされる面または頂点の最小数を設定する。この値は、ベースメッシュで既にレンダリングされているものに追加した値である。
以降のDirect3DRMProgressiveMesh.SetDetail、Direct3DRMProgressiveMesh.SetFaceDetail、またはDirect3DRMProgressiveMesh.SetVertexDetail呼び出しはいつでも、このメソッドより優先される。
Direct3DRMProgressiveMeshオブジェクトのレンダリングクオリティを設定する。
構文
object.SetQuality(quality As CONST_D3DRMRENDERQUALITY)
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
- quality
- 使用する新しいレンダリングクオリティを指定するCONST_D3DRMRENDERQUALITY列挙型のメンバ。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
注意
オブジェクトクオリティには、3つのコンポーネントがある。つまり、シェーディングモード (フラットまたはグーロー。フォンは実装されておらず、デフォルトでグーローシェーディングになる)、照明タイプ (オンまたはオフ) および塗りつぶしモード (ポイント、ワイヤフレームまたはソリッド) である。
デバイスのクオリティを設定するには、Direct3DRMDevice3.SetQualityを用いる。デフォルトで、デバイスクオリティはD3DRMRENDER_FLAT (フラットシェーディング、照明オンおよびソリッド塗りつぶし) である。
Direct3DRMProgressiveMeshオブジェクトのクオリティを設定するには、SetQualityメソッドを用いる。デフォルトで、Direct3DRMProgressiveMeshオブジェクトのクオリティはD3DRMRENDER_GOURAUD (グーローシェーディング、照明オンおよびソリッド塗りつぶし) である。
ヒント: グーローシェーディングは、詳細レベルを頻繁にまたはすばやく変更するプログレッシブメッシュオブジェクトについて、よりよいパフォーマンスを得られる。
Direct3D保持モードは、デバイスやオブジェクトの個々のコンポーネントに対する現在の設定の中でもっとも低位のクオリティで、オブジェクトにレンダリングを行う。たとえば、オブジェクトの現在のクオリティ設定がD3DRMRENDER_GOURAUDで、デバイスがD3DRMRENDER_FLATであると、オブジェクトはフラットシェーディング、ソリッド塗りつぶし、および照明オンでレンダリングされる。
オブジェクトの現在のクオリティ設定がD3DRMSHADE_GOURAUD|D3DRMLIGHT_OFF|D3DRMFILL_WIREFRAMEで、デバイスのクオリティ設定がD3DRMSHADE_FLAT|D3DRMLIGHT_ON|D3DRMFILL_POINTであると、オブジェクトはフラットシェーディング、照明オフ、およびポイント塗りつぶしモードでレンダリングされる。
これらのルールは、Direct3DRMMeshBuilder3オブジェクトおよびDirect3DRMProgressiveMeshオブジェクトに適用される。しかし、Direct3DRMMeshオブジェクトはこれらのルールに従わない。メッシュオブジェクトはデバイスのクオリティ設定を無視し、グループクオリティ設定を用いる(デフォルトでD3DRMRENDER_GOURAUD)。
参照
要求された頂点詳細レベルを設定する。
構文
object.SetVertexDetail(count As Long)
要素
- object
- Direct3DRMProgressiveMeshオブジェクトを表すオブジェクト式。
- count
- 要求されている頂点の数。
エラー値
エラーのリストについては、「Direct3D保持モードのエラー値」を参照すること。
注意
十分な詳細項目のダウンロードが、まだ完了していなければ(ただし、時間がたてば使用可能)、要求は受け入れられて、D3DRMERR_PENDINGが返る。このエラーは通知であり、要求されたレベルが、十分な詳細が使用可能になると直ちに設定されるということを示すものである。要求されている詳細レベルが、プログレッシブメッシュで使用可能な詳細レベルより大きければ、D3DRMERR_REQUESTTOOLARGEが返る。
参照
トップに戻る
© 1999 Microsoft and/or its suppliers. All rights reserved. Terms of Use.