private static T CreateEffect <T>(Device device) where T : EffectBase11 { const string fxFieldName = "FxFileName"; var t = typeof(T); var fxFieldInfo = t.GetField(fxFieldName, BindingFlags.Static | BindingFlags.NonPublic); var fileName = (string)fxFieldInfo.GetValue(null); fileName = NoireConfiguration.GetFullResourcePath(fileName); var constructor = t.GetConstructor(new[] { typeof(Device), typeof(string) }); try { var r = constructor.Invoke(new object[] { device, fileName }); var effect = r as T; effect?.Compile(); return(effect); } catch (FileNotFoundException ex) { Debug.WriteLine(ex.Message); return(null); } }
private void UpdateBufferedSettings() { _settings = _bufferedSettings.Clone(); if (IsInitialized) { _fire.Visible = _settings.ParticleFlameVisible; _rain.Visible = _settings.ParticleRainVisible; var skybox = D3DApp11.I.Skybox; switch (_settings.SkyboxType) { case SkyboxType.None: skybox.CubeMapSRV = null; break; case SkyboxType.Desert: skybox.CubeMapSRV = TextureManager11.Instance.QuickCreateCubeMap("desert"); break; case SkyboxType.Snowfield: skybox.CubeMapSRV = TextureManager11.Instance.QuickCreateCubeMap("snowfield"); break; case SkyboxType.Factory: skybox.CubeMapSRV = TextureManager11.Instance.QuickCreateCubeMap("factory"); break; default: skybox.CubeMapSRV = null; break; } var textureManager = TextureManager11.Instance; string mat; switch (_settings.MaterialType) { case MaterialType.None: mat = null; break; case MaterialType.Copper: mat = "copper"; break; case MaterialType.StainlessSteel: mat = "s_steel"; break; case MaterialType.Aluminium: mat = "aluminium"; break; case MaterialType.Plywood: mat = "plywood"; break; default: mat = null; break; } if (mat != null) { _cylinderModel.DiffuseMapSRV[0] = textureManager.CreateTexture(NoireConfiguration.GetFullResourcePath($"textures/material/{mat}_Base_Color.png")); _cylinderModel.NormalMapSRV[0] = textureManager.CreateTexture(NoireConfiguration.GetFullResourcePath($"textures/material/{mat}_Normal.png")); } else { _cylinderModel.DiffuseMapSRV[0] = null; _cylinderModel.NormalMapSRV[0] = null; } } }
private void BuildShapeGeometryBuffers(Device device) { var textureManager = TextureManager11.Instance; _boxModel = BasicModel.CreateBox(device, 1, 1, 1); _boxModel.Materials[0] = new Material { Ambient = Color.White, Diffuse = Color.White, Specular = new Color(0.8f, 0.8f, 0.8f, 16.0f), Reflect = Color.Black }; _boxModel.DiffuseMapSRV[0] = textureManager.CreateTexture(NoireConfiguration.GetFullResourcePath("textures/bricks.dds")); //_boxModel.DiffuseMapSRV[0] = textureManager.CreateTexture(NoireConfiguration.GetFullResourcePath("textures/metal.jpg")); _boxModel.NormalMapSRV[0] = textureManager.CreateTexture(NoireConfiguration.GetFullResourcePath("textures/bricks_nmap.png")); _gridModel = BasicModel.CreateGrid(device, 80, 120, 40, 60); _gridModel.Materials[0] = new Material { Ambient = new Color(0.8f, 0.8f, 0.8f), Diffuse = new Color(0.8f, 0.8f, 0.8f), Specular = new Color(0.8f, 0.8f, 0.8f, 16.0f), Reflect = Color.Black }; _gridModel.DiffuseMapSRV[0] = textureManager.CreateTexture(NoireConfiguration.GetFullResourcePath("textures/floor.dds")); _gridModel.NormalMapSRV[0] = textureManager.CreateTexture(NoireConfiguration.GetFullResourcePath("textures/floor_nmap.png")); _sphereModel = BasicModel.CreateSphere(device, 0.5f, 20, 20); _sphereModel.Materials[0] = new Material { Ambient = new Color(0.6f, 0.8f, 0.9f), Diffuse = new Color(0.6f, 0.8f, 0.9f), Specular = new Color(0.9f, 0.9f, 0.9f, 16.0f), Reflect = new Color(0.4f, 0.4f, 0.4f) }; _cylinderModel = BasicModel.CreateCylinder(device, 0.5f, 0.3f, 3.0f, 20, 20); _cylinderModel.Materials[0] = new Material { Ambient = Color.White, Diffuse = Color.White, //Specular = new Color(0.3f, 0.3f, 0.3f, 16.0f), // plywood //Specular = new Color(0.8f, 0.8f, 0.8f, 16.0f), // metal, stone Specular = new Color(0.6f, 0.6f, 0.6f, 16.0f), // leather Reflect = Color.Black }; _cylinderModel.DiffuseMapSRV[0] = textureManager.CreateTexture(NoireConfiguration.GetFullResourcePath("textures/material/copper_Base_Color.png")); _cylinderModel.NormalMapSRV[0] = textureManager.CreateTexture(NoireConfiguration.GetFullResourcePath("textures/material/copper_Normal.png")); for (var i = 0; i < 5; i++) { _cylinders[i * 2] = new BasicModelInstance(_cylinderModel) { World = Matrix.Translation(-5.0f, 1.5f, -10.0f + i * 5.0f), TexTransform = Matrix.Scaling(1, 2, 1) }; _cylinders[i * 2 + 1] = new BasicModelInstance(_cylinderModel) { World = Matrix.Translation(5.0f, 1.5f, -10.0f + i * 5.0f), TexTransform = Matrix.Scaling(1, 2, 1) }; _spheres[i * 2] = new BasicModelInstance(_sphereModel) { World = Matrix.Translation(-5.0f, 3.5f, -10.0f + i * 5.0f) }; _spheres[i * 2 + 1] = new BasicModelInstance(_sphereModel) { World = Matrix.Translation(5.0f, 3.5f, -10.0f + i * 5.0f) }; } _grid = new BasicModelInstance(_gridModel) { TexTransform = Matrix.Scaling(32, 40, 1), World = Matrix.Identity }; _box = new BasicModelInstance(_boxModel) { TexTransform = Matrix.Scaling(2, 1, 1), World = Matrix.Scaling(3.0f, 1.0f, 3.0f) * Matrix.Translation(0, 0.5f, 0) }; // MIC const string decelFileDir = @"C:\Users\MIC\Documents\3dsMax\export"; var decelFile = Path.Combine(decelFileDir, "decel.3ds"); _decelModel = BasicModel.Create(device, TextureManager11.Instance, decelFile, decelFileDir); _decelWorld = Matrix.Scaling(8f) * Matrix.Translation(0, 0.6f, 5); // * Matrix.RotationX(MathUtil.DegreesToRadians(-90f)); _decelInstance = new BasicModelInstance(_decelModel) { TexTransform = Matrix.Identity, World = _decelWorld }; const string barbFileDir = @"C:\Users\MIC\Desktop\models\barb01"; var barbFile = Path.Combine(barbFileDir, "barb01.3ds"); _barbModel = BasicModel.Create(device, TextureManager11.Instance, barbFile, barbFileDir); _barbWorld = Matrix.Scaling(0.003f) * Matrix.Translation(0, 1, 0.3f); _barbInstance = new BasicModelInstance(_barbModel) { TexTransform = Matrix.Identity, World = _barbWorld }; const string truckFileDir = @"C:\Users\MIC\Desktop\m4\ea55"; var truckFile = Path.Combine(truckFileDir, "mic.3ds"); _truckModel = BasicModel.Create(device, TextureManager11.Instance, truckFile, truckFileDir); _truckWorld = Matrix.Scaling(0.003f) * Matrix.Translation(0, 8, 2) * Matrix.RotationX(MathUtil.DegreesToRadians(-90f)); _truckInstance = new BasicModelInstance(_truckModel) { TexTransform = Matrix.Identity, World = _truckWorld }; const string tireFileDir = @"C:\Users\MIC\Desktop\models\tire02"; var tireFile = Path.Combine(tireFileDir, "tire02.3ds"); _tireModel = BasicModel.Create(device, TextureManager11.Instance, tireFile, tireFileDir); _tireWorld = Matrix.Scaling(0.003f) * Matrix.Translation(0, 4, 1) * Matrix.RotationX(MathUtil.DegreesToRadians(-90f)); _tireInstance = new BasicModelInstance(_tireModel) { TexTransform = Matrix.Identity, World = _tireWorld }; }
protected override void InitializeInternal() { base.InitializeInternal(); _lightRotationAngle = 0; _sceneBounds = new BoundingSphere(new Vector3(), MathF.Sqrt(40 * 40 + 60 * 60)); _dirLights = new[] { new DirectionalLight { Ambient = new Color(0.2f, 0.2f, 0.2f), Diffuse = new Color(0.7f, 0.7f, 0.7f), Specular = new Color(0.8f, 0.8f, 0.8f), Direction = new Vector3(-0.57735f, -0.57735f, 0.57735f) }, new DirectionalLight { Ambient = new Color(0, 0, 0), Diffuse = new Color(0.4f, 0.4f, 0.4f), Specular = new Color(0.2f, 0.2f, 0.2f), Direction = new Vector3(-0.707f, -0.707f, 0) }, new DirectionalLight { Ambient = new Color(0, 0, 0), Diffuse = new Color(0.2f, 0.2f, 0.2f), Specular = new Color(0.2f, 0.2f, 0.2f), Direction = new Vector3(0, 0, -1) } }; _originalLightDirs = _dirLights.Select(l => l.Direction).ToArray(); var device = D3DApp11.I.D3DDevice; _shadowMap = new ShadowMap(device, ShadowMapSize, ShadowMapSize); BuildShapeGeometryBuffers(device); BuildScreenQuadGeometryBuffers(device); var context = D3DApp11.I.ImmediateContext; _randomTex = TextureLoader.CreateRandomTexture1D(device); _flareTexSRV = TextureLoader.CreateTexture2DArray(device, context, new[] { NoireConfiguration.GetFullResourcePath("textures/flare0.png") }); _fire = new ParticleSource(RootContainer, this, device, EffectManager11.Instance.GetEffect <FireParticleEffect11>(), _flareTexSRV, _randomTex, 500); _fire.Initialize(); _fire.Visible = _settings.ParticleFlameVisible; ChildComponents.Add(_fire); _rainTexSRV = TextureLoader.CreateTexture2DArray(device, context, new[] { NoireConfiguration.GetFullResourcePath("textures/raindrop.png") }); _rain = new ParticleSource(RootContainer, this, device, EffectManager11.Instance.GetEffect <RainParticleEffect11>(), _rainTexSRV, _randomTex, 10000); _rain.Initialize(); _rain.Visible = _settings.ParticleRainVisible; ChildComponents.Add(_rain); var basicFx = EffectManager11.Instance.GetEffect <BasicEffect11>(); var normalMapFx = EffectManager11.Instance.GetEffect <NormalMapEffect11>(); var displacementMapFx = EffectManager11.Instance.GetEffect <DisplacementMapEffect11>(); InitializeTechniqueTable(basicFx, normalMapFx, displacementMapFx); }
public ShaderResourceView QuickCreateCubeMap(string name) { return(CreateCubemap(NoireConfiguration.GetFullResourcePath($"textures/cubemap/{name}.dds"))); }