示例#1
0
        private static void InputVertices(Vector3[] vertices)
        {
            for (int i = 0, n = vertices.Length - 1; i <= n; i++)
            {
                var point = vertices[i];
                var x     = (float)Math.Round(point.x, 2);
                var y     = (float)Math.Round(point.y, 2);
                var z     = (float)Math.Round(point.z, 2);
                if (!pointVertDict.ContainsKey(x))
                {
                    pointVertDict.Add(x, new Dictionary <float, Vert>());
                }

                Vert vert;
                if (pointVertDict[x].ContainsKey(z))
                {
                    vert = pointVertDict[x][z];
                }
                else
                {
                    vert   = new Vert();
                    vert.x = x;
                    vert.y = y;
                    vert.z = z;
                    pointVertDict[x][z] = vert;
                }

                indexVertDict.Add(i, vert);
            }
        }
示例#2
0
 public override string ToString()
 {
     return(string.Format("Vert {0}; PolyEdge {1}; Poly {2};",
                          Vert?.Join(","),
                          PolyEdge?.Join(","),
                          Poly?.Join(",")));
 }
示例#3
0
    void Start()
    {
        buffer = new ComputeBuffer(count, sizeof(float) * 6, ComputeBufferType.Default);

        Vert[] points = new Vert[count];

        Random.seed = 0;
        for (int i = 0; i < count; i++)
        {
            points[i] = new Vert();

            points[i].position   = new Vector3();
            points[i].position.x = Random.Range(-size, size);
            points[i].position.y = Random.Range(-size, size);
            points[i].position.z = Random.Range(-size / 5f, size / 5f);;

            /*points[i].color = new Vector3();
             * points[i].color.x = Random.value > 0.5f ? 0.0f : 1.0f;
             * points[i].color.y = Random.value > 0.5f ? 0.0f : 1.0f;
             * points[i].color.z = Random.value > 0.5f ? 0.0f : 1.0f;
             */

            points[i].color   = new Color();
            points[i].color.r = Random.value > 0.5f ? 0.0f : 1.0f;
            points[i].color.g = Random.value > 0.5f ? 0.0f : 1.0f;
            points[i].color.b = Random.value > 0.5f ? 0.0f : 1.0f;
        }

        buffer.SetData(points);
    }
    // 마우스 포인터 위치 검사하기
    void CheckMousePoint()
    {
        Vert v = Vert.Max;
        Hor  h = Hor.Max;

        // 4분면중에서 어느 면에 포인터가 위치하고 있는가?
        switch (name)
        {
        case "1":
            v = Vert.UP;
            h = Hor.LEFT;

            break;

        case "2":
            v = Vert.UP;
            h = Hor.RIGHT;

            break;

        case "3":
            v = Vert.DOWN;
            h = Hor.LEFT;

            break;

        case "4":
            v = Vert.DOWN;
            h = Hor.RIGHT;

            break;
        }

        EventHandler.instance.GetItemSizeOnGrid(v, h, parentSlot);
    }
