Java3d: текстура не применяется к модели OBJ должным образом
Я загружаю 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 ответ
Программа, например 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-модели, например, mines с умным именем model, и установите значение ap или
model.setAppearance(ap);
Это загрузит его почти на 100%, если бы он был у вас изначально. Загрузка текстуры пролива вверх не приведет к загрузке ее в нужные кориандры.