none
画像データの任意の3点を指定してテクスチャマッピングする方法に関して RRS feed

  • 質問

  • MeshGeometry3DクラスのインスタンスにTextureCoordinates.AddによりPoint変数を設定することにより、指定した画像中の同一形状の三角形領域のテクスチャをMeshGeometry3Dクラスのインスタンスに拡大されて貼り付けられることを期待しましたが、うまくいきません。画像中の指定した三角形領域ではなく、常に画像の幅と高さの最大値まで広がった三角形領域になってしまいます。

    画像データの任意の3点を指定してテクスチャマッピングすることはできないのでしょうか?

    ご教授頂ければ幸いです。

     

    以下に、GeometryModel3Dクラスのインスタンスに対して三角形の位置設定、テクスチャマッピングを行う部分のテストルーチンを示します。

     

      void TestCreateTriangle(GeometryModel3D model, ImageSource ims)
      {
       ImageBrush imb = new ImageBrush(ims);
       MeshGeometry3D mesh = new MeshGeometry3D();
       Point3D[] pos = new Point3D[3];
       pos[0] = new Point3D(0, 0, 0);
       pos[1] = new Point3D(0, 1, 0);
       pos[2] = new Point3D(1, 0, 0);

       mesh.Positions.Add(pos[0]);
       mesh.Positions.Add(pos[1]);
       mesh.Positions.Add(pos[2]);
       double x = 0.0;
       double y = 0.0;
       mesh.TextureCoordinates.Add(new Point(x, y));
       mesh.TextureCoordinates.Add(new Point(x, y+0.15));
       mesh.TextureCoordinates.Add(new Point(x+0.3*ims.Height/ims.Width, y));
       mesh.TriangleIndices.Add(0);
       mesh.TriangleIndices.Add(1);
       mesh.TriangleIndices.Add(2);
       model.Geometry = mesh;
       model.Material = new DiffuseMaterial(imb);
      }

    2008年1月9日 11:26

回答

  • 画像のサイズに接する三角形を指定した場合はうまく動作するようなので、この方向で対応が取れそうです。

    以上で、質問を終了します。

     

    2008年1月10日 2:03