示例#5
0
    public static void AssignVertStruct(float[] inValues, int id, out int index, Vert i)
    {
        index = id;
        //pos
        // need to be slightly different to not get infinte forces
        inValues[index++] = i.pos.x * .99f;
        inValues[index++] = i.pos.y * .99f;
        inValues[index++] = i.pos.z * .99f;

        //vel
        inValues[index++] = i.vel.x; //Random.Range(-.00f , .00f );
        inValues[index++] = i.vel.y; //Random.Range(-.00f , .00f );
        inValues[index++] = i.vel.z; //Random.Range(-.00f , .00f );

        //nor
        inValues[index++] = i.nor.x;
        inValues[index++] = i.nor.y;
        inValues[index++] = i.nor.z;

        //uv
        inValues[index++] = i.uv.x;
        inValues[index++] = i.uv.y;

        //ribbon id
        inValues[index++] = i.ribbonID;

        //life
        inValues[index++] = i.life;

        //debug
        inValues[index++] = i.debug.x;
        inValues[index++] = i.debug.y;
        inValues[index++] = i.debug.z;
    }
        public Mesh GenerateMesh(int w)
        {
            width   = w;
            halfPix = 0.5f / width;

            Mesh m = new Mesh();

            int pixls = width * width;

            verts = new Vert[pixls * 4];
            tris.Clear();

            Vector3[]      fverts = new Vector3[verts.Length];
            List <Vector4> uvs    = new List <Vector4>();//[verts.Length];

            for (int i = 0; i < verts.Length; i++)
            {
                uvs.Add(new Vector4());
            }

            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < width; y++)
                {
                    for (int p = 0; p < 4; p++)
                    {
                        int ind = GetIndOf(x, y, (PicV)p);
                        verts[ind]  = new Vert(x, y, (PicV)p, thickness);
                        fverts[ind] = verts[ind].pos;
                        uvs[ind]    = verts[ind].uv;
                    }

                    FillPixel(x, y);
                    if (thickness > 0)
                    {
                        thickness = Mathf.Min(thickness, 0.9f);
                        if (x < width - 1)
                        {
                            JoinRight(x, y);
                        }
                        if (y < width - 1)
                        {
                            JoinDown(x, y);
                        }
                        if ((x < width - 1) && (y < width - 1))
                        {
                            JoinDiagonal(x, y);
                        }
                    }
                }
            }

            m.vertices = fverts;
            m.SetUVs(0, uvs);
            m.triangles = tris.ToArray();



            return(m);
        }
示例#7
0
    private Tri TriFromEdgeToPoint(Edge newEdgeSource, Vert point, Vector3 normal)
    {
        Vert vert0 = newEdgeSource.Vert0;
        Vert vert1 = newEdgeSource.Vert1;

        return(new Tri(vert0, vert1, point, normal));
    }
    // Start is called before the first frame update
    void Start()
    {
        buffer  = new ComputeBuffer(count, sizeof(float) * 6, ComputeBufferType.Default);
        buffer2 = new ComputeBuffer(count, sizeof(float) * 6, ComputeBufferType.Default);

        Vert[] points = new Vert[count];

        // Random.seed = 0;
        Random.InitState(0);
        for (int i = 0; i < count; i++)
        {
            points[i] = new Vert();

            points[i].position   = new Vector3();
            points[i].position.x = Random.Range(-size, size);
            points[i].position.y = Random.Range(-size, size);
            points[i].position.z = 0.0f;

            points[i].color   = new Vector3();
            points[i].color.x = Random.value;
            points[i].color.y = Random.value;
            points[i].color.z = Random.value;
        }

        buffer.SetData(points);

        handle = computeShader.FindKernel("CSMain5");
        computeShader.SetBuffer(handle, "buffer", buffer);
        computeShader.SetBuffer(handle, "buffer2", buffer2);
    }
示例#9
0
    private static Tri GetInitialTri(Vert vert0, Vert vert1, Vert vert2, Vector3 centerPoint)
    {
        Vector3 polyCenter  = (vert0.Pos + vert1.Pos + vert2.Pos) / 3;
        Vector3 normalGuide = centerPoint - polyCenter;

        return(new Tri(vert0, vert1, vert2, normalGuide));
    }
示例#10
0
文件: Client.cs 项目: Phlarfl/TSML
        private Voxel AddClick(WorldMaster master, Maker maker, PacketAddVoxel packet)
        {
            int dstHeight = packet.DestinationHeight;
            var voxelType = packet.VoxelType;
            var vert      = new Vert()
            {
                angle  = packet.VertAngle,
                hexPos = packet.HexPos
            };

            if (!vert.full)
            {
                vert = master.grid.GetVertOrIterate(packet.HexPos, null);
            }

            if (!vert.full || !master.graph.IsCoordinateAllowed(vert.hexPos))
            {
                return(null);
            }

            maker.BeginNewAction();
            if (dstHeight == 0)
            {
                voxelType = VoxelType.Ground;
            }

            var result = master.graph.AddVoxel(vert.hexPos, (byte)dstHeight, voxelType, true);

            maker.AddAction(vert.hexPos, (byte)dstHeight, VoxelType.Empty, voxelType);
            maker.EndAction();
            return(result);
        }
 public Tri(Vert v0, Vert v1, Vert v2)
 {
     this.verts = new List <Vert>()
     {
         v0, v1, v2
     };
     this.normal = ComputeNormal();
 }
