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

时间:2016-07-10 05:25:55

标签: c++ opengl textures sampling

好的,所以这有点复杂(至少对我来说),而且我无法在任何地方找到任何解决方案。我在OpenGL中制作2D高尔夫游戏。背景是我制作的纹理,它将有一个课程地图。问题是球不能安全着陆的边界(越界,沙坑等)不是几何的,所以我不能只将球的x和y坐标与几个值进行比较,看看是否它出来了。我作为解决方案的一个想法是使用纹理的alpha通道来标记哪些像素超出边界而不是边界。无论alpha如何,我都会让我的着色器绘制RGB值。然后我会将入境标记为alpha==1.0f,将出界标记为alpha==0.0f,或至少类似于此类似的东西。然后我可以在球的x和y坐标处对纹理进行采样,看看它是在进出还是进出。除此之外,我可以完成大部分工作:如何从CPU 中采样纹理?我知道显卡上的着色器可以使用带有texture()sampler2D的{​​{1}}函数,这一切都很好,但是如果片段着色器的唯一输出是彩色附件(不计算vec2或类似的东西),那么如何将返回的alpha值返回给CPU?或者以某种方式在CPU上进行采样而不是使用其他着色器?或者整个概念是否有缺陷?任何帮助表示赞赏。

P.S。我正在使用OpenGL 4,如果不清楚的话。

1 个答案:

答案 0 :(得分:2)

存在OpenGL以进行渲染。提供OpenGL信息的唯一目的是为了以后阅读它是错误的。

除非您打算使用它来绘制图片,否则您不应将此边界信息传递给OpenGL。即使你这样做,也要在CPU上保留一份副本,这样你就可以毫不费力地查询它。在CPU上,您只需计算需要读取的像素坐标,然后从中读取。

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