public void UpdateVoxelTextures(MyMwcVoxelMaterialsEnum material) { m_multimaterial = false; // Get with lazy-load MyVoxelMaterial voxelMaterial = MyVoxelMaterials.Get(material); MyVoxelMaterialTextures voxelTexture = voxelMaterial.GetTextures(); if (MyRender.DebugDiffuseTexture) { m_D3DEffect.SetTexture(m_textureDiffuseForAxisXZ, (Texture)MyRender.GetDebugTexture()); m_D3DEffect.SetTexture(m_textureDiffuseForAxisY, (Texture)MyRender.GetDebugTexture()); } else { m_D3DEffect.SetTexture(m_textureDiffuseForAxisXZ, (Texture)voxelTexture.TextureDiffuseForAxisXZ); m_D3DEffect.SetTexture(m_textureDiffuseForAxisY, (Texture)voxelTexture.TextureDiffuseForAxisY); } if (MyRender.DebugNormalTexture) { m_D3DEffect.SetTexture(m_textureNormalMapForAxisXZ, (Texture)MyRender.GetDebugNormalTexture()); m_D3DEffect.SetTexture(m_textureNormalMapForAxisY, (Texture)MyRender.GetDebugNormalTexture()); } else { m_D3DEffect.SetTexture(m_textureNormalMapForAxisXZ, (Texture)voxelTexture.TextureNormalMapForAxisXZ); m_D3DEffect.SetTexture(m_textureNormalMapForAxisY, (Texture)voxelTexture.TextureNormalMapForAxisY); } m_D3DEffect.SetValue(m_specularIntensity, voxelMaterial.SpecularIntensity); m_D3DEffect.SetValue(m_specularPower, voxelMaterial.SpecularPower); }
private void SetupRenderElements(MyModel model, Matrix worldMatrix, int materialIndex = 0, bool staticAsteroid = false) { model.LoadInDraw(); var meshList = model.GetMeshList(); foreach (MyMesh mesh in meshList) { if (materialIndex > mesh.Materials.Length - 1) { materialIndex = 0; } var material = staticAsteroid ? MyVoxelMaterials.GetMaterialForMesh(FakeEntity.VoxelMaterial) : mesh.Materials[materialIndex]; material.PreloadTexture(Managers.LoadingMode.Immediate); if (material.DrawTechnique == MyMeshDrawTechnique.DECAL) { continue; } if (staticAsteroid && material.DrawTechnique == MyMeshDrawTechnique.MESH) { material.DrawTechnique = MyMeshDrawTechnique.VOXELS_STATIC_ASTEROID; } //Do not use render alocator, it will reuse elements MyRender.MyRenderElement renderElement = new MyRender.MyRenderElement(); //MyRender.AllocateRenderElement(out renderElement); renderElement.Entity = FakeEntity; renderElement.VertexBuffer = model.VertexBuffer; renderElement.IndexBuffer = model.IndexBuffer; renderElement.IndexStart = mesh.IndexStart; renderElement.TriCount = mesh.TriCount; //renderElement.UseChannels = false; renderElement.WorldMatrixForDraw = worldMatrix; renderElement.WorldMatrix = worldMatrix; renderElement.Material = material; renderElement.DrawTechnique = material.DrawTechnique; renderElement.VoxelBatch = null; if (material.DrawTechnique == MyMeshDrawTechnique.HOLO) { m_setup.TransparentRenderElementsToDraw.Add(renderElement); } else { m_setup.RenderElementsToDraw.Add(renderElement); } } }
/// <summary> /// Inits the specified hud label text. /// </summary> /// <param name="hudLabelText">The hud label text.</param> /// <param name="objectBuilder">The object builder.</param> public void Init(string hudLabelText, MyMwcObjectBuilder_StaticAsteroid objectBuilder, Matrix matrix) { MyStaticAsteroidModels models = GetModelsFromType(objectBuilder.AsteroidType); StringBuilder hudLabelTextSb = (hudLabelText == null) ? null : new StringBuilder(hudLabelText); if (objectBuilder.Generated) { Flags &= ~EntityFlags.EditableInEditor; Flags &= ~EntityFlags.NeedsId; } else { Flags |= EntityFlags.EditableInEditor; Flags |= EntityFlags.NeedsId; } CastShadows = !objectBuilder.Generated; if (!objectBuilder.AsteroidMaterial1.HasValue && MySector.Area.HasValue) { var area = MySolarSystemConstants.Areas[MySector.Area.Value]; objectBuilder.AsteroidMaterial1 = area.SecondaryStaticAsteroidMaterial; objectBuilder.FieldDir = MinerWars.AppCode.Game.GUI.MyGuiScreenGamePlay.Static.GetDirectionToSunNormalized(); } NeedsUpdate = false; Init(hudLabelTextSb, models.LOD0, models.LOD1, null, null, objectBuilder, null, models.LOD2); AsteroidType = objectBuilder.AsteroidType; SetWorldMatrix(matrix); FieldDir = objectBuilder.FieldDir; if (objectBuilder.AsteroidMaterial.HasValue) { VoxelMaterial = objectBuilder.AsteroidMaterial.Value; VoxelMaterial1 = objectBuilder.AsteroidMaterial1; m_drawTechnique = MyMeshDrawTechnique.VOXELS_STATIC_ASTEROID; } if (objectBuilder.UseModelTechnique) { m_meshMaterial = MyVoxelMaterials.GetMaterialForMesh(VoxelMaterial); m_drawTechnique = MyMeshDrawTechnique.MESH; } InitDrawTechniques(); InitPhysics(); MyModels.OnContentLoaded += InitDrawTechniques; InitDrawTechniques(); }
public static void LoadContent() { MinerWars.AppCode.Game.Render.MyRender.GetRenderProfiler().StartProfilingBlock("MyDebrisField.LoadContent"); MyVoxelMaterial voxelMaterial = MyVoxelMaterials.Get(MyMwcVoxelMaterialsEnum.Indestructible_01); MyVoxelMaterialTextures voxelTexture = voxelMaterial.GetTextures(); MinerWars.AppCode.Game.Render.MyRender.GetRenderProfiler().EndProfilingBlock(); }
public void UpdateVoxelMultiTextures(MyMwcVoxelMaterialsEnum mat0, MyMwcVoxelMaterialsEnum?mat1, MyMwcVoxelMaterialsEnum?mat2) { m_multimaterial = false; // Get with lazy-load // Material 0 MyVoxelMaterial voxelMaterial = MyVoxelMaterials.Get(mat0); MyVoxelMaterialTextures voxelTexture = voxelMaterial.GetTextures(); m_D3DEffect.SetTexture(m_textureDiffuseForAxisXZ, (Texture)voxelTexture.TextureDiffuseForAxisXZ); m_D3DEffect.SetTexture(m_textureNormalMapForAxisXZ, (Texture)voxelTexture.TextureNormalMapForAxisXZ); m_D3DEffect.SetTexture(m_textureDiffuseForAxisY, (Texture)voxelTexture.TextureDiffuseForAxisY); m_D3DEffect.SetTexture(m_textureNormalMapForAxisY, (Texture)voxelTexture.TextureNormalMapForAxisY); m_D3DEffect.SetValue(m_specularIntensity, voxelMaterial.SpecularIntensity); m_D3DEffect.SetValue(m_specularPower, voxelMaterial.SpecularPower); // Material 1 if (mat1.HasValue) { m_multimaterial = true; MyVoxelMaterial voxelMaterial2 = MyVoxelMaterials.Get(mat1.Value); MyVoxelMaterialTextures voxelTexture2 = voxelMaterial2.GetTextures(); m_D3DEffect.SetTexture(m_textureDiffuseForAxisXZ2, (Texture)voxelTexture2.TextureDiffuseForAxisXZ); m_D3DEffect.SetTexture(m_textureNormalMapForAxisXZ2, (Texture)voxelTexture2.TextureNormalMapForAxisXZ); m_D3DEffect.SetTexture(m_textureDiffuseForAxisY2, (Texture)voxelTexture2.TextureDiffuseForAxisY); m_D3DEffect.SetTexture(m_textureNormalMapForAxisY2, (Texture)voxelTexture2.TextureNormalMapForAxisY); m_D3DEffect.SetValue(m_specularIntensity2, voxelMaterial2.SpecularIntensity); m_D3DEffect.SetValue(m_specularPower2, voxelMaterial2.SpecularPower); } // Material 2 if (mat2.HasValue) { m_multimaterial = true; MyVoxelMaterial voxelMaterial3 = MyVoxelMaterials.Get(mat2.Value); MyVoxelMaterialTextures voxelTexture3 = voxelMaterial3.GetTextures(); m_D3DEffect.SetTexture(m_textureDiffuseForAxisXZ3, (Texture)voxelTexture3.TextureDiffuseForAxisXZ); m_D3DEffect.SetTexture(m_textureNormalMapForAxisXZ3, (Texture)voxelTexture3.TextureNormalMapForAxisXZ); m_D3DEffect.SetTexture(m_textureDiffuseForAxisY3, (Texture)voxelTexture3.TextureDiffuseForAxisY); m_D3DEffect.SetTexture(m_textureNormalMapForAxisY3, (Texture)voxelTexture3.TextureNormalMapForAxisY); m_D3DEffect.SetValue(m_specularIntensity3, voxelMaterial3.SpecularIntensity); m_D3DEffect.SetValue(m_specularPower3, voxelMaterial3.SpecularPower); } }
public override void RecreateControls(bool contructor) { Controls.Clear(); m_scale = 0.7f; AddCaption(new System.Text.StringBuilder("Render Model FX"), Color.Yellow.ToVector4()); MyGuiControlLabel label = new MyGuiControlLabel(this, new Vector2(0.01f, -m_size.Value.Y / 2.0f + 0.07f), null, new System.Text.StringBuilder("(press ALT to share focus)"), Color.Yellow.ToVector4(), MyGuiConstants.LABEL_TEXT_SCALE * 0.7f, MyGuiDrawAlignEnum.HORISONTAL_CENTER_AND_VERTICAL_TOP); Controls.Add(label); m_currentPosition = -m_size.Value / 2.0f + new Vector2(0.02f, 0.10f); m_currentPosition.Y += 0.01f; /* * AddLabel(new StringBuilder("Channels"), Color.Yellow.ToVector4(), 1.2f); * AddSlider(new StringBuilder("Channel0"), 0, 1.0f, null, MemberHelper.GetMember(() => MyRender.Channel0Intensity)); * AddSlider(new StringBuilder("Channel1"), 0, 1.0f, null, MemberHelper.GetMember(() => MyRender.Channel1Intensity)); */ AddLabel(new StringBuilder("Environmental maps"), Color.Yellow.ToVector4(), 1.2f); AddSlider(new StringBuilder("LOD0 max distance"), 50.0f, 1000.0f, null, MemberHelper.GetMember(() => MyEnvironmentMap.NearDistance)); AddSlider(new StringBuilder("LOD1 max distance"), 50.0f, 1000.0f, null, MemberHelper.GetMember(() => MyEnvironmentMap.FarDistance)); AddButton(new StringBuilder("Rebuild"), delegate { MyEnvironmentMap.Reset(); }); var listbox = AddListbox(); listbox.ItemSelect += new OnListboxItemSelect(listbox_ItemSelect); listbox.AddItem(-1, new StringBuilder("None")); for (int i = 0; i < MyVoxelMaterials.GetMaterialsCount(); i++) { MyMwcVoxelMaterialsEnum mat = (MyMwcVoxelMaterialsEnum)i; listbox.AddItem((int)mat, new StringBuilder(mat.ToString())); } listbox.SetSelectedItem(-1); }