3

次の行を使用して、トーラスの 3D モデル (obj ファイル) をプログラムに読み込みます。

Shape3D torus=null;
Scene t1 = getSceneFromFile("Some local path\torus.obj");

次に、次のコードを使用してシーンからモデルを取得します。

BranchGroup branchGroup = t1.getSceneGroup();
torus = (Shape3D) branchGroup.getChild(0);

次のコードは、イメージをテクスチャとして設定し、そのテクスチャを Appearance オブジェクトに適用します。

TextureLoader textureLoader=new TextureLoader("Another local path\myImage.jpg",null);
ImageComponent2D image=textureLoader.getImage();
Texture2D texture=new Texture2D(Texture.BASE_LEVEL,Texture.RGBA,image.getWidth(),image.getHeight());
texture.setImage(0, image);

Appearance app = new Appearance();
app.setTexture(texture);

torus.setAppearance(app);

コードを実行すると、トーラス モデルは正しく読み込まれますが、テクスチャが正しく割り当てられません。より正確には、3D モデル全体が、テクスチャとして画像ではなく単一の色を持っています。言及された色は、画像の左下にあるピクセルの色です。

解決策は何ですか?前もって感謝します。

4

1 に答える 1

0

obj ファイルの作成に使用する Mudbox などのプログラムでは、UV モデル イメージを割り当てることもできます。正しい形式に書き出すよりも、ペイント レイヤを割り当てます。これでテクスチャをロードできると思ったのですが、オブジェクトに最高のディテールはありません。代わりに、このテクスチャ ローダー コードを使用してみてください。

static TextureLoader loader = new TextureLoader("C:\\Users\\Sawyera\\Desktop\\Paint Layer 1.jpg",
    "RGP", new Container());
static Texture texture = loader.getTexture();

   texture.setBoundaryModeS(Texture.WRAP);
texture.setBoundaryModeT(Texture.WRAP);
texture.setBoundaryColor(new Color4f(0.0f, 1.0f, 0.0f, 0.0f));
TextureAttributes texAttr = new TextureAttributes();
texAttr.setTextureMode(TextureAttributes.MODULATE);
Appearance ap = new Appearance();
ap.setTexture(texture);
ap.setTextureAttributes(texAttr);

次に、3d モデルの名前を取り、例の鉱山は巧妙にモデルに名前を付け、apperance を ap または

model.setAppearance(ap);

これにより、最初に持っていた場合、ほぼ 100% ロードされます。テクスチャをストレートにロードしても、目的のコリダンにロードされません。

于 2013-03-19T01:57:18.513 に答える