Box2D と SFML を使用してゲームをコーディングしています。ユーザーが独自のテクスチャをインポートして、物理ポリゴンとして使用できるようにしたいと考えています。ポリゴンは、画像のアルファ レイヤーを使用して作成されます。完璧なピクセルである必要はありません。これが私の問題です。ピクセルパーフェクトの場合、プレーヤーが 2 つのかなり複雑な形状の間で行き詰まったときにバグが多すぎます。私は有効なエッジ検出アルゴリズムを持っており、このようなものを生成します。それはピクセルごとのピクセルです (そして、トレースしている形状は、くぼみのある単純な正方形です)。その後、これを生成する単純化アルゴリズムがあります。私には問題なく機能しますが、すべてのコーナーをそのようにトレースすると、いくつかの問題が発生します。ベクトル単純化のコードは次のとおりです。
//borders is a std::vector containing simple Box2D b2Vec2 (2D vector class containing an x and a y)
//vector shortener
for(unsigned int i = 0; i < borders.size(); i++)
{
int x = 0, y = 0;
int counter = 0;
//get the values for x and y that need to be added to check whether in a line or not
x = borders[i].x - borders[i-1].x;
y = borders[i].y - borders[i-1].y;
//while points are aligned..
while((borders[i].x + x*counter == borders[i + counter].x) && (borders[i].y + y*counter == borders[i+counter].y))
{
counter++;
}
if(counter-1 > i)
{
borders.erase(borders.begin() + i, borders.begin() + i + counter -1);
}
}
私の質問は、以前のベクトルのセットを少し精度の低いものに変換するにはどうすればよいですか? そこに丸めアルゴリズムはありますか?もしそうなら、どれが一番いいですか?あなたが私に与えることができるヒントはありますか?結果のポリゴンが凸面か凹面かは問題ではありません。とにかく三角形化しています。
ありがとう、
アスターアルフ