Exemple #1
0
        private void Remap(Model.SourceAccessor source, string semantic, ModelSettings settings)
        {
            float tolerance = 0.01f;

            if (settings.toleranceMap.ContainsKey(semantic))
            {
                tolerance = settings.toleranceMap[semantic];
            }
            if (!settings.optimise)
            {
                tolerance = 0;
            }

            source.data = new List <float>();
            source.map  = new List <int>();

            int stride = source.dataRefs.Count;
            int num    = 0;

            for (int i = 0; i < source.count; i++)
            {
                List <float> item = new List <float>();
                foreach (Model.SourceDataRef dataRef in source.dataRefs)
                {
                    item.Add(dataRef.data.data[dataRef.stride * i + dataRef.offset]);
                }

                if (tolerance != 0)
                {
                    bool found = false;
                    for (int j = 0; j < num; j++)
                    {
                        found = true;
                        for (int k = 0; k < stride; k++)
                        {
                            if (Math.Abs(item[k] - source.data[j * stride + k]) > tolerance)
                            {
                                found = false;
                                break;
                            }
                        }
                        if (found)
                        {
                            source.map.Add(j);
                            break;
                        }
                    }
                    if (found)
                    {
                        continue;
                    }
                }

                source.data.AddRange(item);
                source.map.Add(num);
                num++;
            }
        }
Exemple #2
0
 private void ApplyMap(Model.SubModel sub, Model.SourceAccessor sourceData, int offset)
 {
     if (sourceData.map == null)
     {
         return;
     }
     for (int i = 0; i < sub.VertexMap.Count; i += sub.indexStride)
     {
         sub.VertexMap[i + offset] = sourceData.map[sub.VertexMap[i + offset]];
     }
 }
Exemple #3
0
        private void ReadAccessor(Model model, XElement xSource)
        {
            XElement accessor = xSource.Element(parent.ns + "technique_common");

            if (accessor == null)
            {
                return;
            }
            accessor = accessor.Element(parent.ns + "accessor");
            if (accessor == null)
            {
                return;
            }

            string dataName = ((string)accessor.Attribute("source")).Substring(1);

            Model.SourceData dataItem = model.dataList.FirstOrDefault((d) => d.name == dataName);
            if (dataItem == null)
            {
                return;
            }

            Model.SourceAccessor source = new Model.SourceAccessor();
            source.name  = (string)xSource.Attribute("id");
            source.count = (int)accessor.Attribute("count");

            int offset = (accessor.Attribute("offset") == null)?0:(int)accessor.Attribute("offset");
            int stride = (accessor.Attribute("stride") == null)?1:(int)accessor.Attribute("stride");

            foreach (XElement param in accessor.Elements(parent.ns + "param"))
            {
                if (param.Attribute("name") != null)
                {
                    Model.SourceDataRef sourceRef = new Model.SourceDataRef();
                    sourceRef.data   = dataItem;
                    sourceRef.offset = offset;
                    sourceRef.stride = stride;

                    source.dataRefs.Add(sourceRef);
                }
                offset++;
            }

            model.accessorList.Add(source);
        }