2

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

这是渲染代码的样子:

        // 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();
4

1 回答 1

3

默认的纹理环境模式是 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);

于 2011-04-09T20:06:53.207 回答