コード例 #1
0
    public static void ShowTilePolyDetails(DbgRenderMesh renderMesh, Detour.dtNavMesh navMesh, int tileId)
    {
        renderMesh.Clear();

        UnityEngine.Random.seed = c_RandomSeed;

        if (navMesh == null)
        {
            renderMesh.Rebuild();
            return;
        }

        Detour.dtMeshTile tile = navMesh.getTile(tileId);

        if (tile == null)
        {
            Debug.LogError("RcdtcsUnityUtils.ShowTilePolyDetails : Tile " + tileId + " does not exist.");
            return;
        }

        int detailMeshCount = tile.detailMeshes.Length;

        for (int i = 0; i < detailMeshCount; ++i)
        {
            Detour.dtPolyDetail pd   = tile.detailMeshes[i];
            Detour.dtPoly       poly = tile.polys[i];

            Color col = Color.green;            //new Color(UnityEngine.Random.value, UnityEngine.Random.value, UnityEngine.Random.value);

            for (int j = 0; j < pd.triCount; ++j)
            {
                int       tStart  = (int)(pd.triBase + j) * 4;
                int[]     vStarts = new int[3];
                float[][] vSrc    = new float[3][];
                for (int k = 0; k < 3; ++k)
                {
                    byte tk     = tile.detailTris[tStart + k];
                    byte vCount = poly.vertCount;
                    if (tk < vCount)
                    {
                        vStarts[k] = poly.verts[tk] * 3;
                        vSrc[k]    = tile.verts;
                    }
                    else
                    {
                        vStarts[k] = (int)(pd.vertBase + (tk - vCount)) * 3;
                        vSrc[k]    = tile.detailVerts;
                    }
                }
                Vector3 a = new Vector3(vSrc[0][vStarts[0] + 0], vSrc[0][vStarts[0] + 1], vSrc[0][vStarts[0] + 2]);
                Vector3 b = new Vector3(vSrc[1][vStarts[1] + 0], vSrc[1][vStarts[1] + 1], vSrc[1][vStarts[1] + 2]);
                Vector3 c = new Vector3(vSrc[2][vStarts[2] + 0], vSrc[2][vStarts[2] + 1], vSrc[2][vStarts[2] + 2]);

                col = VaryColor(col);
                renderMesh.AddTriangle(new DbgRenderTriangle(a, b, c, col));
            }
        }
        renderMesh.Rebuild();
    }
コード例 #2
0
ファイル: NavSample.cs プロジェクト: x522758754/recast
    public void ShowRecastNavmesh(DbgRenderMesh renderMesh)
    {
        renderMesh.Clear();
        int vbsize = RecastMove.get_vb_size();

        vbsize = RecastMove.get_tri_vert_count() * 3;
        float[] vb = new float[vbsize];
        //RecastMove.get_vb(vb);
        RecastMove.get_tri_vert_pos(vb);
        Dbgrendermesh.Clear();
        for (int i = 0; i < vbsize;)
        {
            Vector3 a = new Vector3(vb[i], vb[i + 1], vb[i + 2]);
            Vector3 b = new Vector3(vb[i + 3], vb[i + 4], vb[i + 5]);
            Vector3 c = new Vector3(vb[i + 6], vb[i + 7], vb[i + 8]);

            Dbgrendermesh.AddTriangle(new DbgRenderTriangle(a, b, c, _vcolor));
            i += 9;
        }


        renderMesh.Rebuild();
        renderMesh.ComputeBounds();
        _Bounds = new Bounds(renderMesh.m_BBCenter, renderMesh.m_Max - renderMesh.m_Min);

        int obsize = RecastMove.get_ob_count() * 3;

        float[] op = new float[obsize];
        RecastMove.get_ob_info(op);
        for (int i = 0; i != obsize;)
        {
            if (first)
            {
                break;
            }
            first = true;
            Vector3 pos = new Vector3(op[i++], op[i++], op[i++]);
            // radius 1.0f, height 2.0f
            GameObject tempQie  = AssetDatabase.LoadAssetAtPath("Assets/Models/obstacle_perfab/CubeOBBOX.prefab", typeof(GameObject)) as GameObject;
            GameObject tempQie2 = (GameObject)GameObject.Instantiate(tempQie);
            tempQie2.transform.position = pos;
        }
    }
