Может кто-нибудь сказать мне, как заставить вершины треугольника сталкиваться с краями экрана?Для математической библиотеки я использую GLM, а для создания окон и ввода с клавиатуры / мыши я использую GLFW.Я создал перспективную матрицу и простой массив вершин треугольника.
Затем я умножил все это в вершинном шейдере, как:
gl_Position = projection * view * model * vec4(pos, 1.0);
Матрица проекции определяется как:
glm::mat4 projection = glm::perspective(
45.0f, (GLfloat)screenWidth / (GLfloat)screenHeight, 0.1f, 100.0f);
У меня полностью рабочая камера и проекция.Я могу передвигаться по своему «миру» и видеть стоящий там треугольник.Проблема в том, что я хочу убедиться, что треугольник сталкивается с краями экрана.
Я отключил камеру и включил только движение клавиатуры.Затем я инициализировал матрицу перевода как glm::translate(model, glm::vec3(xMove, yMove, -2.5f));
и масштабировал матрицу до 0,4.
Теперь все это работает нормально.Когда я нажимаю ПРАВО, треугольник движется вправо, когда я нажимаю ВВЕРХ, треугольник движется вверх и т. Д. Проблема в том, что я понятия не имею, как заставить его перестать двигаться, тогда он ударяет по краям.
Вот что я пробовал:
triangleRightVertex.x
- это glm::vec3
объект.
0,4 - это значение масштабирования, которое я использовал в матрице масштабирования .
if(((xMove + triangleRightVertex.x) * 0.4f) >= 1.0f)
{
cout << "Right side collision detected!" << endl;
}
Когда я перемещаю треугольник вправо, он обнаруживает столкновение, когдах третьей вершины (нижний правый угол треугольника) сталкивается с правой стороной, но она немного выходит за пределы, прежде чем обнаружит.Но когда я попытался подняться, он обнаружил столкновение, когда половина треугольника была поднята.
Понятия не имею, что здесь делать, может кто-нибудь объяснить мне это, пожалуйста?