Exemplo n.º 1
0
    // Use this for initialization
    public static coorMark create(Vector3 pos, Vector3 right, Vector3 forward, Vector3 up, int id)
    {
        GameObject obj = new GameObject();

        obj.name = "coorMark";
        Mesh           mesh      = new Mesh();
        List <Vector3> vertice   = new List <Vector3> ();
        List <Color32> colors    = new List <Color32> ();
        List <int>     inds      = new List <int> ();
        float          scaleMark = 1f;

        vertice.Add(new Vector3(0, 0, 0));
        colors.Add(new Color32(255, 0, 0, 255));
        vertice.Add(new Vector3(scaleMark, 0, 0));          //right
        colors.Add(new Color32(255, 0, 0, 255));
        vertice.Add(new Vector3(0, 0, 0));
        colors.Add(new Color32(0, 255, 0, 255));
        vertice.Add(new Vector3(0, scaleMark, 0));          //up
        colors.Add(new Color32(0, 255, 0, 255));
        vertice.Add(new Vector3(0, 0, 0));
        colors.Add(new Color32(0, 0, 255, 255));
        vertice.Add(new Vector3(0, 0, scaleMark));          //forward
        colors.Add(new Color32(0, 0, 255, 255));

        inds.Add(0);
        inds.Add(1);
        inds.Add(2);
        inds.Add(3);
        inds.Add(4);
        inds.Add(5);

        mesh.SetVertices(vertice);
        mesh.SetColors(colors);
        mesh.SetIndices(inds.ToArray(), MeshTopology.Lines, 0);
        Shader mShader = Resources.Load("pointShader") as Shader;

        obj.AddComponent <MeshFilter> ().mesh = mesh;
        obj.AddComponent <MeshRenderer> ().material.shader = mShader;
        coorMark    mark     = obj.AddComponent <coorMark> ();
        BoxCollider collider = obj.AddComponent <BoxCollider> ();
        //Debug.LogError (forward);
        //obj.transform.right = right;
        //obj.transform.forward = forward;
        //obj.transform.up = up;
        Matrix4x4 temp = new Matrix4x4();

        temp.SetColumn(0, new Vector4(right.x, right.y, right.z, 0));
        temp.SetColumn(1, new Vector4(up.x, up.y, up.z, 0));
        temp.SetColumn(2, new Vector4(forward.x, forward.y, forward.z, 0));
        temp.SetColumn(3, new Vector4(0, 0, 0, 1));
        Quaternion quat = util.QuaternionFromMatrix(temp);

        obj.transform.eulerAngles = quat.eulerAngles;


        obj.transform.position = pos;
        collider.center        = new Vector3(0, 0, 0);
        collider.size          = new Vector3(0.2f, 0.2f, 0.2f);
        mark.keyFrameId        = id;
        return(mark);
    }
Exemplo n.º 2
0
    public void addSegments(List <RoadSeg> info)
    {
        List <Vector3> roadP1List = new List <Vector3> ();
        List <Vector3> roadP2List = new List <Vector3> ();

        for (int i = 0; i < info.Count - 1; i++)
        {
            Vector3 trajVec      = info[i + 1].pos - info [i].pos;
            Vector3 roadWidthVec = Vector3.Cross(trajVec, info [i].normal);
            roadWidthVec.Normalize();
            Vector3 roadC      = info[i].pos;
            Vector3 roadEdgeP1 = roadC + roadWidthVec * info[i].hWidthL;
            Vector3 roadEdgeP2 = roadC + -roadWidthVec * info[i].hWidthR;
            roadP1List.Add(roadEdgeP1);
            roadP2List.Add(roadEdgeP2);
            coorMark mark = coorMark.create(info [i].pos, roadWidthVec, info [i].normal, trajVec, i);
            mark.transform.SetParent(transform);
        }
//		vertices.Clear ();
//		uv.Clear();
//		triang.Clear();
        int startIndex = vertices.Count;

        vertices.Add(roadP1List [0]);
        uv.Add(new Vector2(1f, 0f));
        vertices.Add(roadP2List [0]);
        uv.Add(new Vector2(0f, 1f));

        for (int i = 0; i < info.Count - 2; i++)
        {
            vertices.Add(roadP1List [i + 1]);
            uv.Add(new Vector2(1f, 0f));
            vertices.Add(roadP2List [i + 1]);
            uv.Add(new Vector2(0f, 1f));
            triang.Add(startIndex + i * 2 + 2);
            triang.Add(startIndex + i * 2 + 1);
            triang.Add(startIndex + i * 2 + 0);
            //double sides displaying
            triang.Add(startIndex + i * 2 + 0);
            triang.Add(startIndex + i * 2 + 1);
            triang.Add(startIndex + i * 2 + 2);

            triang.Add(startIndex + i * 2 + 1);
            triang.Add(startIndex + i * 2 + 2);
            triang.Add(startIndex + i * 2 + 3);
            //double sides displaying
            triang.Add(startIndex + i * 2 + 3);
            triang.Add(startIndex + i * 2 + 2);
            triang.Add(startIndex + i * 2 + 1);
        }

        Vector3[] vertBuf   = vertices.ToArray();
        int[]     triangBuf = triang.ToArray();
        Vector2[] uvBuf     = uv.ToArray();
        Mesh      mesh      = GetComponent <MeshFilter> ().mesh;

        //Mesh mesh = new Mesh();
        mesh.vertices  = vertBuf;
        mesh.triangles = triangBuf;
        mesh.uv        = uvBuf;
        //GetComponent<MeshFilter> ().sharedMesh = mesh;
        //Debug.Log (vertBuf.Length);
        lookAtPoint = vertices [vertices.Count - 1];
    }