コード例 #3
0
ファイル: NavDebug.cs プロジェクト: x522758754/recast
    public void ShowRecastNavmesh(DbgRenderMesh renderMesh)
    {
        renderMesh.Clear();
        int vbsize = RecastMove.get_vb_size();

        float[] vb = new float[vbsize];
        RecastMove.get_vb(vb);
        Dbgrendermesh.Clear();
        for (int i = 0; i < vbsize;)
        {
            Vector3 a = new Vector3(vb[i], vb[i + 1], vb[i + 2]);
            Vector3 b = new Vector3(vb[i + 3], vb[i + 4], vb[i + 5]);
            Vector3 c = new Vector3(vb[i + 6], vb[i + 7], vb[i + 8]);

            Dbgrendermesh.AddTriangle(new DbgRenderTriangle(a, b, c, _vcolor));
            i += 9;
        }
        renderMesh.Rebuild();
    }
コード例 #4
0
    public static void ShowRecastNavmesh(DbgRenderMesh renderMesh, PolyMeshAsset.PolyMeshData pmesh, Pathfinding.Config config)
    {
        renderMesh.Clear();

        UnityEngine.Random.seed = c_RandomSeed;

        int npolys = pmesh.npolys;
        int nvp    = pmesh.nvp;

        int[]     tri   = new int[3];
        Vector3[] verts = new Vector3[3];
        for (int i = 0; i < npolys; ++i)
        {
            int   pIndex = i * nvp * 2;
            Color col    = new Color(UnityEngine.Random.value, UnityEngine.Random.value, UnityEngine.Random.value);
            for (int j = 2; j < nvp; ++j)
            {
                if (pmesh.polys[pIndex + j] == RC_MESH_NULL_IDX)
                {
                    break;
                }
                tri[0] = pmesh.polys[pIndex];
                tri[1] = pmesh.polys[pIndex + j - 1];
                tri[2] = pmesh.polys[pIndex + j];

                for (int k = 0; k < 3; ++k)
                {
                    int vIndex = tri[k] * 3;
                    verts[k].x = config.bmin[0] + pmesh.verts[vIndex + 0] * pmesh.cs;
                    verts[k].y = config.bmin[1] + (pmesh.verts[vIndex + 1] + 1) * pmesh.ch + 0.1f;
                    verts[k].z = config.bmin[2] + pmesh.verts[vIndex + 2] * pmesh.cs;
                }
                col = VaryColor(col);
                renderMesh.AddTriangle(new DbgRenderTriangle(verts[0], verts[1], verts[2], col));
            }
        }
        renderMesh.Rebuild();
    }
コード例 #5
0
ファイル: NavTools.cs プロジェクト: x522758754/GoFly
    public void LoadMap(string path)
    {
        m_ret = RecastHelper.load_map_bin(path);
        if (!m_ret)
        {
            Debug.LogWarning("load map bin failed");
            return;
        }

        CreateDbgRenderMesh();

        ///1 tri => 3 verts, 1 verts = 1 pos(vec3) => 3 float
        int vertCount = RecastHelper.get_mesh_vert_count();

        float[] vertPos = new float[vertCount * 3];
        RecastHelper.get_mesh_vert_pos(vertPos);
        Color col = new Color();

        for (int i = 0; i < vertCount * 3; i += 9)
        {
            Vector3 a = new Vector3(vertPos[i + 0], vertPos[i + 1], vertPos[i + 2]);
            Vector3 b = new Vector3(vertPos[i + 3], vertPos[i + 4], vertPos[i + 5]);
            Vector3 c = new Vector3(vertPos[i + 6], vertPos[i + 7], vertPos[i + 8]);

            m_dbgRenderMesh.AddTriangle(new DbgRenderTriangle(a, b, c, col));
            Vector3 triCenter = (a + b + c) / 3;
            float[] pos       = new float[3];
            pos[0] = triCenter.x;
            pos[1] = triCenter.y;
            pos[2] = triCenter.z;
            if (RecastHelper.is_valid_pos(pos))
            {
                bornList.Add(triCenter);
            }
        }
        m_dbgRenderMesh.Rebuild();
        BuildPathMap();
    }
