Java3d: текстура не применяется к модели OBJ должным образом - PullRequest
3 голосов
/ 04 октября 2011

Я загружаю 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 модель имеет один цвет вместо изображения в качестве текстуры.Упомянутый цвет - это цвет пикселя в левом нижнем углу изображения.

Какое решение?Заранее спасибо.

1 Ответ

0 голосов
/ 19 марта 2013

Программа, например Mudbox, которую вы используете для создания файла obj, также позволяет назначать изображения модели UV. Назначьте слой краски, а затем экспортируйте его в правильный формат. Хотя вы можете загрузить текстуру, у вас не будет лучшей детализации к объекту. Попробуйте использовать этот код загрузчика textur.

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-модели, например, мины с умным именем model, и установите значение ap или

model.setAppearance(ap);

Это загрузит его почти на 100%, если бы он был у вас изначально. Загрузка текстуры в пролив вверх не приведет к загрузке ее в нужные кориандры.

...