OpenTK を使用して C# で小さな OpenGL タイル マップ レンダラーを作成しています。タイルをレンダリングするには、まず頂点配列を作成し、次に頂点バッファーを作成します。
次に、すべてのタイルを反復処理し、タイル タイプに応じて、2 つの三角形を頂点バッファーに追加し、対応する頂点 (テクスチャの座標、色、位置) を指定します。
テクスチャの高価な切り替えを避けるために、テクスチャ アトラスという名前のすべてのタイル テクスチャで 1 つの大きなテクスチャを使用します。
しかし、テクスチャ アトラスの操作中に問題が発生しました。
問題は、ズームアウトしてカメラを移動すると、一部のタイルの端にアーティファクトが発生することです。
インターネットで見つけた解決策は...
- ...ハーフ ピクセル補正を使用してテクスチャ座標を計算します。
- ...テクスチャ配列を使用するには
私が最初に試したものですが、期待どおりに機能しませんでした(詳細は以下で説明します)。
2 つ目は、テクスチャ配列の操作方法がわからず、インターネット上でテクスチャ配列についてあまり見つけることができませんでした。
次のテクスチャ フィルタを使用しました。
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest);
ハーフ ピクセル補正を使用したテクスチャ座標の計算:
text_coord_x = (0.5f + pixel_x) / texture_width;
text_coord_y = (0.5f + pixel_x) / texture_height;
ハーフ ピクセル補正なしのテクスチャ座標計算:
text_coord_x = pixel_x / texture_width;
text_coord_y = pixel_y / texture_height;