2016-10-15 3 views
1

Я создаю свой собственный игровой графический движок. Я изучил использование других, таких как Unity, но они не соответствуют моим потребностям. Во всяком случае, я использую OpenTK (это 2D-игра), и проблема в том, что когда я рисую текстуру на экране, то рисую квадрат к экрану, цвет темнеет на текстуре. Вот метод я использую, чтобы нарисовать текстуру:Как остановить текстуру от затемнения после рисования цветного квадрата в C# OpenTK?

public void Texture(int ID, Vector2 size, Vector2 pos, Vector2 texSize, Vector2 texPos) 
    { 
     pos.Y = -pos.Y; 

     GL.Enable(EnableCap.Texture2D); 
     GL.BindTexture(TextureTarget.Texture2D, ID); 
     GL.Begin(PrimitiveType.Quads); 

     GL.TexCoord2(texPos.X, texPos.Y); 
     GL.Vertex2(pos.X, pos.Y); 

     GL.TexCoord2(texPos.X + texSize.X, texPos.Y); 
     GL.Vertex2(pos.X + size.X, pos.Y); 

     GL.TexCoord2(texPos.X + texSize.X, texPos.Y + texSize.Y); 
     GL.Vertex2(pos.X + size.X, pos.Y - size.Y); 

     GL.TexCoord2(texPos.X, texPos.Y + texSize.Y); 
     GL.Vertex2(pos.X, pos.Y - size.Y); 

     GL.End(); 
    } 

Я инвертирование Y, потому что я привык к формам Windows, систему, в которой спускаясь на координату ++. Я называю это так:

Texture(backdropTextureID, new Vector2(1f, 1f), new Vector2(-0.5f, -0.5f), new Vector2(1f, 1f), new Vector2(0f, 0f)); 

Как и следовало ожидать, если нет ничего другого втягивается, он рисует текстуры с GL ид backdropTextureID в центре экрана. Однако, когда я рисую цветной квадрат, текстура затемняется. Вот метод, который я использую для рисования квадроцикла:

public void Quad(Vector2 pos1, Vector2 pos2, Vector2 pos3, Vector2 pos4, Color color1, Color color2, Color color3, Color color4) 
    { 
     GL.Disable(EnableCap.Texture2D); 
     pos1.Y = -pos1.Y; 
     pos2.Y = -pos2.Y; 
     pos3.Y = -pos3.Y; 
     pos4.Y = -pos4.Y; 

     GL.Begin(PrimitiveType.Quads); 

     GL.Color3(color1); 
     GL.Vertex2(pos1); 

     GL.Color3(color2); 
     GL.Vertex2(pos2); 

     GL.Color3(color3); 
     GL.Vertex2(pos3); 

     GL.Color3(color4); 
     GL.Vertex2(pos4); 

     GL.End(); 
    } 

Опять же, инвертирование Y по причине, указанной выше. Кроме того, заметьте, я включил EnableCap.Texture2D в методе рисования текстуры и отключил его, когда рисую цветной квадратик. Я называю метод quad следующим образом:

Quad(new Vector2(0.0f, 0.0f), new Vector2(0.5f, 0.0f), new Vector2(0.5f, 0.5f), new Vector2(0.0f, 0.5f), Color.Gray, Color.Gray, Color.Gray, Color.Gray); 

Если кто-нибудь может мне помочь, заранее. В основном: как остановить текстуру от затемнения после рисования цветного квадрата в C# OpenTK?

ответ

0

Для тех, у кого есть эта проблема, я понял это. Тот же цвет, который я давал цветному квадрату, я дал текстуре. Вам просто нужно добавить

GL.Color3(Color.Transparent); 

в начало метода рисования текстуры.

Смежные вопросы