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;
        }
Esempio n. 2
0
 public void Add(MyLodTypeEnum lod, MyRender.MyRenderElement renderElement)
 {
     if (renderElement.DrawTechnique == MyMeshDrawTechnique.VOXEL_MAP)
     {
         AddVoxel(lod, renderElement);
     }
     else
     {
         AddModel(lod, renderElement);
     }
 }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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;
        }
Esempio n. 5
0
        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);
        }