private void SetupRenderElement(MyRenderVoxelBatch batch, MyRender.MyRenderElement renderElement) { renderElement.RenderObject = this; renderElement.VertexDeclaration = MyVertexFormatVoxelSingleMaterial.VertexDeclaration; renderElement.VertexStride = MyVertexFormatVoxelSingleMaterial.Stride; renderElement.VertexCount = batch.VertexCount; renderElement.VertexBuffer = batch.VertexBuffer; renderElement.InstanceBuffer = null; renderElement.IndexBuffer = batch.IndexBuffer; renderElement.IndexStart = 0; if (renderElement.IndexBuffer != null) { renderElement.TriCount = batch.IndexCount / 3; } { var matrix = m_worldMatrix; matrix.Right = (Vector3D)m_offset; matrix.Up = (Vector3D)m_scale; matrix.Backward = MyRenderCamera.Position - m_worldMatrix.Translation; Vector2 lodBounds; MyClipmap.ComputeLodViewBounds(m_scaleGroup, m_coord.Lod, out lodBounds.X, out lodBounds.Y); matrix.M14 = lodBounds.X; matrix.M24 = lodBounds.Y; matrix.M34 = MathHelper.Clamp(MyClipmap.DebugClipmapMostDetailedLod - m_coord.Lod, 0f, 1f); renderElement.WorldMatrix = matrix; } renderElement.VoxelBatch = batch; }
public void Add(MyLodTypeEnum lod, MyRender.MyRenderElement renderElement) { if (renderElement.DrawTechnique == MyMeshDrawTechnique.VOXEL_MAP) { AddVoxel(lod, renderElement); } else { AddModel(lod, renderElement); } }
public void AddVoxel(MyLodTypeEnum lod, MyRender.MyRenderElement renderElement) { var matDict = Voxels[GetVoxelIndex(lod, renderElement.VoxelBatch.Type)]; List <MyRender.MyRenderElement> elements; if (!matDict.Voxels.TryGetValue(renderElement.VoxelBatch.MaterialId, out elements)) { elements = new List <MyRender.MyRenderElement>(20); matDict.Voxels[renderElement.VoxelBatch.MaterialId] = elements; } matDict.RenderElementCount++; elements.Add(renderElement); }
private void SetupRenderElement(MyRenderVoxelBatch batch, MyRender.MyRenderElement renderElement) { renderElement.RenderObject = this; renderElement.VertexDeclaration = MyVertexFormatVoxelSingleMaterial.VertexDeclaration; renderElement.VertexStride = MyVertexFormatVoxelSingleMaterial.Stride; renderElement.VertexCount = batch.VertexCount; renderElement.VertexBuffer = batch.VertexBuffer; renderElement.InstanceBuffer = null; renderElement.IndexBuffer = batch.IndexBuffer; renderElement.IndexStart = 0; if (renderElement.IndexBuffer != null) { renderElement.TriCount = batch.IndexCount / 3; } renderElement.WorldMatrix = m_worldMatrix; renderElement.WorldMatrix.Translation += m_metadata.PositionOffset; renderElement.VoxelBatch = batch; }
public void AddModel(MyLodTypeEnum lod, MyRender.MyRenderElement renderElement) { var matDict = Models[GetModelIndex(lod, renderElement.DrawTechnique)]; ModelMaterialSet vbDict; if (!matDict.Models.TryGetValue(renderElement.Material, out vbDict)) { vbDict = new ModelMaterialSet(); matDict.Models[renderElement.Material] = vbDict; } List <MyRender.MyRenderElement> elements; if (!vbDict.Models.TryGetValue(renderElement.VertexBuffer, out elements)) { elements = new List <MyRender.MyRenderElement>(20); vbDict.Models[renderElement.VertexBuffer] = elements; } matDict.RenderElementCount++; vbDict.RenderElementCount++; elements.Add(renderElement); }