我一直在使用Google提供的Arcore演示代码并且在Android Studio中工作,如果我能完成此任务,我想避免使用Unity。
默认情况下,平面显示为白色的三角形,负空间是透明的。我想将该计划改为可以在整个环境中平铺的纹理,这样的一个例子就是草纹理。
该平面使用的默认图像是名为 trigrid.png 的文件,该文件在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文件有关,但我没有任何经验。
任何见解都会有所帮助。
答案 0 :(得分:1)
着色器非常重要。如果你想在OpenGL中进行任何图形编程,你至少需要了解一下着色器。它们是在图形处理单元(GPU)上运行的程序,用于确定每帧的每个像素的颜色。我在这里快速介绍着色器:https://youtu.be/AyNZG_mqGVE。
要回答您的问题,您可以使用新的片段着色器,它只绘制纹理而不会混合其他颜色。这是一个快速而肮脏的解决方案,从长远来看,您肯定希望清理代码以不引用不再使用的所有统一变量。
具体做法是:
在plane_simple_fragment.shader
目录中创建名为src/main/assets/raw
的新文件。
在编辑器中打开它并添加以下代码:
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
,更改为新着色器。