gpt4 book ai didi

opengl - 以前对 GL.Color3 的调用使我的纹理使用了错误的颜色

转载 作者:行者123 更新时间:2023-12-04 06:29:32 25 4
gpt4 key购买 nike

制作 2D OpenGL 游戏。渲染帧时,我需要先绘制一些计算出的四边形几何图形,然后再绘制一些带纹理的 Sprite 。当我的渲染方法的主体只绘制 Sprite 时,一切正常。但是,当我尝试在 Sprite 之前绘制几何四边形时, Sprite 的纹理会更改为之前使用的最后一个 GL.Color3 的颜色。我如何告诉 OpenGL(好吧,OpenTK)“好吧,我们已经完成了几何图形的绘制,现在是时候转向 Sprite 了?”

这是渲染代码的样子:

        // Let's do some geometry 
GL.Begin(BeginMode.Quads);
GL.Color3(_dashboardBGColor); // commenting this out makes my sprites look right

int shakeBuffer = 100;
GL.Vertex2(0 - shakeBuffer, _view.DashboardHeightPixels);
GL.Vertex2(_view.WidthPixelsCount + shakeBuffer, _view.DashboardHeightPixels);
GL.Vertex2(_view.WidthPixelsCount + shakeBuffer, 0 - shakeBuffer);
GL.Vertex2(0 - shakeBuffer, 0 - shakeBuffer);

GL.End();

// lets do some sprites
GL.Begin(BeginMode.Quads);
GL.BindTexture(TextureTarget.Texture2D, _rockTextureId);

float baseX = 200;
float baseY = 200;

GL.TexCoord2(0, 0); GL.Vertex2(baseX, baseY);
GL.TexCoord2(1, 0); GL.Vertex2(baseX + _rockTextureWidth, baseY);
GL.TexCoord2(1, 1); GL.Vertex2(baseX + _rockTextureWidth, baseY - _rockTextureHeight);
GL.TexCoord2(0, 1); GL.Vertex2(baseX, baseY - _rockTextureHeight);

GL.End();

GL.Flush();
SwapBuffers();

最佳答案

默认的纹理环境模式是 GL_MODULATE,它这样做,它将纹理颜色与顶点颜色相乘。

一个简单的解决方案是在绘制纹理图元之前将顶点颜色设置为 1,1,1,1:

glColor4f(1.0f, 1.0f, 1.0f, 1.0f);

另一种解决方案是将纹理环境模式更改为GL_REPLACE,这使得纹理颜色替换顶点颜色并且没有问题:

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

关于opengl - 以前对 GL.Color3 的调用使我的纹理使用了错误的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5607471/

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