使用纹理的 Alpha 通道作为边框贴图

Use a texture's alpha channel as a border map

本文关键字:边框 通道 纹理 Alpha      更新时间:2023-10-16

好的,所以这有点复杂(至少对我来说),而且我在任何地方都找不到任何类型的解决方案。我正在用OpenGL制作2D高尔夫游戏。背景是我制作的纹理,将具有课程地图。问题是球无法安全着陆的边界(出界、沙坑等)不是几何的,所以我不能只将球的 x 和 y 坐标与几个值进行比较,看看它是否出局。作为解决方案,我的一个想法是使用纹理的 alpha 通道来标记哪些像素越界与哪些像素越界。我会让我的着色器绘制 RGB 值,而不考虑 alpha。然后我会将界内标记为alpha==1.0f,将界外标记为alpha==0.0f,或者至少类似的东西。然后我可以在球的 x 和 y 坐标处对纹理进行采样,看看它是进还是出。其中大部分我可以自己完成,除了一件事:如何从 CPU 中采样纹理?我知道显卡上的着色器可以将texture()函数与sampler2Dvec2一起使用,这都很好,但是如果片段着色器的唯一输出是颜色附件(不包括gl_FragDepth或类似的东西),那么如何将返回的 alpha 值返回给 CPU?或者以某种方式在 CPU 上采样而不是使用另一个着色器?还是这整个概念有缺陷? 任何帮助,不胜感激。

附言我正在使用OpenGL 4,如果不清楚的话。

OpenGL的存在是为了进行渲染。仅仅为了以后读回 OpenGL 信息而提供 OpenGL 信息是错误的。

您根本不应该将此边界信息传递给 OpenGL,除非您打算使用它来绘制图片。即使您这样做,也要在 CPU 上保留它的副本,以便您可以轻松查询它。在 CPU 上,您只需计算需要从中读取和读取的像素坐标。

这与从 2D 数组读取没有什么不同。