Android 中的 Rajawali 对我来说一切都很好,纹理除外。 我想以编程方式加载一个透明图像作为纹理,具有棋盘图案,其中每个黑色方 block 实际上是完全透明的,而每个白色方 block 都是白色的。 我想将其用作对象上的纹理,否则该对象具有可以通过编程方式更改的漫反射和镜面反射颜色属性。因此,如果用户输入了蓝色,我希望对象显示蓝白色图案。 我怎样才能做到这一点? 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);
但这也行不通。 有人有想法吗?
最佳答案
你必须添加那个纹理作为一个 child ,一个 .obj 文件的 child ,如果你不知道有多少 child 有你的 .obj 和他们的名字,使用:
"your3DobjectName".numChildren(),
然后使用一个简单的
for(int i = 0; i < "your3DobjectName".numChildren(); i++)
{
String name = "your3DobjectName".getChildAt(i).name();
Log.d("rajawali", "Name: "+name);
}
这样你就可以知道在你的obj有多少 child 和 child 的名字
关于android - Rajawali 中具有可编程颜色的纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29016168/