Esempio n. 1
0
        public void Draw(Matrix view, Matrix proj)
        {
            if (m_genMesh.m_meshGPU == null)
            {
                return;
            }

            MeshGPU meshGPU = m_genMesh.m_meshGPU;

            if (meshGPU.m_npartsCount < 0)
            {
                return;
            }

            var effect = meshGPU.SingleEffect;

            effect.CurrentTechnique = effect.Techniques["Technique1"];
            effect.Parameters["xWorld"].SetValue(m_worldMtx);
            effect.Parameters["xView"].SetValue(view);
            effect.Parameters["xProjection"].SetValue(proj);


            effect.Parameters["xDirectionalLightDir"].SetValue(LightDir);

            if (m_tex2DBorder != null)
            {
                effect.Parameters["xTexSlot0"].SetValue(m_tex2DBorder);
            }

            if (ShowGridOnVoxel == true)
            {
                effect.Parameters["xGridPower"].SetValue(1.0f);
            }
            else
            {
                effect.Parameters["xGridPower"].SetValue(0.0f);
            }

            // Create a vertex buffer, and copy our vertex data into it.
            GraphicsDevice device = effect.GraphicsDevice;

            device.RasterizerState   = RasterizerState.CullCounterClockwise;// CullClockwise;
            device.DepthStencilState = DepthStencilState.Default;
            device.BlendState        = BlendState.Opaque;

            effect.CurrentTechnique.Passes[0].Apply();  //One pass

            //Draw Grouped by Effect Slot
            for (int i = 0; i < meshGPU.m_npartsCount; i++)
            {
                MeshGPUPart part = meshGPU.m_meshParts[i];

                device.SetVertexBuffer(part.m_gpuVertexBuffer);
                device.Indices = part.m_gpuIndexBuffer;

                device.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, part.m_gpuIndexBuffer.IndexCount / 3);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Create a mesh objet for GPU
        /// </summary>
        /// <returns></returns>
        public void CreateGPUMesh(GraphicsDevice _gd, bool _bComputeBounds)
        {
            if (m_meshGPU == null)
            {
                m_meshGPU = new MeshGPU();
            }

            m_meshGPU.FromGenMesh(_gd, this, _bComputeBounds);

            m_bGPUDirty = false;
        }