1

我正在使用 Box2D 和 SFML 编写游戏,我想让我的用户导入他们自己的纹理以用作物理多边形。多边形是使用图像的 Alpha 层创建的。它不需要像素完美,这就是我的问题所在。如果它是像素完美的,那么当玩家被困在两个相当复杂的形状之间时,它就会变得非常错误。我有一个有效的边缘检测算法,它会产生类似这样的东西。它是每个像素的像素(并且它所描绘的形状只是一个带有凹陷的正方形)。在那之后,我有一个简化算法来产生这个。它对我来说很好,但如果每个角落都这样追踪,我会有一些问题。向量简化的代码是这样的:

    //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);
        }
    }

所以我的问题是,我怎样才能将之前的一组向量转换成不太精确的东西?有没有舍入算法?如果是这样,哪个最好?你能给我什么建议吗?生成的多边形是凸面还是凹面都没有关系,无论如何我都会对其进行三角测量。

谢谢,
阿斯特阿尔夫

4

0 回答 0