Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 以前对GL.Color3的调用使我的纹理使用了错误的颜色_Opengl_Opentk - Fatal编程技术网

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

Opengl 以前对GL.Color3的调用使我的纹理使用了错误的颜色,opengl,opentk,Opengl,Opentk,制作一个2D OpenGL游戏。渲染帧时,我需要首先绘制一些计算的四边形几何体,然后绘制一些纹理精灵。当我的渲染方法主体只绘制精灵时,一切正常。但是,当我尝试在精灵之前绘制几何四边形时,精灵的纹理将更改为之前使用的最后一个GL.Color3的颜色。我如何告诉OpenGL(好的,OpenTK)“好的,我们已经完成了几何图形的绘制,现在是时候开始绘制精灵了?” 以下是渲染代码的外观: // Let's do some geometry GL.Begin(BeginM

制作一个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();

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

一个简单的解决方案是,在绘制纹理基本体之前,使用以下选项将顶点颜色设置为1,1,1,1:

glColor4f(1.0f、1.0f、1.0f、1.0f)

另一种解决方案是将“纹理环境”模式更改为“GL_替换”,这会使纹理颜色替换顶点颜色,而不会出现以下问题:

glTexEnvi(GL_纹理_环境,GL_纹理_环境模式,GL_替换)