gpt4 book ai didi

java - 在片段着色器中更改 OpenGL 中纹理的颜色不太有效

转载 作者:行者123 更新时间:2023-12-01 09:55:52 25 4
gpt4 key购买 nike

我正在尝试让我的 GUI 能够在游戏中改变颜色,而无需加载新纹理。以下是我目前的实现方式。

我在片段着色器中使用 Sampler2D 获取纹理的颜色,然后借助一些统一变量,

uniform int maxSwapColors;
uniform bool colorSwap;
uniform vec3 textureColors[3];
uniform vec3 toBeColors[3];

我检查片段的颜色是否应该改变,即它是否等于textureColors中的颜色。其中,textureColor 是从 Sampler2D 收集的实际预加载纹理的颜色。

for(int i = 0; i < maxSwapColors; i++) {
if(textureColor.xyz == textureColors[i]) {
textureColor.xyz = toBeColors[i];
}
}

除一个问题外,此方法有效。

enter image description here

除了由于某种原因混合的 4 个色带之外,颜色几乎完全切换。实际纹理由全红和全绿两种颜色组成。在这些带中,您可以看到预加载纹理的颜色。

enter image description here

我认为混合是由于 OpenGL 在某个时刻发生的,但我不知道在哪里或为什么。即使当我 GL11.glDisable(GL11.GL_BLEND);

时也会发生这种情况

我尝试使用glsl的greaterThan()和lessThan()方法来创建textureColors的范围。这会使带变小,但不会完全消除它们,因此我正在寻找更全面的解决方案。

谢谢您,非常感谢任何帮助!

最佳答案

发生混合是因为您的纹理使用线性过滤。请改用最近过滤。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

关于java - 在片段着色器中更改 OpenGL 中纹理的颜色不太有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37229152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com