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(); }
public static BVHNode CreateLeaf(SceneObject sceneObject, int firstTriangleIndex, ref BoundingBox bounds) { return new BVHNode(sceneObject, firstTriangleIndex, ref bounds); }
private BVHNode(SceneObject sceneObject, int triangleIndexOrChildCount, ref BoundingBox bounds) { _bounds = bounds; _triangleIndexOrChildCount = triangleIndexOrChildCount; _sceneObject = sceneObject; }