1

Android 中的 Rajawali 对我来说一切都很好,除了纹理。我想以编程方式将透明图像加载为纹理,并带有棋盘图案,其中每个黑色方块实际上都是完全透明的,而每个白色方块都是白色的。我想将它用作对象上的纹理,否则它具有可以通过编程方式更改的漫反射和镜面反射颜色属性。因此,如果用户输入了蓝色,我希望对象显示蓝白色图案。我怎样才能做到这一点?rajawali 教程并没有真正帮助,因为对于纹理,rajawali 在上次更新中发生了很大变化。此外,Rajawali 示例应用程序并没有真正的帮助,因为它们似乎都在处理环境地图。我尝试的是例如:

protected void initScene() {
objParser = new LoaderOBJ(mContext.getResources(), mTextureManager,        R.raw.stdblock_obj); 
try{
Texture jetTexture = new Texture("jetTexture", R.drawable.chessboardtexture);
mTextureManager.getInstance().addTexture(jetTexture);
semiglossMaterial.addTexture(jetTexture);
semiglossMaterial.setColorInfluence(0);
}catch(TextureException e){
e.printStackTrace();
}
}

对象被渲染,但没有任何纹理。棋盘图像的大小确实是 2 的幂,它位于右侧文件夹 R.raw.stdblock_obj 中。这是一个 jpg 图像,但我也尝试了 png 也不起作用。

我还尝试了另一种方法:

semiglossMaterial.enableLighting(true);
semiglossMaterial.setDiffuseMethod(new DiffuseMethod.Lambert());    
phongMethod.setShininess(iShininess);            semiglossMaterial.addTexture(new Texture("jetTexture",R.drawable.chessboardtexture));
semiglossMaterial.addTexture(new AlphaMapTexture("alphaMapTex", R.drawable.simpletexture3));
semiglossMaterial.setColorInfluence(0);

但这也没有用。任何人的想法?

4

1 回答 1

1

您必须将该纹理添加为孩子,.obj 文件的孩子,如果您不知道有多少孩子有您的 .obj 和它们的名称,请使用:

"your3DobjectName".numChildren(), 

然后使用一个简单的

for(int i = 0; i < "your3DobjectName".numChildren(); i++)
{ 
   String name = "your3DobjectName".getChildAt(i).name(); 
   Log.d("rajawali", "Name: "+name);
}

通过这种方式,您将知道在您的 obj 中声明了多少个孩子和孩子的名字

于 2015-05-13T15:17:57.000 回答