Необходимо определить, находятся ли треугольники модели (орла) внутри прямоугольной плоскости. Написал программу, но почему-то плохо работает. В чем причина?
matrCoord
- вершина треугольника, projMatrCopy
- матрица проекции P * V * M . Я получаю новые координаты вершины треугольника модели:
private Vector3f getVector(int pos) {
Matrix4f projMatrCopy = new Matrix4f().set(proj);
Matrix4f matrCoord = new Matrix4f(new Vector4f(positions[pos], positions[pos + 1], positions[pos + 2], 1.0f),
new Vector4f(0, 0, 0, 0),
new Vector4f(0, 0, 0, 0),
new Vector4f(0,0,0, 0));
Vector4f p1 = new Vector4f();
projMatrCopy.mul(matrCoord).getColumn(0, p1);
return new Vector3f(p1.x, p1.y, p1.z);
}
И затем я проверяю эту вершину, чтобы увидеть, находится ли она внутри прямоугольной области. Я делаю это так:
private boolean intersectsPlaneToPoint(Vector3f point, List<Vector4f> planes) {
Float d1 = Intersectionf.distancePointPlane(point.x, point.y, point.z,planes.get(0).x,planes.get(0).y,planes.get(0).z,planes.get(0).w);
Float d2 = Intersectionf.distancePointPlane(point.x, point.y, point.z, planes.get(1).x,planes.get(1).y,planes.get(1).z,planes.get(1).w);
Float d3 = Intersectionf.distancePointPlane(point.x, point.y, point.z, planes.get(2).x,planes.get(2).y,planes.get(2).z,planes.get(2).w);
Float d4 = Intersectionf.distancePointPlane(point.x, point.y, point.z, planes.get(3).x,planes.get(3).y,planes.get(3).z,planes.get(3).w);
Float d5 = Intersectionf.distancePointPlane(point.x, point.y, point.z, planes.get(4).x,planes.get(4).y,planes.get(4).z,planes.get(4).w);
Float d6 = Intersectionf.distancePointPlane(point.x, point.y, point.z,planes.get(5).x,planes.get(5).y,planes.get(5).z,planes.get(5).w);
return d1 < 0 && d2 < 0 && d3 < 0 && d4 >= 0 && d5 < 0 && d6 >= 0;
}
planes.get (0).x, planes.get (0).y, planes.get (0).z, planes.get (0).w
являются a b c d компонентами плоскости
Должен быть вывод: