Переводя вектор

Я пытаюсь реализовать ограничивающие рамки для обнаружения столкновений. Чтобы переместить значения max и min x, y и z, я сохраняю их исходные координаты пространства модели, а затем при каждом изменении их положения я умножаю эти координаты на переводящую матрицу и сохраняю результат как текущие значения max и min. Значения не обновляются должным образом, хотя.

Код является:

void BoundingBox::softUpdate(const glm::vec3 position)
{
glm::vec4 newMin = glm::translate(glm::mat4(), position) * glm::vec4(originalMin.x, originalMin.y, originalMin.z, 1);
min = glm::vec3(newMin.x, newMin.y, newMin.z);

glm::vec4 newMax = glm::vec4(originalMax, 1) * glm::translate(glm::mat4(), position);
max = glm::vec3(newMax.x, newMax.y, newMax.z);
}

где originalMax а также originalMin являются glm::vec3s и представляют пространственные координаты модели. minа также max являются также glm::vec3s и сохраните текущие, переведенные, минимальные и максимальные значения x, y и z.

EDIT: код для определения минимума и максимума был запрошен:

void BoundingBox::calculateMaxAndMins(const std::vector<glm::vec3> vertices)
{
originalMax.x = vertices.at(0).x;
originalMin.x = vertices.at(0).x;

originalMax.y = vertices.at(0).y;
originalMin.y = vertices.at(0).y;

originalMax.z = vertices.at(0).z;
originalMin.z = vertices.at(0).z;

for (glm::vec3 vertex : vertices)
{
if (vertex.x > originalMax.x) originalMax.x = vertex.x;
if (vertex.x < originalMin.x) originalMin.x = vertex.x;

if (vertex.y > originalMax.y) originalMax.y = vertex.y;
if (vertex.y < originalMin.y) originalMin.y = vertex.y;

if (vertex.z > originalMax.z) originalMax.z = vertex.z;
if (vertex.z < originalMin.z) originalMin.z = vertex.z;
}

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]