Graphics Reference
In-Depth Information
.DepthStencilState = depthStencilState;
// Set viewport
context.Rasterizer.SetViewports(this.DeviceManager
.Direct3DContext.Rasterizer.GetViewports());
// Set render targets
context.OutputMerger.SetTargets(this.DepthStencilView ,
this.RenderTargetView);
}
5.
In order to test the performance benefits or costs of multithreaded rendering within
D3DApp.Run , we need to load a number of additional copies of a mesh (or perhaps
load one very large scene). For loading the same model multiple times, let's create
a grid of models using the same mesh and separate them by their Mesh.Extent
property. The following code snippet can load simple or complex scenes and apply
a World matrix to the MeshRenderer instances, laying them out in a grid:
// Create and initialize the mesh renderer
var loadedMesh = Common.Mesh.LoadFromFile("Character.cmo");
List<MeshRenderer> meshes = new List<MeshRenderer>();
int meshRows = 10;
int meshColumns = 10;
// Create duplicates of mesh separated by the extent
var minExtent = (from mesh in loadedMesh
orderby new { mesh.Extent.Min.X, mesh.Extent.Min.Z }
select mesh.Extent).First();
var maxExtent = (from mesh in loadedMesh
orderby new { mesh.Extent.Max.X, mesh.Extent.Max.Z }
descending select mesh.Extent).First();
var extentDiff = (maxExtent.Max - minExtent.Min);
// X-axis
for (int x = -(meshColumns/2); x < (meshColumns/2); x++)
{ // Z-axis
for (int z = -(meshRows/2); z < (meshRows/2); z++)
{
var meshGroup = (from mesh in loadedMesh
select ToDispose(new MeshRenderer(mesh))).ToList();
// Reposition based on width/depth of combined extent
foreach (var m in meshGroup)
{
m.World.TranslationVector = new Vector3(
m.Mesh.Extent.Center.X + extentDiff.X * x,
m.Mesh.Extent.Min.Y, m.Mesh.Extent.Center.Z +
extentDiff.Z * z);
}
 
Search WWH ::




Custom Search