【问题标题】:Parsing .obj model from SD card Rajawali从 SD 卡 Rajawali 解析 .obj 模型
【发布时间】:2021-05-21 20:43:18
【问题描述】:

我正在使用 Rajawali 3D 框架并尝试从 SD 卡加载 .obj 文件。当我将这些文件(.obj、.mtl、texture.png(可绘制文件夹))放在原始文件夹时,我能够上传和解析 obj 文件,但是当我尝试从 sdcard 解析它时,它说:

 [org.rajawali3d.materials.Material] Could not compile fragmentshader:
 Shader log: Fragment shader compilation failed.

这是我从 SD 卡上传 .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.

【问题讨论】:

    标签: android opengl-es rajawali


    【解决方案1】:

    如果您能够从原始文件夹中读取 obj 文件,即

    LoaderOBJ objParser = new LoaderOBJ(mContext.getResources(),mTextureManager, R.raw.camero_obj);
    

    而不是从您的 sdcard 中,您必须对文件进行以下更改: 在您的 obj 文件中,该文件必须保存为 _obj 在您的 SD 卡中 (因此对于 _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 你在哪里得到错误:

    错误:0:13:'.' : 语法错误:语法错误

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

    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] 无法编译 片段着色器:

    它无法从您的材质文件中读取您的纹理文件,为此您可以在您的材质文件中进行上述更改。

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

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多