public static void InitializeGraphics(GraphicsDevice graphicsDevice,
                                              Triangle[] triangles,
                                              Guid id)
        {
            var basicEffect = new BasicEffect(graphicsDevice)
                                  {
                                      LightingEnabled = false,
                                      VertexColorEnabled = false
                                  };

            var index = 0;
            var vertices = new VertexPositionColor[triangles.SelectMany(i => i.Points).Count()];

            foreach (var point in triangles.SelectMany(triangle => triangle.Points))
                vertices[index++] = new VertexPositionColor(new Vector3(point.X,
                                                                        point.Y,
                                                                        point.Z),
                                                            Color.White);

            var vertexBuffer = new VertexBuffer(graphicsDevice,
                                                typeof (VertexPositionColor),
                                                vertices.Length,
                                                BufferUsage.None);
            vertexBuffer.SetData(vertices);

            Subscriptions.Add(id, new RendererHelperData
                                       {
                                           BasicEffect = basicEffect,
                                           VertexBuffer = vertexBuffer
                                       });
        }
        public void VertexInsideBoundingSphereCheck()
        {
            var transform = Matrix.CreateScale(3.0f)*Matrix.CreateRotationY(MathHelper.PiOver4);
            var sphere = new BoundingSphere(Vector3.Zero, 1.0f);
            var transformedSphere = sphere.Transform(transform);

            var triangleOut = new Triangle(new Vector3(2.1f, 2.1f, 0.0f),
                                           new Vector3(2.1f, 0.0f, 0.0f),
                                           new Vector3(4.2f, 2.1f, 0.0f),
                                           String.Empty);
            Assert.False(triangleOut.HasAtLeastOnPointInsideBoundingSphere(sphere));

            var transformedTriangleOut = new Triangle(Vector3.Transform(triangleOut.Point0, transform),
                                                      Vector3.Transform(triangleOut.Point1, transform),
                                                      Vector3.Transform(triangleOut.Point2, transform),
                                                      String.Empty);
            Assert.False(transformedTriangleOut.HasAtLeastOnPointInsideBoundingSphere(transformedSphere));

            var triangleIn = new Triangle(new Vector3(2.1f, 2.1f, 0.0f),
                                          new Vector3(0.9f, 0.0f, 0.0f), // It's in!
                                          new Vector3(4.2f, 2.1f, 0.0f),
                                          String.Empty);
            Assert.True(triangleIn.HasAtLeastOnPointInsideBoundingSphere(sphere));

            var transformedTriangleIn = new Triangle(Vector3.Transform(triangleIn.Point0, transform),
                                                     Vector3.Transform(triangleIn.Point1, transform),
                                                     Vector3.Transform(triangleIn.Point2, transform),
                                                     String.Empty);
            Assert.True(transformedTriangleIn.HasAtLeastOnPointInsideBoundingSphere(transformedSphere));
        }
        public static void Render(GraphicsDevice graphicsDevice,
                                  Matrix view,
                                  Matrix projection,
                                  Matrix world,
                                  Color color,
                                  Triangle[] triangles,
                                  Guid id)
        {
            var subscription = Subscriptions[id];

            graphicsDevice.SetVertexBuffer(subscription.VertexBuffer);
            subscription.BasicEffect.World = world;
            subscription.BasicEffect.View = view;
            subscription.BasicEffect.Projection = projection;
            subscription.BasicEffect.DiffuseColor = color.ToVector3();

            foreach (var pass in subscription.BasicEffect.CurrentTechnique.Passes)
            {
                pass.Apply();
                graphicsDevice.DrawPrimitives(PrimitiveType.LineList, 0, triangles.Length * 3);
            }
        }
Esempio n. 4
0
 public ModelData(BoundingBox boundingBox, Triangle[] triangles)
 {
     _triangles = triangles;
     _boundingBox = boundingBox;
 }