コード例 #6
0
    public static void ShowRecastDetailMesh(DbgRenderMesh renderMesh, PolyMeshAsset.PolyMeshDetailData dmesh)
    {
        renderMesh.Clear();

        UnityEngine.Random.seed = c_RandomSeed;

        int nmeshes = dmesh.nmeshes;

        for (int i = 0; i < nmeshes; ++i)
        {
            Color col = new Color(UnityEngine.Random.value, UnityEngine.Random.value, UnityEngine.Random.value);

            uint bverts    = dmesh.meshes[i * 4];
            uint btris     = dmesh.meshes[i * 4 + 2];
            uint ntris     = dmesh.meshes[i * 4 + 3];;
            uint trisStart = btris * 4;
            for (uint j = 0; j < ntris; ++j)
            {
                Vector3[] verts = new Vector3[3];
                for (int k = 0; k < 3; ++k)
                {
                    int vertStart = (int)(bverts + dmesh.tris[trisStart + j * 4 + k]) * 3;
                    verts[k].x = dmesh.verts[vertStart + 0];
                    verts[k].y = dmesh.verts[vertStart + 1];
                    verts[k].z = dmesh.verts[vertStart + 2];
                }
                col = VaryColor(col);
                renderMesh.AddTriangle(new DbgRenderTriangle(
                                           verts[0]
                                           , verts[1]
                                           , verts[2]
                                           , col));
            }
        }
        renderMesh.Rebuild();
    }
コード例 #7
0
ファイル: DebugUtils.cs プロジェクト: srferran/ES2015A
    public static void ShowRecastNavmesh(DbgRenderMesh renderMesh, PolyMeshAsset.PolyMeshData pmesh, Pathfinding.Config config)
    {

        renderMesh.Clear();

        UnityEngine.Random.seed = c_RandomSeed;

        int npolys = pmesh.npolys;
        int nvp = pmesh.nvp;
        int[] tri = new int[3];
        Vector3[] verts = new Vector3[3];
        for (int i = 0; i < npolys; ++i)
        {
            int pIndex = i * nvp * 2;
            Color col = new Color(UnityEngine.Random.value, UnityEngine.Random.value, UnityEngine.Random.value);
            for (int j = 2; j < nvp; ++j)
            {
                if (pmesh.polys[pIndex + j] == RC_MESH_NULL_IDX)
                    break;
                tri[0] = pmesh.polys[pIndex];
                tri[1] = pmesh.polys[pIndex + j - 1];
                tri[2] = pmesh.polys[pIndex + j];

                for (int k = 0; k < 3; ++k)
                {
                    int vIndex = tri[k] * 3;
                    verts[k].x = config.bmin[0] + pmesh.verts[vIndex + 0] * pmesh.cs;
                    verts[k].y = config.bmin[1] + (pmesh.verts[vIndex + 1] + 1) * pmesh.ch + 0.1f;
                    verts[k].z = config.bmin[2] + pmesh.verts[vIndex + 2] * pmesh.cs;
                }
                col = VaryColor(col);
                renderMesh.AddTriangle(new DbgRenderTriangle(verts[0], verts[1], verts[2], col));
            }
        }
        renderMesh.Rebuild();
    }
