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

标签 android opengl-es rajawali

我正在使用 Rajawali 3D 框架并尝试从 SD 卡加载 .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();
            }

日志:

 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.

最佳答案

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

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

而不是从你的 SD 卡,你必须在你的文件中做以下更改: 在你的 obj 文件中,必须在你的 sdcard 中保存为 _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:

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

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

关于android - 从 SD 卡 Rajawali 解析 .obj 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30839053/

相关文章:

android - GL_MAX_TEXTURE_SIZE 较低的 Android 设备上的纹理不佳

ios - 每帧渲染一个小纹理然后按比例放大?

android - 在android中动态添加3d对象和纹理

android - 将数据从 onReceive 传递到新 Activity

android - 如何在android studio中打开主题编辑器

android - 如何检查 EGL 上下文是否被保留?

android - 在 rajawali android 的表面 View 上渲染与原始图像大小相同的图像

Android 和 Planet 渲染

android - Kotlin 代码从可变列表中删除一种特定类型的重复对象

notifyDataSetChanged 后未调用 android getChildView