Untitled

 avatar
unknown
java
4 years ago
3.3 kB
3
Indexable
initialize();
        vram = new V_RAM(100,100);

        viewVec = new Point3D(0,0,1);

        GraphicsOperations.fillBrightness(vram,255);

        points = PointGenerator.generateFan3DPoints(4,0);
        points.addAll(PointGenerator.generateFan3DPoints(4,Math.sqrt(2)));

/*
        triangles = new ArrayList<>();
        triangles.addAll(PointGenerator.generateFanTriangles(points.size()/2,points.size()/2));

        triangles.addAll(PointGenerator.generateFanTriangles(0, points.size()/2));
        triangles.addAll(PointGenerator.generateStripTriangles(0,points.size(),true));
*/

        triangles = PointGenerator.generateCubeTriangles();


        double xMin = points.get(0).data[0];
        double xMax = xMin;

        double yMin = points.get(0).data[1];
        double yMax = yMin;

        double zMin = points.get(0).data[2];
        double zMax = zMin;

        for (int i = 1; i < points.size() ; i++) {
            Point3D point = points.get(i);

            xMin = Math.min(xMin,point.data[0]);
            xMax = Math.max(xMax,point.data[0]);

            yMin = Math.min(yMin,point.data[1]);
            yMax = Math.max(yMax,point.data[1]);

            zMin = Math.min(zMin,point.data[2]);
            zMax = Math.max(zMax,point.data[2]);
        }

        Matrix3D t1 = Matrix3D.createTranslationMatrix3D(-(xMin+xMax)/2.0,-(yMin+yMax)/2.0,-(zMin+zMax)/2.0);
        Matrix3D s1 = Matrix3D.createScaleMatrix3D(2/Math.max(Math.max(xMax-xMin,yMax-yMin),zMax-zMin));
        q = Matrix3D.multiply(s1,t1);

        Matrix3D s2 = Matrix3D.createScaleMatrix3D(Math.min(vram.getWidth(),vram.getHeight())/2.0);
        Matrix3D t2 = Matrix3D.createTranslationMatrix3D(vram.getWidth()/2.0,vram.getHeight()/2.0,0);
        k = Matrix3D.multiply(t2,s2);

        Matrix3D p = Matrix3D.createOrthogonalMatrix();

        k = Matrix3D.multiply(k,p);

        r_X = Matrix3D.createRotationMatrix3D_YZ(2);
        r_y_plus = Matrix3D.createRotationMatrix3D_ZX(2);
        r_y_minus = Matrix3D.createRotationMatrix3D_ZX(-2);
        r_Z = Matrix3D.createRotationMatrix3D_XY(2);

        tX_plus = Matrix3D.createTranslationMatrix3D(0.01,0,0);
        tX_minus = Matrix3D.createTranslationMatrix3D(-0.01,0,0);
        tY_plus = Matrix3D.createTranslationMatrix3D(0,0.01,0);
        tY_minus = Matrix3D.createTranslationMatrix3D(0,-0.01,0);

        s_bigger = Matrix3D.createScaleMatrix3D(1.01);
        s_smaller = Matrix3D.createScaleMatrix3D(0.99);

        Point3D[] drawPoints = new Point3D[points.size()];
        for (int i = 0; i < points.size(); i++) {
            Point3D point = points.get(i).applyMatrix(Matrix3D.multiply(k,q));
            point.data[0] /= point.data[3];
            point.data[1] /= point.data[3];
            point.data[2] /= point.data[3];
            drawPoints[i] = point;
        }

        for (Triangle3D tr : triangles) {
            tr.setVisibility(drawPoints,viewVec);
            if (!tr.visible){
                GraphicsOperations.drawTriangle(vram,tr,drawPoints,240);
            }
        }

        for (Triangle3D tr : triangles) {
            if (tr.visible){
                GraphicsOperations.drawTriangle(vram,tr,drawPoints,0);
            }
        }

        imagePanel.setImage(vram.getImage());
Editor is loading...