コード例 #8
0
    public static void ShowTilePolyDetails(DbgRenderMesh renderMesh, IntPtr navMesh, int tileId)
    {
        UnityEngine.Random.seed = c_RandomSeed;

        if (navMesh == null)
        {
            renderMesh.Rebuild();
            return;
        }

        IntPtr tilePtr = Pathfinding.Detour.getTile(navMesh, tileId);

        Pathfinding.MeshTile tile = (Pathfinding.MeshTile)Marshal.PtrToStructure(tilePtr, typeof(Pathfinding.MeshTile));

        if (tile.header.ToInt32() == 0)
        {
            return;
        }

        Pathfinding.MeshHeader header = (Pathfinding.MeshHeader)Marshal.PtrToStructure(tile.header, typeof(Pathfinding.MeshHeader));

        byte[] detailTris = new byte[header.detailTriCount * 4];
        Marshal.Copy(tile.detailTris, detailTris, 0, header.detailTriCount * 4);

        float[] verts = new float[header.vertCount * 3];
        Marshal.Copy(tile.verts, verts, 0, header.vertCount * 3);

        float[] detailVerts = new float[header.detailVertCount * 3];
        Marshal.Copy(tile.detailVerts, detailVerts, 0, header.detailVertCount * 3);

        int polyDetailSize  = Marshal.SizeOf(typeof(Pathfinding.PolyDetail));
        int polySize        = Marshal.SizeOf(typeof(Pathfinding.Poly));
        int detailMeshCount = header.detailMeshCount;

        for (int i = 0; i < detailMeshCount; ++i)
        {
            Pathfinding.PolyDetail pd   = (Pathfinding.PolyDetail)Marshal.PtrToStructure(new IntPtr(tile.detailMeshes.ToInt64() + (polyDetailSize * i)), typeof(Pathfinding.PolyDetail));
            Pathfinding.Poly       poly = (Pathfinding.Poly)Marshal.PtrToStructure(new IntPtr(tile.polys.ToInt64() + (polySize * i)), typeof(Pathfinding.Poly));

            Color col = new Color(UnityEngine.Random.value, UnityEngine.Random.value, UnityEngine.Random.value);

            for (int j = 0; j < pd.triCount; ++j)
            {
                int       tStart  = (int)(pd.triBase + j) * 4;
                int[]     vStarts = new int[3];
                float[][] vSrc    = new float[3][];
                for (int k = 0; k < 3; ++k)
                {
                    byte tk     = detailTris[tStart + k];
                    byte vCount = poly.vertCount;
                    if (tk < vCount)
                    {
                        vStarts[k] = poly.verts[tk] * 3;
                        vSrc[k]    = verts;
                    }
                    else
                    {
                        vStarts[k] = (int)(pd.vertBase + (tk - vCount)) * 3;
                        vSrc[k]    = detailVerts;
                    }
                }
                Vector3 a = new Vector3(vSrc[0][vStarts[0] + 0], vSrc[0][vStarts[0] + 1], vSrc[0][vStarts[0] + 2]);
                Vector3 b = new Vector3(vSrc[1][vStarts[1] + 0], vSrc[1][vStarts[1] + 1], vSrc[1][vStarts[1] + 2]);
                Vector3 c = new Vector3(vSrc[2][vStarts[2] + 0], vSrc[2][vStarts[2] + 1], vSrc[2][vStarts[2] + 2]);

                col = VaryColor(col);

                renderMesh.AddTriangle(new DbgRenderTriangle(a, b, c, col));
            }
        }

        renderMesh.Rebuild();
    }
コード例 #9
0
ファイル: DebugUtils.cs プロジェクト: srferran/ES2015A
    public static void ShowRecastDetailMesh(DbgRenderMesh renderMesh, PolyMeshAsset.PolyMeshDetailData dmesh)
    {

        renderMesh.Clear();

        UnityEngine.Random.seed = c_RandomSeed;

        int nmeshes = dmesh.nmeshes;
        for (int i = 0; i < nmeshes; ++i)
        {

            Color col = new Color(UnityEngine.Random.value, UnityEngine.Random.value, UnityEngine.Random.value);

            uint bverts = dmesh.meshes[i * 4];
            uint btris = dmesh.meshes[i * 4 + 2];
            uint ntris = dmesh.meshes[i * 4 + 3]; ;
            uint trisStart = btris * 4;
            for (uint j = 0; j < ntris; ++j)
            {
                Vector3[] verts = new Vector3[3];
                for (int k = 0; k < 3; ++k)
                {
                    int vertStart = (int)(bverts + dmesh.tris[trisStart + j * 4 + k]) * 3;
                    verts[k].x = dmesh.verts[vertStart + 0];
                    verts[k].y = dmesh.verts[vertStart + 1];
                    verts[k].z = dmesh.verts[vertStart + 2];
                }
                col = VaryColor(col);
                renderMesh.AddTriangle(new DbgRenderTriangle(
                    verts[0]
                    , verts[1]
                    , verts[2]
                    , col));
            }
        }
        renderMesh.Rebuild();
    }
