我一直在使用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文件有关,但我没有任何经验 .
任何见解都会有所帮助 .
1 回答
着色器非常重要 . 如果你想在OpenGL中进行任何图形编程,你至少需要了解一下着色器 . 它们是在图形处理单元(GPU)上运行的程序,用于确定每帧的每个像素的颜色 . 我快速介绍着色器在这里:https://youtu.be/AyNZG_mqGVE .
要回答您的问题,您可以使用新的片段着色器,它只绘制纹理而不会混合其他颜色 . 这是一个快速而肮脏的解决方案,从长远来看,您肯定希望清理代码以不引用不再使用的所有统一变量 .
特别:
在
src/main/assets/raw
目录中创建名为plane_simple_fragment.shader
的新文件 .在编辑器中打开它并添加以下代码:
PlaneRenderer
中将R.raw.plane_fragment
替换为R.raw.plane_simple_fragment
,更改为新着色器 .