android – 从SD卡Rajawali解析.obj模型

我正在使用Rajawali 3D Framework并尝试从SDcard加载.obj文件.当我将这些文件(.obj,.mtl,texture.png(可绘制文件夹))放在原始文件夹上时,我能够上传和解析obj文件,但是当我尝试从sdcard解析它时,它说:
[org.rajawali3d.materials.Material] Could not compile fragmentshader:
 Shader log: Fragment shader compilation Failed.

这是我从Sdcard上传.obj文件代码

private Object3D Object;
LoaderOBJ objParser = new LoaderOBJ(this,"Load/1c_obj");

            try {

                objParser.parse();
                Object = objParser.getParsedobject();
                getCurrentScene().addChild(Object);

            } catch (ParsingException e) {
                e.printstacktrace();
            }

logcat的:

D/Rajawali﹕ Parsing: /storage/emulated/0/Load/1c_obj
 D/LoaderOBJ﹕ Found Material Lib: 1c_mtl
 D/LoaderOBJ$MaterialLib﹕ Parsing material: Texture0
 D/LoaderOBJ$MaterialLib﹕ Parsing material: Texture1

    9578-9612/com.example.loadobj D/LoadModelFragment$LoadModelRenderer﹕ startRendering()
    E/Rajawali﹕ [org.rajawali3d.materials.Material] Could not compile fragment shader:
    9578-9612/com.example.loadobj E/Rajawali﹕ Shader log: Fragment shader compilation Failed.
    ERROR: 0:13: '.' : Syntax error:  Syntax error
    ERROR: 1 compilation errors.  No code generated.

链接帖子:https://plus.google.com/111465395343320783064/posts/g19G56J3iGW

解决方法

如果你能够从你的原始文件夹中读取obj文件
LoaderOBJ objParser = new LoaderOBJ(mContext.getResources(),mTextureManager,R.raw.camero_obj);

而不是从您的SD卡,您必须在文件中进行以下更改:
在你的obj文件中,必须在你的SD卡中保存为_obj(所以对于同一位置的_jpg和_mtl)

在你的情况下:

mtllib 1c_mtl

v -0.7526 14.5146 0.171602
v -0.7922 14.5792 0.075402
v -0.4998 14.7082 0.457802
v -0.5409 14.7486 0.393002
v -0.5358 14.5862 0.414902

以下是mtl文件

newmtl Texture0
    illum 0
    Kd 0.7 0.7 0.7
    Ks 0 0 0
    Ka 0 0 0
newmtl Texture1
    illum 0
    Kd 0.7 0.7 0.7
    Ks 0 0 0
    Ka 0 0 0
    map_Kd parse_jpg

记得将纹理jpg重命名为_jpg
你收到错误的地方:

ERROR: 0:13: ‘.’ : Syntax error: Syntax error

在此之后,请按照您的代码进行解析:

private Object3D Object;
LoaderOBJ objParser = new LoaderOBJ(this,"Load/1c_obj");

            try {

                objParser.parse();
                Object = objParser.getParsedobject();
                getCurrentScene().addChild(Object);

            } catch (ParsingException e) {
                e.printstacktrace();
            }

你得到的错误

E/Rajawali﹕ [org.rajawali3d.materials.Material] Could not compile
fragment shader:

它无法从材料文件中读取纹理文件,为此您可以在材料文件中执行上述更改.

有关自定义材质或顶点着色器的更多详细信息,请参阅Rajawail文档和示例

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...