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); } }
public ModelData(BoundingBox boundingBox, Triangle[] triangles) { _triangles = triangles; _boundingBox = boundingBox; }