【问题标题】:Java3d: Texture is not applied to OBJ model properlyJava3d:纹理未正确应用于 OBJ 模型
【发布时间】:2011-10-04 09:16:53
【问题描述】:

我使用以下几行将圆环的 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 模型具有单一颜色而不是图像作为纹理。提到的颜色,就是图片左下角像素的颜色。

解决办法是什么? 提前致谢。

【问题讨论】:

  • 使用Appearance时需要设置纹理坐标吗?如果是这样,那可能就是问题所在。
  • 我想过,但问题是“如何?”。我的意思是,当它是 QuadArray 或 TriangleArray 时,我可以设置纹理坐标。但是如何为导入的复杂 3d 模型设置纹理坐标呢?

标签: java mapping textures java-3d appearance


【解决方案1】:

用于创建 obj 文件的程序,例如 Mudbox,还允许您指定 UV 模型图像。分配一个油漆层,而不是将其导出为正确的格式。以为你可以加载纹理,你不会有 obj 的最佳细节。尝试改用这个纹理加载器代码。

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 模型名称,示例挖掘巧妙命名的模型,并将外观设置为 ap 或

model.setAppearance(ap);

如果您最初拥有它,这将几乎 100% 加载它。加载纹理海峡不会将其加载到所需的香菜。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 2019-11-24
    • 2014-10-24
    相关资源
    最近更新 更多