示例#12
0
 // Given a root (aa) and two adjacent vertices (bb, cc), computer the normal for aa
 private static OMV.Vector3 MakeNormal(Vert aa, Vert bb, Vert cc)
 {
     OMV.Vector3 mm        = aa.Position - bb.Position;
     OMV.Vector3 nn        = aa.Position - cc.Position;
     OMV.Vector3 theNormal = OMV.Vector3.Cross(mm, nn);
     theNormal.Normalize();
     return(theNormal);
 }
示例#13
0
            public Vert AddVertice(Vector3 pos)
            {
                Vert v = new Vert();

                v.position = pos;
                v.selfNode = this.vertices.AddLast(v);
                return(v);
            }
示例#14
0
 private IEnumerable <Tri> DrawNewPolys(IEnumerable <EdgeDistStatus> edges, Vert vert, HashSet <Tri> triList)
 {
     foreach (EdgeDistStatus status in edges)
     {
         Tri newTri = TriFromEdgeToPoint(status.Edge, vert, -status.Tri.Normal);
         triList.Add(newTri);
         yield return(newTri);
     }
 }
示例#15
0
 void deleteVertexFromList(int DataToDelete)
 {
     foreach (Vertex Vert in VertexList)
     {
         if (Vert.getData() == DataToDelete)
         {
             VertexList.Remove(Vert);
         }
     }
 }
示例#16
0
 Vertex getVertexFromLList(int DataToFind)
 {
     foreach (Vertex Vert in VertexList)
     {
         if (Vert.getData() == DataToFind)
         {
             return(Vert);
         }
     }
     return(new Vertex(-100));
 }
示例#17
0
    public static void Draw_QUAD(Vert _a, Vert _b, Vert _c, Vert _d)
    {
        GL.Begin(GL.QUADS);

        Add_VERT(_a);
        Add_VERT(_b);
        Add_VERT(_c);
        Add_VERT(_d);

        GL.End();
    }
示例#18
0
    public static void Draw_POLY_LINE(params Vert[] _verts)
    {
        GL.Begin(GL.LINE_STRIP);

        for (int vertIndex = 0; vertIndex < _verts.Length; vertIndex++)
        {
            Vert _V = _verts[vertIndex];
            Add_VERT(_V);;
        }
        GL.End();
    }
示例#19
0
        public YAMLNode ExportYAML(IExportContainer container)
        {
            YAMLMappingNode node = new YAMLMappingNode();

            node.AddSerializedVersion(GetSerializedVersion(container.ExportVersion));
            node.Add(IndexName, Index);
            node.Add(UVName, UV.ExportYAML(container));
            node.Add(VertName, Vert.ExportYAML(container));
            node.Add(AdvanceName, Advance);
            node.Add(FlippedName, Flipped);
            return(node);
        }
示例#20
0
 private static List <Vert> GetInitialBoxVerts()
 {
     Vert[] ret = new Vert[8];
     ret[0] = new Vert(new Vector3(1, 1, 1));
     ret[1] = new Vert(new Vector3(1, 0, 1));
     ret[2] = new Vert(new Vector3(1, 1, 0));
     ret[3] = new Vert(new Vector3(1, 0, 0));
     ret[4] = new Vert(new Vector3(0, 1, 1));
     ret[5] = new Vert(new Vector3(0, 0, 1));
     ret[6] = new Vert(new Vector3(0, 1, 0));
     ret[7] = new Vert(new Vector3(0, 0, 0));
     return(ret.ToList());
 }
