glsl - GLSL 禁用纹理的 alpha 采样
问题描述
我正在使用 PyOpenGL 开发一个简单的应用程序。它使用 2D(正交)渲染,几乎所有对象都是单四边形,并应用了基于 RGBA 图像的纹理。为了计算准确的命中测试,我正在使用帧缓冲区中的唯一颜色渲染纹理的 Alpha 通道。除了结果图像中颜色采样的小伪影外,该方法运行良好。
GLSL 着色器
#version 330 core
out vec4 FragColor;
in vec2 TexCoord;
uniform sampler2D ourTexture;
uniform vec4 in_color;
void main()
{
vec4 alpha = texture(ourTexture, TexCoord).aaaa;
FragColor = alpha*in_color;
}
帧缓冲区
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, self.width, self.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, None)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureColorbuffer, 0)
正如您在图像中看到的,边缘(蓝色)周围的某些像素未渲染为等于着色器的in_color参数。我需要的是始终如一的颜色。在 GLSL 中
- 将这些蓝色像素转换为in_color。(更好的解决方案)
- 如果不是,则根本不渲染蓝色像素。
因为图像用于命中测试,所以即使我得到锯齿状边缘,也没关系。
解决方案
推荐阅读
- java - Apache BeanUtils.copyProperties 首次访问变慢
- cakephp - 我正在使用 CakePHP 3.7 开发一个网站。我在 localhost 上工作,想从 localhost 向 gmail 发送电子邮件,但出现错误
- sublimetext3 - 在文本编辑器中按文件名切换到选项卡
- python - 使用python将pdf表连接到一个excel表中
- r - R:如果数据框 B 中的相应单元格等于某个值,则对数据框 A 的行中的单元格求和
- c# - 如何在 .NET Core 3.1 和 Entify Framework Core 中处理非常大的请求是个好主意
- javascript - 本地存储上的 Cookie?
- java - 阶乘递归,答案在纸上没有意义?
- r - 如何将数字函数应用于循环中的非数字
- python - 如何使用 Anaconda 升级到 Python 3.8?