Exemple #1
0
        public IEnumerator Generate()
        {
            m_Empty = true;

            m_ActiveParticleCount        = 0;
            distanceConstraintsData      = null;
            bendConstraintsData          = null;
            skinConstraintsData          = null;
            tetherConstraintsData        = null;
            bendTwistConstraintsData     = null;
            stretchShearConstraintsData  = null;
            shapeMatchingConstraintsData = null;
            aerodynamicConstraintsData   = null;
            chainConstraintsData         = null;
            volumeConstraintsData        = null;

            points    = null;
            edges     = null;
            triangles = null;

            IEnumerator g = Initialize();

            while (g.MoveNext())
            {
                yield return(g.Current);
            }

            RecalculateBounds();

            m_Empty = false;
            m_InitialActiveParticleCount = m_ActiveParticleCount;

            foreach (IObiConstraints constraints in GetConstraints())
            {
                for (int i = 0; i < constraints.GetBatchCount(); ++i)
                {
                    constraints.GetBatch(i).initialActiveConstraintCount = constraints.GetBatch(i).activeConstraintCount;
                }
            }

#if UNITY_EDITOR
            EditorUtility.SetDirty(this);
#endif

            if (OnBlueprintGenerate != null)
            {
                OnBlueprintGenerate(this);
            }
        }
Exemple #2
0
        protected IEnumerator CreateSkinConstraints()
        {
            skinConstraintsData = new ObiSkinConstraintsData();
            ObiSkinConstraintsBatch skinBatch = new ObiSkinConstraintsBatch();

            skinConstraintsData.AddBatch(skinBatch);

            for (int i = 0; i < topology.vertices.Count; ++i)
            {
                skinBatch.AddConstraint(i, Vector3.Scale(scale, topology.vertices[i].position), Vector3.up, 0.05f, 0.1f, 0, 0);
                skinBatch.activeConstraintCount++;

                if (i % 500 == 0)
                {
                    yield return(new CoroutineJob.ProgressInfo("ObiCloth: generating skin constraints...", i / (float)topology.vertices.Count));
                }
            }

            Vector3[] normals = topology.inputMesh.normals;
            for (int i = 0; i < normals.Length; ++i)
            {
                skinBatch.skinNormals[topology.rawToWelded[i]] = normals[i];
            }
        }
Exemple #3
0
 public ObiSkinConstraintsBatch(ObiSkinConstraintsData constraints = null) : base()
 {
 }
 public ObiSkinConstraintsData(ObiActor actor = null, ObiSkinConstraintsData source = null) : base(actor, source)
 {
 }
Exemple #5
0
 public ObiSkinConstraintsBatch(ObiSkinConstraintsData constraints = null, ObiSkinConstraintsBatch source = null) : base(source)
 {
     m_Constraints = constraints;
 }