Esempio n. 1
0
 public SimpleVertexAdder(Mesh <TVertex> .Builder builder,
                          ObjFileVertexParser <TVertex> parser, ObjFileMesh owner)
 {
     this.builder = builder;
     this.parser  = parser;
     this.owner   = owner;
 }
Esempio n. 2
0
        private TVertex createVertex <TVertex>(
            Face.VertexIds ids, ObjFileVertexParser <TVertex> parser)
            where TVertex : struct
        {
            var position = this.positions[ids.Position];
            var uv       = ids.UV < 2
                ? new Vector3(0)
                : this.uvCoordinates[ids.UV];
            var normal = ids.UV < 0
                ? new Vector3(0)
                : this.normals[ids.Normal];

            return(parser(position, uv, normal));
        }
Esempio n. 3
0
        private static ObjFileVertexParser <TVertex> normalizeNormal <TVertex>(ObjFileVertexParser <TVertex> parser)
            where TVertex : struct
        {
            return((p, uv, n) =>
            {
                var normalLength = n.LengthSquared;

                if (normalLength > 0)
                {
                    n = n / (float)Math.Sqrt(normalLength);
                }

                return parser(p, uv, n);
            });
        }
Esempio n. 4
0
        /// <summary>
        /// Creates a mesh from the loaded obj file for further processing and rendering.
        /// </summary>
        /// <param name="vertexParser">A function creating mesh vertices from position, uv coordinate and normal.</param>
        /// <param name="mergeVertices">Whether to merge and reuse identical vertices.</param>
        /// <param name="normalizeNormals">Whether to normalise normals before creating the mesh vertex.</param>
        public Mesh <TVertex> ToMesh <TVertex>(
            ObjFileVertexParser <TVertex> vertexParser,
            bool mergeVertices    = true,
            bool normalizeNormals = true)
            where TVertex : struct
        {
            this.ensureStats();

            if (normalizeNormals)
            {
                vertexParser = normalizeNormal(vertexParser);
            }

            var builder = new Mesh <TVertex> .Builder(
                mergeVertices? 0 : this.totalFaceVertexCount);

            var vertexAdder = mergeVertices
                ? new SimpleVertexAdder <TVertex>(builder, vertexParser, this)
                : new MergedVertexDictionary <TVertex>(builder, vertexParser, this);

            return(this.toMesh(builder, vertexAdder));
        }
Esempio n. 5
0
 public MergedVertexDictionary(Mesh <TVertex> .Builder builder,
                               ObjFileVertexParser <TVertex> parser, ObjFileMesh owner)
     : base(builder, parser, owner)
 {
 }