首页 文章

如何在ARcore中的平面上显示纹理?

提问于
浏览
0

我一直在使用Google提供的Arcore演示代码并且在Android Studio中工作,如果我能完成此任务,我想避免使用Unity .

默认情况下,平面显示为白色的三角形,负空间是透明的 . 我想将该计划改为可以在整个环境中平铺的纹理,这样的一个例子就是草纹理 .

该平面使用的默认图像是一个名为trigrid.png的文件,它在HelloArActivity.java中定义 .

https://github.com/google-ar/arcore-android-sdk/blob/master/samples/java_arcore_hello_ar/app/src/main/java/com/google/ar/core/examples/java/helloar/HelloArActivity.java

我试图用一个只是草纹理的图像文件替换它,并将其命名为floor.png . 这只是全白色,根本不显示草 .

}
    try {
        mPlaneRenderer.createOnGlThread(/*context=*/this, "floor.png");
    } catch (IOException e) {
        Log.e(TAG, "Failed to read plane texture");
    }

我试过添加

GLES20.glEnable(GLES20.GL_BLEND);

在drawPlanes函数中,但似乎没有帮助 . 我还评论了drawPlanes中一些颜色的变化 .

//GLES20.glClearColor(1, 1, 1, 1);
    //GLES20.glColorMask(false, false, false, true);
    //GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    //GLES20.glColorMask(true, true, true, true);

我不确定制作纹理所需的内容 . 它可能与plane_fragment.shader文件有关,但我没有任何经验 .

任何见解都会有所帮助 .

1 回答

  • 1

    着色器非常重要 . 如果你想在OpenGL中进行任何图形编程,你至少需要了解一下着色器 . 它们是在图形处理单元(GPU)上运行的程序,用于确定每帧的每个像素的颜色 . 我快速介绍着色器在这里:https://youtu.be/AyNZG_mqGVE .

    要回答您的问题,您可以使用新的片段着色器,它只绘制纹理而不会混合其他颜色 . 这是一个快速而肮脏的解决方案,从长远来看,您肯定希望清理代码以不引用不再使用的所有统一变量 .

    特别:

    • src/main/assets/raw 目录中创建名为 plane_simple_fragment.shader 的新文件 .

    • 在编辑器中打开它并添加以下代码:

    uniform sampler2D u_Texture;
    varying vec3 v_TexCoordAlpha;
    
    void main() {
      gl_FragColor = texture2D(u_Texture, v_TexCoordAlpha.xy);
    }
    
    • 然后在 PlaneRenderer 中将 R.raw.plane_fragment 替换为 R.raw.plane_simple_fragment ,更改为新着色器 .

相关问题