1

D3DXSPRITEメソッドを使用してマップタイルを画面に描画しています。上矢印を押したままにするとズームインするズーム機能を追加しましたが、タイル間のギャップが表示されるようになりました。これがいくつかのスクリーンショットです。

タイルあたりの通常サイズ(32x32)

ここに画像の説明を入力してください

ズームイン(タイル間に白い隙間が見える)

ここに画像の説明を入力してください

ズームアウト(最悪でも!)

ここに画像の説明を入力してください

これが、私が翻訳して世界をスケーリングするコードスニペットです。

D3DXMATRIX matScale, matPos;

D3DXMatrixScaling(&matScale, zoom_, zoom_, 0.0f);
D3DXMatrixTranslation(&matPos, xpos_, ypos_, 0.0f);

device_->SetTransform(D3DTS_WORLD, &(matPos * matScale));

そして、これは私の地図の描画です(タイルはタイルのベクトルのベクトルにあります..そして私はまだカリングをしていません)

LayerInfo *p_linfo = NULL;
  RECT rect = {0};
  D3DXVECTOR3 pos;
  pos.x = 0.0f;
  pos.y = 0.0f;
  pos.z = 0.0f;

  for (short y = 0; 
    y < BottomTile(); ++y)
  {
    for (short x = 0; 
          x < RightTile(); ++x)
    {
      for (int i = 0; i < TILE_LAYER_COUNT; ++i)
      {
        p_linfo = tile_grid_[y][x].Layer(i);

        if (p_linfo->Visible())
        {
          p_linfo->GetTextureRect(&rect);

          sprite_batch->Draw(
            p_engine_->GetTexture(p_linfo->texture_id), 
            &rect, NULL, &pos, 0xFFFFFFFF);
        }
      }
      pos.x += p_engine_->TileWidth();
    }
    pos.x = 0;
    pos.y += p_engine_->TileHeight();
  }
4

5 に答える 5

4

テクスチャインデックスが間違っています。0,0,32,32は正しい値ではありません-0,0,31,31である必要があります。256ピクセルのテクスチャアトラスへのゼロベースのインデックスは、0から256ではなく0から255の値を生成し、32x32テクスチャは0,0,31,31を生成するはずです。この場合、正しくないピクセルの色は、右と下に沿った次のテクスチャの色に依存します。

于 2011-05-28T16:55:21.837 に答える
2

それが拡大と縮小の問題です。テクスチャには、隣接するテクスチャの一部が表示された非表示の境界線が必要です。次に、拡大および縮小フィルターは、その境界線を使用して、デフォルト(白)の色ではなく、エッジピクセルの色を計算します。

そう思います。

于 2011-05-28T16:42:54.623 に答える
1

テクスチャマッピングでも同様の問題がありました。私にとってうまくいったのは、サンプラーの状態の説明でテクスチャアドレスモードを変更することでした。テクスチャアドレスモードは、direct3dが([0.0f、1.0f])範囲外のテクスチャ座標で行うことを制御するために使用されます。ADDRESS_U、ADDRESS_V、ADDRESS_WメンバーをD3D11_TEXTURE_ADDRESS_CLAMPに変更しました。これは、基本的にすべての範囲外の値をクランプします。テクスチャは[0.0f、1.0f]の範囲に調整されます。

于 2014-02-14T22:35:17.200 に答える
1

長い間人々のソリューションを検索してテストした後、私はこのルールが私が今まで読んだ中で最も完全なルールであることに気づきました。

公式UnityWebサイトのpixel-perfect-2d

さらに 、私自身の経験から、スプライトのPPIが72(たとえば)の場合、その画像にもっと多くのPPIを使用する必要があることがわかりました(96以上かもしれません)。現れます。

于 2016-06-18T14:42:00.077 に答える
0

浮動小数点の世界へようこそ。これらのギャップは、浮動小数点数を使用した欠陥が原因で存在します。

浮動小数点演算を行うときは細心の注意を払うことで状況を改善できる可能性がありますが、地形から1つのメッシュ全体を作成しない限り、これらの継ぎ目はそこにあります。

ビューと投影マトリックス、および頂点の位置がわずかにずれているのはラスタライザです。あなたはそれを改善できるかもしれませんが、あなたがどれほど成功するかはわかりません。

さまざまな四角形を描画する代わりに、地形を構成する表示されている頂点のみにインデックスを付け、代わりにテクスチャタイリング手法を使用してさまざまなものをそこにペイントできます。その場合、技術的には縫い目がないので、醜い縫い目は得られないと思います。

于 2011-05-28T16:26:41.470 に答える