Пример #1
0
        protected override void InitFromMeshData(Device device, GeometryGenerator.MeshData mesh)
        {
            var subset = new MeshGeometry.Subset {
                FaceCount   = mesh.Indices.Count / 3,
                FaceStart   = 0,
                VertexCount = mesh.Vertices.Count,
                VertexStart = 0
            };

            Subsets.Add(subset);

            var max = new Vector3(float.MinValue);
            var min = new Vector3(float.MaxValue);

            foreach (var vertex in mesh.Vertices)
            {
                max = Vector3.Maximize(max, vertex.Position);
                min = Vector3.Minimize(min, vertex.Position);
            }

            BoundingBox = new BoundingBox(min, max);

            Vertices.AddRange(mesh.Vertices.Select(v => new PosNormalTexTan(v.Position, v.Normal, v.TexC, v.TangentU)).ToList());
            Indices.AddRange(mesh.Indices.Select(i => (short)i));

            Materials.Add(new Material {
                Ambient = Color.Gray, Diffuse = Color.White, Specular = new Color4(16, 1, 1, 1)
            });
            DiffuseMapSRV.Add(null);
            NormalMapSRV.Add(null);

            ModelMesh.SetSubsetTable(Subsets);
            ModelMesh.SetVertices(device, Vertices);
            ModelMesh.SetIndices(device, Indices);
        }
Пример #2
0
        private static ushort[] GetIndices(GeometryGenerator.MeshData data)
        {
            var result = new ushort[data.Indices.Count];

            for (var i = data.Indices.Count - 1; i >= 0; i--)
            {
                result[i] = (ushort)data.Indices[i];
            }
            return(result);
        }
Пример #3
0
        private static InputLayouts.VerticePNTG[] GetVertices(GeometryGenerator.MeshData data)
        {
            var result = new InputLayouts.VerticePNTG[data.Vertices.Count];

            for (var i = data.Vertices.Count - 1; i >= 0; i--)
            {
                var v = data.Vertices[i];
                result[i] = new InputLayouts.VerticePNTG(v.Position, v.Normal, v.TexC, v.TangentU);
            }
            return(result);
        }
Пример #4
0
        private void BuildLandGeometryBuffers()
        {
            GeometryGenerator.MeshData grid = GeometryGenerator.CreateGrid(160.0f, 160.0f, 50, 50);
            var vertices = new List <VertexPN>();

            foreach (var vertex in grid.Vertices)
            {
                var pos = vertex.Position;
                pos.Y = GetHillHeight(pos.X, pos.Z);

                var normal = GetHillNormal(pos.X, pos.Z);

                vertices.Add(new VertexPN(pos, normal, vertex.TexC));
            }
            var vbd = new D3D11.BufferDescription(VertexPN.Stride * vertices.Count, D3D11.ResourceUsage.Immutable, D3D11.BindFlags.VertexBuffer, D3D11.CpuAccessFlags.None, D3D11.ResourceOptionFlags.None, 0);

            _groundVB = new D3D11.Buffer(Device, DataStream.Create <VertexPN>(vertices.ToArray(), false, false), vbd);

            var ibd = new D3D11.BufferDescription(sizeof(int) * grid.Indices.Count, D3D11.ResourceUsage.Immutable, D3D11.BindFlags.IndexBuffer, D3D11.CpuAccessFlags.None, D3D11.ResourceOptionFlags.None, 0);

            _groundIB         = new D3D11.Buffer(Device, DataStream.Create <Int32>(grid.Indices.ToArray(), false, false), ibd);
            _groundIndexCount = grid.Indices.Count;
        }
Пример #5
0
 public DebugObject(Matrix transform, GeometryGenerator.MeshData meshData) : base(null, InputLayouts.VerticePNTG.Convert(meshData.Vertices), meshData.Indices)
 {
     Transform = transform;
 }
Пример #6
0
 protected abstract void InitFromMeshData(Device device, GeometryGenerator.MeshData mesh);
Пример #7
0
 protected override void InitFromMeshData(Device device, GeometryGenerator.MeshData mesh)
 {
     throw new System.NotImplementedException();
 }
Пример #8
0
 public DebugObject(Matrix transform, GeometryGenerator.MeshData meshData) : base(null, GetVertices(meshData), GetIndices(meshData))
 {
     Transform = transform;
 }
Пример #9
0
 public MaterialObject(Matrix transform, GeometryGenerator.MeshData data, bool isTransparent)
     : this(transform, InputLayouts.VerticePNTG.Convert(data.Vertices), data.Indices, isTransparent)
 {
 }