コード例 #1
0
        private static void CloneVertices(List <Segment> segments, int segIndex, GeneratingModel model, List <int> output, ref int wrapPoint)
        {
            var input = output.ToArray();

            output.Clear();
            var  seg           = segments[segIndex];
            bool wrapProcessed = false;

            for (int i = 0; i < input.Length; ++i)
            {
                var rdv = model.rdv[input[i]];
                var deg = seg.Rotation0Fraction + seg.RotationStepFraction * i;
                if (deg >= 1)
                {
                    if (i != input.Length - 1)
                    {
                        continue;                        //should never happen
                    }
                    deg = 0;
                }
                rdv.Normal = CalculateNormal(segments, segIndex, deg, true);
                output.Add(model.AddRDV(rdv));
                if (rdv.UV.Y == 0 && wrapPoint != -1)
                {
                    if (wrapProcessed)
                    {
                        throw new Exception();
                    }
                    var rdv2 = new ModelVertex
                    {
                        Position = model.rdv[wrapPoint].Position,
                        Normal   = rdv.Normal,
                        UV       = model.rdv[wrapPoint].UV,
                    };
                    wrapPoint     = model.AddRDV(rdv2);
                    wrapProcessed = true;
                }
            }

            if (!wrapProcessed && wrapPoint != -1)
            {
                throw new Exception();
            }
        }
コード例 #2
0
        private static int GetVertexIndex(ObjModel model, string str)
        {
            if (!model.ModelVertexString.TryGetValue(str, out var index))
            {
                ModelVertex mv = new ModelVertex();
                var         ci = str.Split('/');
                mv.Position = model.Position[int.Parse(ci[0]) - 1];
                if (ci.Length >= 2 && ci[1].Length > 0)
                {
                    mv.UV = model.TexCoord[int.Parse(ci[1]) - 1];
                }
                if (ci.Length >= 3 && ci[2].Length > 0)
                {
                    mv.Normal = model.Normal[int.Parse(ci[2]) - 1];
                }

                index = model.ModelVertices.Count;
                model.ModelVertices.Add(mv);
                model.ModelVertexString.Add(str, index);
            }
            return(index);
        }