示例#21
0
        public void CreateUniqueVerts()
        {
            var verts = MeshConstructor.Instance.verts;

            for (var i = 0; i < vertices.Count; i++)
            {
                var newVert = new Vert(vertices[i].targetPosition, false);
                verts.Add(newVert);

                vertices[i].UnshareVert(this, newVert);
                vertices[i]    = newVert;
                hasUniqueVerts = true;
            }
        }
示例#22
0
            public Vert OtherVert(Vert v)
            {
                if (this.conA.vert == v)
                {
                    return(this.conB.vert);
                }

                if (this.conB.vert == v)
                {
                    return(this.conA.vert);
                }

                return(null);
            }
示例#23
0
    public static void Draw_POLY_LINE_CLOSE(params Vert[] _verts)
    {
        GL.Begin(GL.LINE_STRIP);
        Vert _start = _verts[0];

        Add_VERT(_start);
        for (int vertIndex = 1; vertIndex < _verts.Length; vertIndex++)
        {
            Vert _V = _verts[vertIndex];
            Add_VERT(_V);
        }
        Add_VERT(_start);
        GL.End();
    }
    public Tri(Vert v0, Vert v1, Vert v2)
    {
        m_V0 = v0;
        m_V0.m_Tris.Add(this);

        m_V1 = v1;
        m_V1.m_Tris.Add(this);

        m_V2 = v2;
        m_V2.m_Tris.Add(this);

        m_Normal = Vector3.Cross(v0.m_Pos - v1.m_Pos, v0.m_Pos - v2.m_Pos).normalized * .3f;
        m_Center = (v0.m_Pos + v1.m_Pos + v2.m_Pos) / 3f;
    }
示例#25
0
 public override String ToString()
 {
     if (Vert == null && Horz == null)
     {
         return(null);
     }
     if (Vert == Horz)
     {
         return(Vert.ToString());
     }
     else
     {
         return($"{Vert.ToString()} {Horz.ToString()}");
     }
 }
示例#26
0
            public bool SetFaceFromVert(Vert v, Face f)
            {
                if (this.conA.vert == v)
                {
                    this.conA.face = f;
                    return(true);
                }

                if (this.conB.vert == v)
                {
                    this.conB.face = f;
                    return(true);
                }

                return(false);
            }
示例#27
0
            public WEdge EdgeWithFaceAndNotVert(Face f, Vert v)
            {
                foreach (WEdge e in this.edges)
                {
                    if (e.conA.face == f && e.conA.vert != v)
                    {
                        return(e);
                    }

                    if (e.conB.face == f && e.conB.vert != v)
                    {
                        return(e);
                    }
                }
                return(null);
            }
示例#28
0
        private void ParseChunk_VRTX(BinaryReader data, ref Geoset geoset)
        {
            uint vertCount = data.ReadUInt32();

            Vert[] verts = new Vert[vertCount];

            for (int i = 0; i < vertCount; i++)
            {
                verts[i] = new Vert {
                    x = data.ReadSingle(), y = data.ReadSingle(), z = data.ReadSingle()
                }
            }
            ;

            geoset.verts = verts;
        }
