DirectX вычитает одну сетку из другой

#c #directx

#c #directx

Вопрос:

Я работаю над кодом DirectX, который вычитает одну сетку из другой. Моя идея состояла в том, чтобы использовать функцию TriangleTests::Intersect из <DirectXCollision.h> и проверить, превышает ли результат длину вектора вершины, которую я использую для приведения луча (и если это так, я сокращаю длину до результата). Таким образом, вершины как бы «отталкиваются» второй сеткой . Однако это не работает, и я действительно не понимаю, почему.

     {
        XMFLOAT3 centroid = Centroid();
        XMVECTOR vCentroid = XMLoadFloat3(amp;centroid);
        float result, length;
        for (autoamp; v : vertices)
        {
            XMVECTOR vPoint = XMLoadFloat4(amp;v.position);
            for (int i = 0; i < shape.indices.size(); i  = 3)
            {
                int index0 = shape.indices[i];
                int index1 = shape.indices[i   1];
                int index2 = shape.indices[i   2];

                if (TriangleTests::Intersects(
                    vCentroid,
                    XMVector3Normalize(vPoint),
                    XMLoadFloat4(amp;shape.vertices[index0].position),
                    XMLoadFloat4(amp;shape.vertices[index1].position),
                    XMLoadFloat4(amp;shape.vertices[index2].position),
                    result)
                    )
                {
                    XMStoreFloat(amp;length, XMVector3Length(vPoint));
                    if (length > result)
                    {
                        XMStoreFloat4(
                            amp;v.position,
                            XMVector3ClampLength(vPoint, result, result)
                        );
                    }
                }
            }
        }
    }
 
 
DirectX::XMFLOAT3 BaseMesh::Centroid()
    {
        float x, y, z;
        x = y = z = 0.0f;
        for (const autoamp; v : vertices)
        {
            x  = v.position.x;
            y  = v.position.y;
            z  = v.position.z;
        }
        return { x / vertices.size(), y / vertices.size(),z / vertices.size() };
    }

 

Комментарии:

1. Это концепция «реакции на столкновение» в игровой физике. Вы можете найти ряд книг и статей по этой теме в Интернете.