public override void Validate(TechniqueKey key) { base.Validate(key); if (LightingMethod == null) { LightingMethod = new PhongLighting(); } LightingMethod.ActivateSignature(key); LightingMethod.SetFlag(SpecularFlag, Specular); LightingMethod.SetFlag(DiffuseMapFlag, DiffuseMap); LightingMethod.SetFlag(CubeMapFlag, CubeMap); LightingMethod.SetFlag(ShadowsFlag, Shadows); if (!Shadows) { return; } shadowMethod = new PCFShadows(); shadowMethod.ActivateSignature(key); LightingMethod.AddReference(new MethodReference(shadowMethod, new[] { MethodBase.Vectors.ShadowProjection, ShadowMapSample.Texture.FullName, ShadowMapSample.Sampler.FullName })); }
private void UpdateLighting() { var ambientColor = lighting.AmbientColor; var diffuseColor = lighting.DiffuseColor; var specularColor = lighting.SpecularColor; var glossCoefficient = lighting.GlossCoefficient; var Ka = lighting.Ka; var Kd = lighting.Kd; var Ks = lighting.Ks; if (isTexturing) { lighting = new PhongTexturizingLighting { AmbientColor = ambientColor, DiffuseColor = diffuseColor, SpecularColor = specularColor, GlossCoefficient = glossCoefficient, Ka = Ka, Kd = Kd, Ks = Ks }; } else { lighting = new PhongLighting { AmbientColor = ambientColor, DiffuseColor = diffuseColor, SpecularColor = specularColor, GlossCoefficient = glossCoefficient, Ka = Ka, Kd = Kd, Ks = Ks }; } }
private void DrawButton_Click(object sender, RoutedEventArgs e) { try { textureEnabled(false); if (model != null) { WriteableBitmap source = new WriteableBitmap(width, height, 96, 96, PixelFormats.Bgra32, null); Bgr24Bitmap bitmap = new Bgr24Bitmap(source); ModelParams modelParams = GetModelsParams(); Model modelMain = model.Clone() as Model; CoordTransformations.TransformFromWorldToView(modelMain, modelParams); if (modelMain.CheckSize(width, height)) { Color color = Color.FromRgb(byte.Parse(colorRTextBox.Text), byte.Parse(colorGTextBox.Text), byte.Parse(colorBTextBox.Text)); Vector3 lighting = new Vector3(int.Parse(lightVectorXTextBox.Text), int.Parse(lightVectorYTextBox.Text), -int.Parse(lightVectorZTextBox.Text)); if (bresenhamRadioButton.IsChecked == true) { // lab 1-2 BresenhamAlg bresenham = new BresenhamAlg(bitmap, modelMain); bresenham.DrawModel(color); } else if (plainShadingRadioButton.IsChecked == true) { // lab 3 PlaneShading shader = new PlaneShading(bitmap, modelMain, new LambertLighting(lighting)); shader.DrawModel(color); } else if (phongShadingRadioButton.IsChecked == true) { textureEnabled(true); // затенение фонга Vector3 viewVector = new Vector3(int.Parse(colorRTextBox_View.Text), int.Parse(colorGTextBox_View.Text), int.Parse(colorBTextBox_View.Text)); Vector3 koef_a = new Vector3(float.Parse(colorRTextBox_A.Text), float.Parse(colorGTextBox_A.Text), float.Parse(colorBTextBox_A.Text)); Vector3 koef_d = new Vector3(float.Parse(colorRTextBox_D.Text), float.Parse(colorGTextBox_D.Text), float.Parse(colorBTextBox_D.Text)); Vector3 koef_s = new Vector3(float.Parse(colorRTextBox_S.Text), float.Parse(colorGTextBox_S.Text), float.Parse(colorBTextBox_S.Text)); Vector3 ambientColor = new Vector3(int.Parse(colorRTextBox_Ambient.Text), int.Parse(colorGTextBox_Ambient.Text), int.Parse(colorBTextBox_Ambient.Text)); Vector3 reflectionColor = new Vector3(int.Parse(colorRTextBox_Reflection.Text), int.Parse(colorGTextBox_Reflecion.Text), int.Parse(colorBTextBox_Reflection.Text)); float shiness = float.Parse(shinessBox.Text); bool d = false, n = false, s = false; if ((diffuseCheckBox != null && (bool)diffuseCheckBox.IsChecked)) { d = true; } if ((normalCheckBox != null && (bool)normalCheckBox.IsChecked)) { n = true; } if ((mirrorCheckBox != null && (bool)mirrorCheckBox.IsChecked)) { s = true; } var light = new PhongLighting(lighting, viewVector, koef_a, koef_d, koef_s, ambientColor, reflectionColor, shiness, d, n, s); //var light = new LambertLighting(lighting); PhongShading shader = new PhongShading(bitmap, modelMain, light, d, n, s); shader.DrawModel(color); } screenPictureBox.Source = bitmap.Source; } } else { MessageBox.Show("Load an object"); } } catch (Exception ex) { MessageBox.Show("Произошла ошибка! " + ex); } }