Пример #1
0
    public void Render(Transform_4D camera)
    {
        if (debug)
        {
            Debug.Log("PhysicalObject Render(). New position: " + transform.position);
        }

        // just for testing, ignores 4d component
        parent.position = transform.position;

        //mesh.Render (camera, transform, renderedMesh);		// does this work? TODO
    }
Пример #2
0
    public PhysicalObject(Transform parent)
    {
        if (debug)
        {
            Debug.Log("PhysicalObject initialized. Parent position: " + parent.position);
        }

        this.parent = parent;
        transform   = parent;                           // mainly for testing, may changes, don't know

        renderedMesh = parent.GetComponent <MeshFilter> ().mesh;
        mesh         = parent.GetComponent <Mesh_4D> ();
    }
Пример #3
0
    public static Vector4 rotate(Transform_4D transform, Vector4 point)
    {
        point = new Vector4(
            point[0] * transform.Ql.w -
            point[0] * transform.Ql.x -
            point[0] * transform.Ql.y -
            point[0] * transform.Ql.z,

            point[1] * transform.Ql.x +
            point[1] * transform.Ql.w -
            point[1] * transform.Ql.z +
            point[1] * transform.Ql.y,

            point[2] * transform.Ql.y +
            point[2] * transform.Ql.z +
            point[2] * transform.Ql.w -
            point[2] * transform.Ql.x,

            point[3] * transform.Ql.z -
            point[3] * transform.Ql.y +
            point[3] * transform.Ql.x +
            point[3] * transform.Ql.w
            );

        point = new Vector4(
            point[0] * transform.Qr.w -
            point[0] * transform.Qr.x -
            point[0] * transform.Qr.y -
            point[0] * transform.Qr.z,

            point[1] * transform.Qr.x +
            point[1] * transform.Qr.w -
            point[1] * transform.Qr.z +
            point[1] * transform.Qr.y,

            point[2] * transform.Qr.y +
            point[2] * transform.Qr.z +
            point[2] * transform.Qr.w -
            point[2] * transform.Qr.x,

            point[3] * transform.Qr.z -
            point[3] * transform.Qr.y +
            point[3] * transform.Qr.x +
            point[3] * transform.Qr.w
            );

        return(point);
    }
Пример #4
0
    public void Render(Transform_4D cameraTransform)
    {
        if (debug)
        {
            Debug.Log("HudsonianPhysics Render().");
        }

        foreach (ActiveObject obj in activeObjects)
        {
            obj.Render(cameraTransform);
        }

        foreach (StaticObject obj in staticObjects)
        {
            obj.Render(cameraTransform);
        }
    }
Пример #5
0
    public void Render(Transform_4D cameraTransform, Transform_4D meshTransform, Mesh renderedMesh)
    {
        if (debug)
        {
            Debug.Log("Mesh_4D Render().");
        }

        Vector3[] newVertices  = new Vector3[mesh.points.Count];
        int[]     newTriangles = new int[mesh.tetrahedra.Count * 3];            // 4 points per tetrahedron, 4 triangles per tetrahedron, 3 points per triangle: x / 4 * 4 * 3

        Vector4 point;
        Vector4 projectedPoint;

        Vector4 cameraNormal = new Vector4(0, 0, 0, 1);                 // for testing only, should be normalized from the cameraTransform

        Vector4 X = new Vector4(1, 0, 0, 0);
        Vector4 Y = new Vector4(0, 1, 0, 0);
        Vector4 Z = new Vector4(0, 0, 1, 0);

        // projection mechanics from 4D to 3D points
        for (int i = 0; i < mesh.points.Count; i++)             // defign points

        {
            point  = Transform_4D.rotate(meshTransform, mesh.points [i]);               // rotate points first according to transform
            point += meshTransform.position;                                            // something wrong with translation


            if (debug)
            {
                Debug.Log("Quaternian left: " + meshTransform.Qr.ToString());
            }

            projectedPoint = (-Vector4.Dot(point, cameraNormal)) * cameraNormal + point;
            //newVertices[i] = new Vector3 (Vector4.Project(projectedPoint, X).magnitude, Vector4.Project(projectedPoint, Y).magnitude, Vector4.Project(projectedPoint, Z).magnitude);	// broken
            newVertices[i] = projectedPoint;                    // temparary

            if (debug)
            {
                Debug.Log("origional: " + point + ", projected: " + projectedPoint + ", new Vertex: " + newVertices [i]);
            }
        }

        int j;

        for (int i = 0; i < mesh.tetrahedra.Count; i += 4)              // defign triangles to build tetrahedra
        {
            j = i * 3;

            //if (debug)
            //Debug.Log ("Mesh_4D start i: " + i + ", j: " + j);

            newTriangles[j++] = mesh.tetrahedra[i + 0];
            newTriangles[j++] = mesh.tetrahedra[i + 1];
            newTriangles[j++] = mesh.tetrahedra[i + 2];

            newTriangles[j++] = mesh.tetrahedra[i + 0];
            newTriangles[j++] = mesh.tetrahedra[i + 1];
            newTriangles[j++] = mesh.tetrahedra[i + 3];

            newTriangles[j++] = mesh.tetrahedra[i + 0];
            newTriangles[j++] = mesh.tetrahedra[i + 2];
            newTriangles[j++] = mesh.tetrahedra[i + 3];

            newTriangles[j++] = mesh.tetrahedra[i + 1];
            newTriangles[j++] = mesh.tetrahedra[i + 2];
            newTriangles[j]   = mesh.tetrahedra[i + 3];

            //if (debug)
            //Debug.Log ("Mesh_4D end i: " + i + ", j: " + j);
        }

        if (debug)
        {
            Debug.Log("Mesh_4D done");
        }

        renderedMesh.Clear();
        renderedMesh.vertices  = newVertices;
        renderedMesh.triangles = newTriangles;
        renderedMesh.RecalculateBounds();
        renderedMesh.RecalculateNormals();
    }