MATLAB: Patchの表面カラ​ーにテクスチャを割り​当てることはできます​か?

acevertexcdataMATLABpatch日本語

patchを利用して多角形を表示する際に,表面カラーにテクスチャを割り当てる方法はありますか?
3Dモデルのポリゴンデータをpatchを利用して可視化しようと考えています.現在,下記のデータを読み込むことができています.
  • モデルに定義されているすべての頂点の座標
  • ひとつのポリゴンに含まれる頂点の集合
  • 各頂点のUV座標(モデル内の各頂点がテクスチャ上のどの画素を指すかを表す座標)
今のところ,モデルに定義されているすべての頂点の座標から,patch関数を利用してポリゴンを表示しています. この状態で,モデルの形状自体は正しく表示されるような状況となっています.
現在,テクスチャデータから色情報を読み取って,ポリゴンの表面カラーを設定しようとしています. 具体的には,以下の手順で行っています.
  1. 画像データ読み込み
  2. モデルの各頂点に対し,UV座標を元に,読み取った画像データの位置に対応する色を取得し,それを頂点の色データとする.
  3. patchのプロパティであるFaceVertexCDataに3で読み取った色データを適用
上記の手順を実行しますと,patchのプロパティFaceColorがinterpに設定されている場合,FaceVertexCDataで設定されている各頂点の色データに対して線形で補間されるように面の色が表示されます. しかしながら,ポリゴンの頂点の密度が粗い場合,テクスチャ画像の様子を再現することができません.
本来は,ポリゴンの頂点に定義されたUV座標に対応する画像の一部分を「切り抜いて貼り付ける」ようなマッピングができればよいのですが,patchでは単に面の色が単一の色(flat)もしくはグラデーション的に変わるような設定(interp)しかできないようでした.
patchに対して上記のようなテクスチャマッピングをする方法,もしくは何か代案などはありませんでしょうか?
代替策としてsurfaceを利用することが考えられますが,複雑なポリゴンでは重ね合わせる数が多くなり,動作が重くなることを危惧しております.

Best Answer

詳細に記載頂きありがとうございます。
おっしゃる通り patch オブジェクトでは、全体の色、もしくは面毎/頂点毎の色指定にのみ対応しており、ポリゴンの頂点の密度が粗い場合、テクスチャ画像の再現は難しいですね。個人的にはsurface オブジェクトの利用をおすすめします。
すでにご覧になられたかとは思いますが、こちらのエントリーも参考にしてください。 Is it possible to perform texture mapping within MATLAB?