Я пытаюсь реализовать ограничивающие рамки для обнаружения столкновений. Чтобы переместить значения 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::vec3
s и представляют пространственные координаты модели. min
а также max
являются также glm::vec3
s и сохраните текущие, переведенные, минимальные и максимальные значения 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;
}
Задача ещё не решена.