使用纹理的 Alpha 通道作为边框贴图
Use a texture's alpha channel as a border map
好的,所以这有点复杂(至少对我来说),而且我在任何地方都找不到任何类型的解决方案。我正在用OpenGL制作2D高尔夫游戏。背景是我制作的纹理,将具有课程地图。问题是球无法安全着陆的边界(出界、沙坑等)不是几何的,所以我不能只将球的 x 和 y 坐标与几个值进行比较,看看它是否出局。作为解决方案,我的一个想法是使用纹理的 alpha 通道来标记哪些像素越界与哪些像素越界。我会让我的着色器绘制 RGB 值,而不考虑 alpha。然后我会将界内标记为alpha==1.0f
,将界外标记为alpha==0.0f
,或者至少类似的东西。然后我可以在球的 x 和 y 坐标处对纹理进行采样,看看它是进还是出。其中大部分我可以自己完成,除了一件事:如何从 CPU 中采样纹理?我知道显卡上的着色器可以将texture()
函数与sampler2D
和vec2
一起使用,这都很好,但是如果片段着色器的唯一输出是颜色附件(不包括gl_FragDepth
或类似的东西),那么如何将返回的 alpha 值返回给 CPU?或者以某种方式在 CPU 上采样而不是使用另一个着色器?还是这整个概念有缺陷? 任何帮助,不胜感激。
附言我正在使用OpenGL 4,如果不清楚的话。
OpenGL的存在是为了进行渲染。仅仅为了以后读回 OpenGL 信息而提供 OpenGL 信息是错误的。
您根本不应该将此边界信息传递给 OpenGL,除非您打算使用它来绘制图片。即使您这样做,也要在 CPU 上保留它的副本,以便您可以轻松查询它。在 CPU 上,您只需计算需要从中读取和读取的像素坐标。
这与从 2D 数组读取没有什么不同。
- 在AVX通道中混洗的最佳方式
- 在Arduino中将PWM通道命名为LEDC是否有特定原因
- 空 grpc 客户端通道
- 需要帮助编写 for 循环以在字符串周围创建边框
- 如何在进程之间创建双向通道?
- 在 libsndfile 中一次写入一个通道
- 如何在 C++ 中建立进程之间的双向通道?
- 防止控制台在通道字符(在 c++ 中)中输入空格(即空格、制表符和换行符)
- 在RAW图像中提取RGB通道值的库或方法
- 在QT中为小部件添加彩色边框的最佳方法是什么
- 我正在尝试创建一个 C++ 贪吃蛇游戏,但我似乎无法绘制第二个高度边框,我该如何解决这个问题?
- 深度缓冲区未填充阴影贴图渲染通道中的数据
- 如何将具有两个通道的垫子转换为矢量<int><矢量>?
- QWeb通道新客户端获得初始状态?
- Gdiplus位图没有Alpha通道
- Go/C++gRPC客户端通道和存根生命周期
- HBITMAP 能否包含 alpha 通道信息?
- 使瓷砖之间没有边框的最佳方法?
- 向 QPixmap 添加边框
- 使用纹理的 Alpha 通道作为边框贴图