我有一个java 3d应用程序和这个应用程序我将OBJ文件加载到我的场景中。如何为此模型指定纹理(jpg文件)? 更确切地说,当我想将纹理分配给原始java对象(例如球体)时,我使用以下内容:
Sphere sphere = new Sphere(Radius, Primflags, Appearance);
但是,在加载和添加obj文件时,我会这样做:
Scene scene = getSceneFromFile("OBJ file");
myBranchGroup = scene.getSceneGroup();
在第二种情况下,我找不到分配纹理的方法。我该怎么做?
答案 0 :(得分:1)
您必须使用您制作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);
int primflags = Primitive.GENERATE_NORMALS
+ Primitive.GENERATE_TEXTURE_COORDS;
ObjectFile loader = new ObjectFile(ObjectFile.RESIZE);
然后在将模型指定给场景之前添加此项。假设3D模型变得模糊,称为模型
model.setAppearance(ap);
答案 1 :(得分:0)
IIRC您需要从分支组中获取要应用纹理的Shape3D
节点(调用setAppearance(...)
),例如通过使用getChild(index)
等等。请注意,您可能会以递归方式遍历子项,因为您获得的分支组实际上可能包含其他组,因此您可能会在组树的下方找到形状。
或者,您应该能够将AlternateAppearance
对象添加到分支组。