コード例 #10
0
ファイル: DebugUtils.cs プロジェクト: srferran/ES2015A
    public static void ShowTilePolyDetails(DbgRenderMesh renderMesh, IntPtr navMesh, int tileId)
    {
        UnityEngine.Random.seed = c_RandomSeed;

        if (navMesh == null)
        {
            renderMesh.Rebuild();
            return;
        }

        IntPtr tilePtr = Pathfinding.Detour.getTile(navMesh, tileId);
        Pathfinding.MeshTile tile = (Pathfinding.MeshTile)Marshal.PtrToStructure(tilePtr, typeof(Pathfinding.MeshTile));

        if (tile.header.ToInt32() == 0)
        {
            return;
        }

        Pathfinding.MeshHeader header = (Pathfinding.MeshHeader)Marshal.PtrToStructure(tile.header, typeof(Pathfinding.MeshHeader));

        byte[] detailTris = new byte[header.detailTriCount * 4];
        Marshal.Copy(tile.detailTris, detailTris, 0, header.detailTriCount * 4);

        float[] verts = new float[header.vertCount * 3];
        Marshal.Copy(tile.verts, verts, 0, header.vertCount * 3);

        float[] detailVerts = new float[header.detailVertCount * 3];
        Marshal.Copy(tile.detailVerts, detailVerts, 0, header.detailVertCount * 3);

        int polyDetailSize = Marshal.SizeOf(typeof(Pathfinding.PolyDetail));
        int polySize = Marshal.SizeOf(typeof(Pathfinding.Poly));
        int detailMeshCount = header.detailMeshCount;
        for (int i = 0; i < detailMeshCount; ++i)
        {
            Pathfinding.PolyDetail pd = (Pathfinding.PolyDetail)Marshal.PtrToStructure(new IntPtr(tile.detailMeshes.ToInt64() + (polyDetailSize * i)), typeof(Pathfinding.PolyDetail));
            Pathfinding.Poly poly = (Pathfinding.Poly)Marshal.PtrToStructure(new IntPtr(tile.polys.ToInt64() + (polySize * i)), typeof(Pathfinding.Poly));

            Color col = new Color(UnityEngine.Random.value, UnityEngine.Random.value, UnityEngine.Random.value);

            for (int j = 0; j < pd.triCount; ++j)
            {
                int tStart = (int)(pd.triBase + j) * 4;
                int[] vStarts = new int[3];
                float[][] vSrc = new float[3][];
                for (int k = 0; k < 3; ++k)
                {
                    byte tk = detailTris[tStart + k];
                    byte vCount = poly.vertCount;
                    if (tk < vCount)
                    {
                        vStarts[k] = poly.verts[tk] * 3;
                        vSrc[k] = verts;
                    }
                    else
                    {
                        vStarts[k] = (int)(pd.vertBase + (tk - vCount)) * 3;
                        vSrc[k] = detailVerts;
                    }
                }
                Vector3 a = new Vector3(vSrc[0][vStarts[0] + 0], vSrc[0][vStarts[0] + 1], vSrc[0][vStarts[0] + 2]);
                Vector3 b = new Vector3(vSrc[1][vStarts[1] + 0], vSrc[1][vStarts[1] + 1], vSrc[1][vStarts[1] + 2]);
                Vector3 c = new Vector3(vSrc[2][vStarts[2] + 0], vSrc[2][vStarts[2] + 1], vSrc[2][vStarts[2] + 2]);

                col = VaryColor(col);

                renderMesh.AddTriangle(new DbgRenderTriangle(a, b, c, col));
            }
        }

        renderMesh.Rebuild();
    }