MV1SetupReferenceMesh

参照用メッシュのセットアップ

MV1SetupReferenceMesh MHandle, FrameIndex, IsTransform

int MHandle : モデルのハンドル
int FrameIndex : 参照用メッシュを構築するフレームの番号
int IsTransform : 参照用メッシュは頂点座標変換を施したものにするかどうか
( TRUE:変換を施したもの  FALSE:変換を施さないローカル座標のもの )

(プラグイン / モジュール : DxLibW)

解説

MHandle のモデルハンドルが示すモデルの指定のフレーム( 若しくはモデル全体 )に含まれるポリゴンの座標や法線、UV値などの情報にアクセスするための準備を行います。

3Dを扱うゲームを作成していると、
しばしば3Dモデルを描画する以外の用途で3Dモデルのポリゴンの頂点座標や法線座標を扱いたくなるときがあります、
最も一般的な例はモデルとの当たり判定ですが、
それ以外の用途でも・・・あんまり一般的な例は思いつきませんがあったりします。

参照用メッシュはそんなときに有効なモデルの頂点座標やポリゴン情報にアクセスするための機能です。

その使い方ですが、参照用メッシュの機能を使用するにはまずこの関数で参照したいポリゴンを参照するための準備を行う必要があります。
参照対象としたいフレームを引数 FrameIndex で指定して( FrameIndex を -1 にすることでモデル全体のポリゴンを参照するための準備をすることができます )、
加えて参照用メッシュの頂点座標を、
頂点座標変換を施した頂点にするかどうかを引数 IsTransform で指定します。
( TRUE にすると MV1SetPositionMV1AttachAnim 等で設定された頂点座標変換が行われたものが、
FALSE にすると MV1SetPositionMV1AttachAnim 等の設定を無視して何も頂点座標変換が行われていないものがそれぞれ取得できます )

因みに参照用メッシュの構築処理はそれなりに負荷の高い処理ですので、
できる限り参照したいポリゴンを持つフレームのみを指定した方が良いです。

セットアップが完了した後は参照用メッシュの情報が入った構造体 MV1_REF_POLYGONLIST
を戻り値として返してくる関数 MV1GetReferenceMesh を使用して、実際にポリゴンの情報を取得します。

// 参照用ポリゴンデータ構造体
struct MV1_REF_POLYGONLIST
{
// ポリゴンの数
int    PolygonNum ;

// 頂点の数
int    VertexNum ;

// 頂点座標の最小値
VECTOR    MinPosition ;

// 頂点座標の最大値
VECTOR    MaxPosition ;

// ポリゴン構造体の配列へのポインタ
MV1_REF_POLYGON    *Polygons ;

// 頂点構造体の配列へのポインタ
MV1_REF_VERTEX    *Vertexs ;
} ;

int PolygonNum

参照用メッシュに含まれるポリゴンの数です。

参照の対象をフレームにした場合はフレームに含まれるメッシュが持つポリゴンの総数が、
参照の対象をモデルにした場合はモデルに含まれる全メッシュが持つポリゴンの総数が代入されます。

int VertexNum

参照用メッシュに含まれる頂点の数です。

参照の対象をフレームにした場合はフレームに含まれるメッシュが持つ頂点の総数が、
参照の対象をモデルにした場合はモデルに含まれる全メッシュが持つ頂点の総数が代入されます。

VECTOR MinPosition

参照用メッシュに含まれる頂点座標の最小値です。

座標値は頂点座標変換をする指定をしていた場合は座標変換されたものの最小値となります。

VECTOR MaxPosition

参照用メッシュに含まれる頂点座標の最大値です。

座標値は頂点座標変換をする指定をしていた場合は座標変換されたものの最大値となります。

MV1_REF_POLYGON *Polygons

参照用メッシュに含まれるポリゴン情報の配列へのポインタです。

配列の要素数は PolygonNum 個で、
中身はポリゴンが含まれているフレームの番号、
ポリゴンに使用されているマテリアルの番号、
ポリゴンの形成に使用されている頂点の番号3つなどです。

MV1_REF_VERTEX *Vertexs

参照用メッシュに含まれる頂点情報の配列へのポインタです。

配列の要素数は VertexNum 個で、
中身は頂点の位置・法線・テクスチャ座標・頂点カラーなどです。

ポリゴンの情報と頂点の情報が分かれているのは多くの場合一つの頂点は複数のポリゴンで使用されているので、
ポリゴンの情報の中に頂点の情報を含めてしまうと同じ頂点情報が幾つものポリゴン情報の中に含まれてデータサイズが無駄に大きくなってしまうからです。

次に頂点の情報が格納される構造体 MV1_REF_VERTEX は次のような内容になっています。

struct MV1_REF_VERTEX
{
// 位置
VECTOR    Position ;

// 法線
VECTOR    Normal ;

// テクスチャ座標
UV    TexCoord[ 2 ] ;

// ディフューズカラー
COLOR_U8    DiffuseColor ;

// スペキュラカラー
COLOR_U8    SpecularColor ;
} ;

VECTOR Position

頂点の座標です。

頂点座標変換をする指定をした場合は MV1SetPositionMV1AttachAnim などの設定が反映された座標が、
座標変換をしないようにした場合は読み込み時のメッシュのローカル座標そのままが代入されます。

座標変換をする指定をした場合は MV1RefreshReferenceMesh 関数を呼ぶことで座標値が更新されます。

VECTOR Normal

頂点の法線です。

頂点座標変換をする指定をした場合は MV1SetRotation や MV1AttachAnim などの設定が反映された法線ベクトルが、
座標変換をしないようにした場合は読み込み時のメッシュのローカル法線がそのまま代入されます。

座標変換をする指定をした場合は MV1RefreshReferenceMesh 関数を呼ぶことで法線値が更新されます。

UV TexCoord[ 2 ]

頂点のテクスチャ座標です。

UV は構造体で、中身は float u, v となっています。

一応マルチテクスチャを考慮して2つのテクスチャ座標を代入できるようになっていますが、
現在のバージョンでは TexCoord[ 0 ] しか使いません。


...

戻り値:
  0:成功

情報

プラグイン / モジュールDxLibW
バージョン3.24f
作成日2026/04/12
著作者DxLib: Takumi Yamada / HSP binding: IronHSP Project
URLhttps://dxlib.xsrv.jp/
備考hspdxlib.as をインクルードして使用
タイプDxLib ゲームライブラリ
グループDxLib 3Dモデル
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\hspdxlib.hs