Exemplo n.º 1
0
        private void CalculateTangents(GpuMesh mesh)
        {
            foreach (var bufferAndPrimitives in mesh.GroupPrimitives())
            {
                var bufferView = bufferAndPrimitives.BufferView;
                if (bufferView.GetStream(StreamKey.TexCoord0) == null)
                {
                    continue;
                }

                throw new NotImplementedException();
            }
            //if (mesh.GetStream(StreamKey.TexCoord0) == null)
            //{
            //    return;
            //}
            //var tangents = new ArrayMeshStream<Vector3>(mesh.Count, mesh.GetStream(StreamKey.Position).ConverterFactory);
            //mesh.SetStream(StreamKey.Tangent, tangents);

            //foreach (var submesh in mesh.Submeshes)
            //{
            //    switch (submesh.VertexSourceType)
            //    {
            //        case VertexSourceType.Triangles:
            //            CalculateTangentsForTriangles(mesh, submesh, tangents);
            //            break;
            //        case VertexSourceType.Points:
            //        case VertexSourceType.Lines:
            //        case VertexSourceType.LineLoop:
            //        case VertexSourceType.LineStrip:
            //            break;
            //        default:
            //            throw new NotImplementedException(submesh.VertexSourceType.ToString());
            //    }
            //}

            //for (var index = 0; index < tangents.Count; index++)
            //{
            //    var tangent = tangents[index];
            //    var l = tangent.LengthSquared;
            //    if (l < 1e-6f)
            //    {
            //        tangents[index] = Vector3.UnitX;
            //    }
            //    else
            //    {
            //        tangents[index] = tangent * (1.0f / (float)Math.Sqrt(l));
            //    }
            //}
        }
Exemplo n.º 2
0
        private IEnumerable <IMesh> PaintSingleStreamMesh(GpuMesh mesh)
        {
            foreach (var bufferAndPrimitives in mesh.GroupPrimitives())
            {
                var bufferView = bufferAndPrimitives.BufferView;
                if (bufferView.GetStream(StreamKey.Color) != null)
                {
                    continue;
                }
                var meshStream             = bufferView.GetStream(StreamKey.Position);
                var streamConverterFactory = meshStream.ConverterFactory;
                var colors = new Vector4[meshStream.Count];
                new Span <Vector4>(colors).Fill(_color);
                var arrayMeshStream = new ArrayMeshStream <Vector4>(colors, streamConverterFactory);
                bufferView.SetStream(StreamKey.Color, arrayMeshStream);
            }

            yield return(mesh);
        }