示例#29
0
    public void Execute(int idx)
    {
        int   dim    = m_dimension;
        float pitch  = m_pitch;
        float ptSize = m_pointSize;
        float radius = pitch * 0.5f * Util.CornerConstant;

        int    x = idx % dim;
        int    y = (idx / dim) % dim;
        int    z = (idx / (dim * dim)) % dim;
        float3 P = m_origin + float3(x, y, z) * pitch;

        float distance = Distance(P);

        if (abs(distance) >= radius)
        {
            return;
        }

        m_ran[idx] = 1;

        float3 N = Normal(P);

        P = P - N * distance;
        float3 T = Util.Tangent(N);
        float3 B = Util.Bitangent(N, T);

        T *= ptSize;
        B *= ptSize;

        m_positions[idx] = new Vert
        {
            a = P - T - B,
            b = P - T + B,
            c = P + T + B,
            d = P + T - B,
        };

        m_normals[idx] = new Vert
        {
            a = Normal(m_positions[idx].a),
            b = Normal(m_positions[idx].b),
            c = Normal(m_positions[idx].c),
            d = Normal(m_positions[idx].d),
        };
    }
    public static Mesh RasterizeMesh(Mesh oMesh, int resolution)
    {
        List <Vert> verts = GetVerts(oMesh);
        List <Tri>  tris  = GetTris(oMesh, verts);

        RemoveDuplicateVerts(tris, verts);

        Vector3 bounds = new Vector3(oMesh.bounds.size.x, oMesh.bounds.size.y, oMesh.bounds.size.z);
        Vector3 steps  = new Vector3(bounds.x / resolution, bounds.y / resolution, bounds.z / resolution);

        List <Vector3> raster = new List <Vector3>();

        for (int x = 0; x <= resolution; x++)
        {
            for (int y = 0; y <= resolution; y++)
            {
                for (int z = 0; z <= resolution; z++)
                {
                    raster.Add(new Vector3(-(bounds.x / 2f) + x * steps.x, -(bounds.y / 2f) + y * steps.y, -(bounds.z / 2f) + z * steps.z));
                }
            }
        }

        for (int i = 0; i < verts.Count; i++)
        {
            Vert v = verts[i];

            float minDist  = Mathf.Infinity;
            int   minIndex = -1;
            for (int j = 0; j < raster.Count; j++)
            {
                float dist = Vector3.Distance(v.pos, raster[j]);
                if (dist < minDist)
                {
                    minDist  = dist;
                    minIndex = j;
                }
            }

            v.pos = raster[minIndex];
        }

        RemoveDuplicateVerts(tris, verts);

        return(GenerateMesh(verts, tris));
    }
示例#31
0
    // Use this for initialization
    void Start()
    {
        buffer = new ComputeBuffer(count, sizeof(float) * 6, ComputeBufferType.Default);

        Vert[] points = new Vert[count];

        Random.seed = 0;
        for (int i = 0; i < count; i++)
        {
            points[i] = new Vert();

            points[i].position = new Vector3();
            points[i].position.x = Random.Range(-size, size);
            points[i].position.y = Random.Range(-size, size);
            points[i].position.z = 0;

            points[i].color = new Vector3();
            points[i].color.x = Random.value > 0.5f ? 0.0f : 1.0f;
            points[i].color.y = Random.value > 0.5f ? 0.0f : 1.0f;
            points[i].color.z = Random.value > 0.5f ? 0.0f : 1.0f;
        }

        buffer.SetData(points);

        index = cs.FindKernel("CSMain");

           /* tex = new RenderTexture(64, 64, 24);
        tex.enableRandomWrite = true;
        tex.Create();*/

        cs.SetBuffer(index, "data", buffer);
        cs.SetInt("count", count);
         //   cs.SetTexture(index, "Result", tex);
        cs.Dispatch(index, 1, 1,1);

           /* if (cam != null)
            cam.targetTexture = tex;*/
    }
示例#32
0
    void Start()
    {
        buffer = new ComputeBuffer (count, sizeof(float) * 6, ComputeBufferType.Default);

        Vert[] points = new Vert[count];

        Random.seed = 0;
        for (int i = 0; i < count; i++)
        {
            points[i] = new Vert();

            points[i].position = new Vector3();
            points[i].position.x = Random.Range (0, size);
            points[i].position.y = Random.Range (0, size);
            points[i].position.z = Random.Range (0, size);;

            points[i].color = new Vector3();
            points[i].color.x = points[i].position.x/size;
            points[i].color.y = points[i].position.y/size;
            points[i].color.z = points[i].position.z/size;
        }

        buffer.SetData (points);
    }