/// <summary> /// /// </summary> protected void AttachMaterial() { this.phongMaterial = Material as PhongMaterial; if (phongMaterial != null) { this.effectMaterial = new EffectMaterialVariables(this.effect); /// --- has texture if (phongMaterial.DiffuseMap != null) { this.texDiffuseMapView = ShaderResourceView.FromMemory(device, phongMaterial.DiffuseMap.ToByteArray()); this.effectMaterial.texDiffuseMapVariable.SetResource(this.texDiffuseMapView); this.effectMaterial.bHasDiffuseMapVariable.Set(true); } else { this.effectMaterial.bHasDiffuseMapVariable.Set(false); } // --- has bumpmap if (phongMaterial.NormalMap != null) { if (this.geometry.Tangents == null) { System.Windows.MessageBox.Show(string.Format("No Tangent-Space found. NormalMap will be omitted."), "Warning"); phongMaterial.NormalMap = null; } else { this.texNormalMapView = ShaderResourceView.FromMemory(device, phongMaterial.NormalMap.ToByteArray()); this.effectMaterial.texNormalMapVariable.SetResource(this.texNormalMapView); this.effectMaterial.bHasNormalMapVariable.Set(true); } } else { this.effectMaterial.bHasNormalMapVariable.Set(false); } // --- has displacement map if (phongMaterial.DisplacementMap != null) { this.texDisplacementMapView = ShaderResourceView.FromMemory(device, phongMaterial.DisplacementMap.ToByteArray()); this.effectMaterial.texDisplacementMapVariable.SetResource(this.texDisplacementMapView); this.effectMaterial.bHasDisplacementMapVariable.Set(true); } else { this.effectMaterial.bHasDisplacementMapVariable.Set(false); } } }
/// <summary> /// /// </summary> public override void Detach() { Disposer.RemoveAndDispose(ref this.vertexBuffer); Disposer.RemoveAndDispose(ref this.indexBuffer); Disposer.RemoveAndDispose(ref this.instanceBuffer); Disposer.RemoveAndDispose(ref this.effectMaterial); Disposer.RemoveAndDispose(ref this.effectTransforms); Disposer.RemoveAndDispose(ref this.texDiffuseMapView); Disposer.RemoveAndDispose(ref this.texNormalMapView); Disposer.RemoveAndDispose(ref this.texDisplacementMapView); Disposer.RemoveAndDispose(ref this.bHasInstances); this.effectName = null; this.phongMaterial = null; this.geometry = null; this.shaderTechnique = null; this.vertexLayout = null; base.Detach(); }
/// <summary> /// Creates the material. /// </summary> /// <param name="texturePath">The texture path.</param> /// <returns>A WPF material.</returns> private Material CreateMaterial(string texturePath) { var mat = new PhongMaterial() { AmbientColor = this.Ambient, //AmbientMap = this.AmbientMap, DiffuseColor = this.Diffuse, DiffuseMap = (this.DiffuseMap == null) ? null : LoadImage(this.DiffuseMap), SpecularColor = this.Specular, SpecularShininess = (float)this.SpecularCoefficient, //SpecularMap = this.SpecularMap, NormalMap = (this.BumpMap == null) ? null : LoadImage(this.BumpMap), //Dissolved = this.Dissolved, //Illumination = this.Illumination, }; //return mg.Children.Count != 1 ? mg : mg.Children[0]; return(mat); }
private void SetImages(BitmapSource img) { var ratio = img.PixelWidth / (double)img.PixelHeight; var transform = Media3D.Transform3D.Identity; ushort orientation = 1; if (this.ExifReader.GetTagValue(ExifTags.Orientation, out orientation)) { switch (orientation) { default: case 1: // transform = transform.AppendTransform(new Media3D.ScaleTransform3D(ratio, 1.0, 1.0)); break; case 2: //"-flip horizontal";; //transform = Media3D.Transform3D.Identity; break; case 3: //"-rotate 180";; transform = transform.AppendTransform(new Media3D.ScaleTransform3D(ratio, 1.0, 1.0)); transform = transform.AppendTransform(new Media3D.RotateTransform3D(new Media3D.AxisAngleRotation3D(new Vector3D(0, 0, 1), -180))); break; case 4: //"-flip vertical";; //transform = Media3D.Transform3D.Identity; break; case 5: //"-transpose";; //transform = Media3D.Transform3D.Identity; break; case 6: //"-rotate 90";; transform = transform.AppendTransform(new Media3D.ScaleTransform3D(1.0, 1.0 / ratio, 1.0)); transform = transform.AppendTransform(new Media3D.RotateTransform3D(new Media3D.AxisAngleRotation3D(new Vector3D(0, 0, 1), -90))); break; case 7: //"-transverse";; // transform = Media3D.Transform3D.Identity; break; case 8: //"-rotate 270";; transform = transform.AppendTransform(new Media3D.ScaleTransform3D(1.0, 1.0 / ratio, 1.0)); transform = transform.AppendTransform(new Media3D.RotateTransform3D(new Media3D.AxisAngleRotation3D(new Vector3D(0, 0, 1), -270))); break; } this.PlaneTransform = transform; this.GridTransform = transform; } else { if (ratio > 1) { transform = transform.AppendTransform(new Media3D.ScaleTransform3D(ratio, 1.0, 1.0)); this.PlaneTransform = transform; this.GridTransform = PlaneTransform; } else { transform = transform.AppendTransform(new Media3D.ScaleTransform3D(1.0, 1.0 / ratio, 1.0)); this.PlaneTransform = transform; this.GridTransform = PlaneTransform; } } var white = new PhongMaterial() { DiffuseColor = Color.White, AmbientColor = Color.Black, ReflectiveColor = Color.Black, EmissiveColor = Color.Black, SpecularColor = Color.Black, DiffuseMap = img, }; this.PlaneMaterial = white; this.RenderTechnique = Techniques.RenderDiffuse; }
public MainViewModel(Viewport3DX view) { this.view = view; // ---------------------------------------------- // set windows text Title = "Lighting Demo (WPF & SharpDX)"; SubTitle = string.Format("Model: {0}, Number Lights: {1}", RenderTechnique, Light3D.LightCount); // ---------------------------------------------- // camera setup Camera = new PerspectiveCamera { Position = new Point3D(8, 9, 7), LookDirection = new Vector3D(-5, -12, -5), UpDirection = new Vector3D(0, 1, 0) }; // ---------------------------------------------- // setup scene AmbientLightColor = new Color4(0.2f, 0.2f, 0.2f, 1.0f); Light1Color = (Color4)Color.White; Light2Color = (Color4)Color.Red; Light3Color = (Color4)Color.LightYellow; Light4Color = (Color4)Color.LightBlue; Light2Attenuation = new Vector3(1.0f, 0.5f, 0.10f); Light3Attenuation = new Vector3(1.0f, 0.1f, 0.05f); Light4Attenuation = new Vector3(1.0f, 0.2f, 0.0f); Light1Direction = new Vector3(0, -10, -10); Light1Transform = new Media3D.TranslateTransform3D(-Light1Direction.ToVector3D()); Light1DirectionTransform = CreateAnimatedTransform2(-Light1Direction.ToVector3D(), new Vector3D(0, 1, -1), 24); //Light1DirectionTransform = Media3D.Transform3D.Identity;// CreateAnimatedTransform(new Vector3D(0, 1, 0), new Vector3D(1, 0, 1), 8); Light2Transform = CreateAnimatedTransform1(new Vector3D(-4, 0, 0), new Vector3D(0, 0, 1), 3); Light3Transform = CreateAnimatedTransform1(new Vector3D(0, 0, 4), new Vector3D(0, 1, 0), 5); Light4Transform = new Media3D.TranslateTransform3D(new Vector3D(0, 5, 0)); Light4DirectionTransform = CreateAnimatedTransform1(new Vector3D(0, 1, 0), new Vector3D(1, 0, 1), 4); // ---------------------------------------------- // light model3d var sphere = new MeshBuilder(); sphere.AddSphere(new Vector3(0, 0, 0), 0.2); Sphere = sphere.ToMeshGeometry3D(); LightModelMaterial = new PhongMaterial { AmbientColor = Color.Gray, DiffuseColor = Color.Gray, EmissiveColor = Color.Yellow, SpecularColor = Color.Black, }; // ---------------------------------------------- // scene model3d var b1 = new MeshBuilder(true, true, true); b1.AddSphere(new Vector3(0.25f, 0.25f, 0.25f), 0.75, 64, 64); b1.AddBox(-new Vector3(0.25f, 0.25f, 0.25f), 1, 1, 1, BoxFaces.All); b1.AddBox(-new Vector3(5.0f, 0.0f, 0.0f), 1, 1, 1, BoxFaces.All); b1.AddSphere(new Vector3(5f, 0f, 0f), 0.75, 64, 64); b1.AddCylinder(new Vector3(0f, -3f, -5f), new Vector3(0f, 3f, -5f), 1.2, 64); Model = b1.ToMeshGeometry3D(); ModelTransform = new Media3D.TranslateTransform3D(0, 0, 0); ModelMaterial = PhongMaterials.Chrome; //ModelMaterial.TextureMap = new BitmapImage(new System.Uri(@"TextureCheckerboard2.jpg", System.UriKind.RelativeOrAbsolute)); ModelMaterial.NormalMap = new BitmapImage(new System.Uri(@"TextureCheckerboard2_dot3.jpg", System.UriKind.RelativeOrAbsolute)); //odelMaterial.NormalMap = new BitmapImage(new System.Uri(@"TextureNoise1_dot3.jpg", System.UriKind.RelativeOrAbsolute)); // ---------------------------------------------- // floor model3d var b2 = new MeshBuilder(true, true, true); b2.AddBox(new Vector3(0.0f, -5.0f, 0.0f), 15, 0.1, 15, BoxFaces.All); b2.AddSphere(new Vector3(-5.0f, -5.0f, 5.0f), 4, 64, 64); b2.AddCone(new Vector3(6f, -9f, -6f), new Vector3(6f, -1f, -6f), 4f, true, 64); Floor = b2.ToMeshGeometry3D(); FloorTransform = new Media3D.TranslateTransform3D(0, 0, 0); FloorMaterial = new PhongMaterial { AmbientColor = Color.Gray, DiffuseColor = new Color4(0.75f, 0.75f, 0.75f, 1.0f), // Colors.LightGray, SpecularColor = Color.White, SpecularShininess = 100f, DiffuseMap = new BitmapImage(new System.Uri(@"TextureCheckerboard2.jpg", System.UriKind.RelativeOrAbsolute)), NormalMap = new BitmapImage(new System.Uri(@"TextureCheckerboard2_dot3.jpg", System.UriKind.RelativeOrAbsolute)), }; }