gpt4 book ai didi

OpenGL 调色板交换着色器?

转载 作者:行者123 更新时间:2023-12-02 05:18:57 26 4
gpt4 key购买 nike

我正在编写一款格斗游戏,其中每个角色都有大量 Sprite ,每个角色都有几个不同的调色板交换。我一直在尝试为每个 Sprite 使用灰度纹理,为每个调色板使用 256x1 纹理。

我的着色器看起来像这样:

顶点:

varying vec2 coord;
void main(void)
{
coord = gl_MultiTexCoord0.xy;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}

片段:

uniform sampler2D palette;
uniform sampler2D texture;
varying vec2 coord;
void main()
{
gl_FragColor = texture2D(palette, vec2(texture2D(texture, coord).r, 0));
}

使用 glGetUniformLocation 和 glUniform1i,“palette”设置为 1,“texture”设置为 0。他们编译得很好,链接也很好。我能够在我的绘图代码中使用程序对象。

问题是,我不知道如何使用多重纹理来让“调色板”和“纹理”纹理在着色器中相互协作。这是我第一次使用多纹理,我似乎无法弄清楚如何让它为这种解决方案工作。有谁知道如何使用这些着色器(如果它们正确的话)来模拟调色板交换?

编辑:这是我现在的绘图代码:

glUseProgram(paletteProgram);
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, palette);
glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);

glBegin(GL_QUADS);
glTexCoord2f(w1, h1);
glVertex3f(x1, y1, 0);
glTexCoord2f(w1, h2);
glVertex3f(x1, y2, 0);
glTexCoord2f(w2, h2);
glVertex3f(x2, y2, 0);
glTexCoord2f(w2, h1);
glVertex3f(x2, y1, 0);
glEnd();

glUseProgram(0);

最佳答案

您的逻辑似乎很合理。您需要做的是使用 glActiveTexture 设置事件纹理然后像往常一样绑定(bind)您的纹理(对于纹理单元 0 和 1)。现在还将值 0 绑定(bind)到名为 texture 的制服,将 1 绑定(bind)到名为 palette 的制服。

在 GLSL 中,您可以使用 texture2D 从适当的采样器中获取纹素。

希望这对您有所帮助!

这实际上在 this 中有详细解释。 NeHe 教程(部分:使用带有 GLSL 的纹理)。

这是你需要做的

    glUseProgramObject(my_program);
int my_sampler_uniform_location = glGetUniformLocation(my_program, my_color_texture);

glActiveTexture(GL_TEXTURE0 + i);
glBindTexture(GL_TEXTURE_2D, my_texture_object);

glUniform1i(my_sampler_uniform_location, i);

关于OpenGL 调色板交换着色器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10823522/

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