Не могу нарисовать модель - PullRequest
0 голосов
/ 03 мая 2018

Необходимо определить, находятся ли треугольники модели (орла) внутри прямоугольной плоскости. Написал программу, но почему-то плохо работает. В чем причина?

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 компонентами плоскости enter image description here

Должен быть вывод:

enter image description here

...