【问题标题】:How do you get a texture to appear on a plane in ARcore?如何让纹理出现在 ARcore 的平面上?
【发布时间】:2017-10-31 22:12:22
【问题描述】:

我一直在使用 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 文件有关,但我对此没有任何经验。

任何见解都会有所帮助。

【问题讨论】:

    标签: android opengl-es arcore


    【解决方案1】:

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

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

    具体来说:

    1. src/main/assets/raw 目录中创建一个名为plane_simple_fragment.shader 的新文件。

    2. 在编辑器中打开并添加以下代码:

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

    【讨论】:

    • 成功了!感谢您花时间帮助我解决这个问题。这个新着色器使纹理出现。
    • 谢谢!现在,我需要在 PlaneRenderer 中进行什么更改 1) 只看到这个纹理的一次出现 2) 定义它的大小 3) 定义它在平面上的位置?谢谢!
    猜你喜欢
    • 2015-04-30
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 2019-05-31
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多