private IRenderBatch GetRenderBatch(SceneObject sceneObject)
 {
     var batch = new DirectX9RenderBatch(_device, PrimitiveType.TriangleList);
     var indices = sceneObject.Geometry.Triangles.SelectMany(t => new[] { t.A, t.B, t.C }).ToArray();
     var vertices = sceneObject.Geometry.Vertices.Select(
         v => new VertexPositionNormal { Position = new Vector3(v.ToArray()), Normal = Vector3.Zero }).ToArray();
     ComputeVertexNormals(vertices, sceneObject.Geometry.Triangles);
     batch.Record(indices, vertices);
     return batch;
 }
 private void RenderSceneObject(SceneObject sceneObject)
 {
     IRenderBatch batch;
     if (!_meshCache.TryGetValue(sceneObject, out batch))
     {
         batch = GetRenderBatch(sceneObject);
         _meshCache[sceneObject] = batch;
     }
     batch.Render();
 }
Example #3
0
 public static BVHNode CreateLeaf(SceneObject sceneObject, int firstTriangleIndex, ref BoundingBox bounds)
 {
     return new BVHNode(sceneObject, firstTriangleIndex, ref bounds);
 }
Example #4
0
 private BVHNode(SceneObject sceneObject, int triangleIndexOrChildCount, ref BoundingBox bounds)
 {
     _bounds = bounds;
     _triangleIndexOrChildCount = triangleIndexOrChildCount;
     _sceneObject = sceneObject;
 }