OpenGL の学習に役立つ簡単なゲームを作成します。現在のバージョンでは、レンダリング メソッドは、コードで定義された色でいくつかのジオメトリ クワッドを描画してから、いくつかのスプライトをレンダリングします。これまでのところ、すべてが正常で、意図したとおりに機能しています。私のスプライトの背景には、透明に設定するつもりだったが、まだ設定していない色のAuquaがあります。したがって、すべてのスプライトが青色で囲まれているように見えることを除けば、今のところゲームは正常に見えます。青を消して代わりに透明にしたいところなので、OnLoad メソッドを次のように変更します。
...
Bitmap bitmap = new Bitmap("RockTexture.bmp"); // existing line
bitmap.MakeTransparent(Color.Aqua); // new line
...
しかし、ゲームを実行すると、すべてのジオメトリ クワッドが画面から消えてしまいます。私のスプライトは残り、適切に透明に見えます。
なぜこれが起こっているのかわかりません。これが私のレンダリング方法です:
protected override void OnRenderFrame(FrameEventArgs e)
{
base.OnRenderFrame(e);
GL.Clear(ClearBufferMask.ColorBufferBit);
GL.Begin(BeginMode.Quads);
Color prevColor = default(Color);
foreach (var quad in _view.GeomitryList)
{
if (prevColor != quad.Color)
{
GL.Color4(quad.Color);
prevColor = quad.Color;
}
GL.Vertex2(quad.UpperLeftBound.X, quad.UpperLeftBound.Y);
GL.Vertex2(quad.LowerRightBound.X, quad.UpperLeftBound.Y);
GL.Vertex2(quad.LowerRightBound.X, quad.LowerRightBound.Y);
GL.Vertex2(quad.UpperLeftBound.X, quad.LowerRightBound.Y);
}
GL.Color4(_unitColor); // reset color multiplier to not scew textures
prevColor = _unitColor;
GL.BindTexture(TextureTarget.Texture2D, _rockTextureId);
foreach (var sprite in _view.SpriteList)
{
float ulX = sprite.UpperLeftBound.X;
float ulY = sprite.UpperLeftBound.Y;
float lrX = sprite.LowerRightBound.X;
float lrY = sprite.LowerRightBound.Y;
GL.TexCoord2(0, 0); GL.Vertex2(ulX, ulY);
GL.TexCoord2(1, 0); GL.Vertex2(lrX, ulY);
GL.TexCoord2(1, 1); GL.Vertex2(lrX, lrY);
GL.TexCoord2(0, 1); GL.Vertex2(ulX, lrY);
}
RenderDashboard(ref prevColor);
GL.End();
GL.Flush();
SwapBuffers();
}