#region OpenTK

OpenTKがGitHubで更新されるようになりました。NuGetから手に入れることができるようになりました。
現在は.NET Coreに対応する機運があるようです。

テクスチャのαブレンディング

テクスチャでもアルファプレンディング

今までポリゴンの色のα値を使って半透明処理を行っていたのと同じように、テクスチャを使ってもアルファブレンディングができます。

(記事が薄い)

TextureAlphaBlending
まるでガラスのよう

ソースコードは、アルファブレンディングとデプステストのコードを追加しています。

今回は説明すべき場所がほぼありません。

			//テクスチャの色情報を作成
			int size = 8;
			float[, ,] colors = new float[size, size, 4];
			for (int i = 0; i < colors.GetLength(0); i++)
			{
				for (int j = 0; j < colors.GetLength(1); j++)
				{
					colors[i, j, 0] = (float)i / size;
					colors[i, j, 1] = (float)j / size;
					colors[i, j, 2] = 0.0f;
					//colors[i, j, 3] = ((float)i / size) * ((float)i / size) + ((float)j / size) * ((float)j / size);
					colors[i, j, 3] = (float)(i * i + j * j) / (size * size);
				}
			}

左下からの距離をα値としています。

			//奥のポリゴン表示
			GL.BindTexture(TextureTarget.Texture2D, 0);
			GL.Color4(Color4.Blue);
			GL.Begin(BeginMode.Quads);
			GL.Vertex3(1, 1, -1);
			GL.Vertex3(-1, 1, -1);
			GL.Vertex3(-1, -1, -1);
			GL.Vertex3(1, -1, -1);
			GL.End();

			//メインのポリゴン表示
			GL.BindTexture(TextureTarget.Texture2D, texture);
			GL.Color4(Color4.White);
			GL.Begin(BeginMode.Quads);
			GL.TexCoord2(1.0, 1.0);
			GL.Vertex3(1, 1, 0);
			GL.TexCoord2(0.0, 1.0);
			GL.Vertex3(-1, 1, 0);
			GL.TexCoord2(0.0, 0.0);
			GL.Vertex3(-1, -1, 0);
			GL.TexCoord2(1.0, 0.0);
			GL.Vertex3(1, -1, 0);
			GL.End();

テクスチャを使いたくないときは、0を指定してひも付けを解除しましょう。設定によっては意図しない色が出力されます。

記事

外部リンク

Thanks