/// <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)
                {
                    var geometry = this.Geometry as MeshGeometry3D;
                    if (geometry != null)
                    {
                        if (geometry.Tangents == null)
                        {
                            //System.Windows.MessageBox.Show(string.Format("No Tangent-Space found. NormalMap will be omitted."), "Warrning", MessageBoxButton.OK);
                            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);
                }
            }
        }
Ejemplo n.º 2
0
            /// <summary>
            /// Creates the material.
            /// </summary>
            /// <param name="texturePath">The texture path.</param>
            /// <returns>A WPF material.</returns>
            private Material CreateMaterial(string texturePath)
            {
                MemoryStream diffuseMapMS = null;

                if (DiffuseMap != null)
                {
                    using (var fs = new FileStream(Path.GetFullPath(Path.Combine(texturePath, "./" + this.DiffuseMap)), FileMode.Open))
                    {
                        diffuseMapMS = new MemoryStream();
                        fs.CopyTo(diffuseMapMS);
                    }
                }
                MemoryStream bumpMapMS = null;

                if (BumpMap != null)
                {
                    using (var fs = new FileStream(Path.GetFullPath(Path.Combine(texturePath, "./" + this.BumpMap)), FileMode.Open))
                    {
                        bumpMapMS = new MemoryStream();
                        fs.CopyTo(bumpMapMS);
                    }
                }
                MemoryStream alphaMapMS = null;

                if (AlphaMap != null)
                {
                    using (var fs = new FileStream(Path.GetFullPath(Path.Combine(texturePath, "./" + this.AlphaMap)), FileMode.Open))
                    {
                        alphaMapMS = new MemoryStream();
                        fs.CopyTo(alphaMapMS);
                    }
                }
                var mat = new PhongMaterial()
                {
                    AmbientColor = this.Ambient,
                    //AmbientMap = this.AmbientMap,

                    DiffuseColor = this.Diffuse,
                    DiffuseMap   = diffuseMapMS,

                    SpecularColor     = this.Specular,
                    SpecularShininess = (float)this.SpecularCoefficient,
                    //SpecularMap = this.SpecularMap,

                    NormalMap       = bumpMapMS,
                    DiffuseAlphaMap = alphaMapMS,
                    //Dissolved = this.Dissolved,
                    //Illumination = this.Illumination,
                };

                //return mg.Children.Count != 1 ? mg : mg.Children[0];
                return(mat);
            }
Ejemplo n.º 3
0
        public ViewBoxModel3D()
        {
            Geometry = defaultBoxModel;
            var map    = new MemoryStream();
            var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("HelixToolkit.Wpf.SharpDX.Textures.DefaultViewboxTexture.jpg");

            stream.CopyTo(map);
            stream.Dispose();
            Material = new PhongMaterial()
            {
                DiffuseColor = Color.White,
                DiffuseMap   = map
            };
            CullMode = CullMode.Back;
        }
        /// <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.phongMaterial   = null;
            this.effectTechnique = null;
            this.vertexLayout    = null;

            base.Detach();
        }
 public EffectMaterialVariables(Effect effect, PhongMaterial material)
 {
     this.material = material;
     this.material.OnMaterialPropertyChanged += Material_OnMaterialPropertyChanged;
     this.vMaterialAmbientVariable            = effect.GetVariableByName("vMaterialAmbient").AsVector();
     this.vMaterialDiffuseVariable            = effect.GetVariableByName("vMaterialDiffuse").AsVector();
     this.vMaterialEmissiveVariable           = effect.GetVariableByName("vMaterialEmissive").AsVector();
     this.vMaterialSpecularVariable           = effect.GetVariableByName("vMaterialSpecular").AsVector();
     this.vMaterialReflectVariable            = effect.GetVariableByName("vMaterialReflect").AsVector();
     this.sMaterialShininessVariable          = effect.GetVariableByName("sMaterialShininess").AsScalar();
     this.bHasDiffuseMapVariable              = effect.GetVariableByName("bHasDiffuseMap").AsScalar();
     this.bHasDiffuseAlphaMapVariable         = effect.GetVariableByName("bHasAlphaMap").AsScalar();
     this.bHasNormalMapVariable       = effect.GetVariableByName("bHasNormalMap").AsScalar();
     this.bHasDisplacementMapVariable = effect.GetVariableByName("bHasDisplacementMap").AsScalar();
     this.bHasShadowMapVariable       = effect.GetVariableByName("bHasShadowMap").AsScalar();
     this.texDiffuseMapVariable       = effect.GetVariableByName("texDiffuseMap").AsShaderResource();
     this.texNormalMapVariable        = effect.GetVariableByName("texNormalMap").AsShaderResource();
     this.texDisplacementMapVariable  = effect.GetVariableByName("texDisplacementMap").AsShaderResource();
     this.texShadowMapVariable        = effect.GetVariableByName("texShadowMap").AsShaderResource();
     this.texDiffuseAlphaMapVariable  = effect.GetVariableByName("texAlphaMap").AsShaderResource();
 }
Ejemplo n.º 6
0
            /// <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 : new FileStream(Path.GetFullPath(Path.Combine(texturePath, "./" + this.DiffuseMap)), FileMode.Open),

                    SpecularColor     = this.Specular,
                    SpecularShininess = (float)this.SpecularCoefficient,
                    //SpecularMap = this.SpecularMap,

                    NormalMap = (this.BumpMap == null) ? null : new FileStream(Path.GetFullPath(Path.Combine(texturePath, "./" + this.BumpMap)), FileMode.Open),
                    //Dissolved = this.Dissolved,
                    //Illumination = this.Illumination,
                };

                //return mg.Children.Count != 1 ? mg : mg.Children[0];
                return(mat);
            }
Ejemplo n.º 7
0
            /// <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);
            }
        /// <summary>
        /// 
        /// </summary>
        protected virtual void AttachMaterial()
        {
            this.phongMaterial = Material as PhongMaterial;
            if (phongMaterial != null)
            {
                this.effectMaterial = new EffectMaterialVariables(this.effect);

                /// --- has texture
                if (phongMaterial.DiffuseMap != null)
                {
                    this.texDiffuseMapView = new ShaderResourceView(Device,TextureLoader.CreateTexture2DFromMediaBitamp(this.Device, phongMaterial.DiffuseMap));// 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)
                {
                    var geometry = this.Geometry as MeshGeometry3D;
                    if (geometry != null)
                    {
                        if (geometry.Tangents == null)
                        {
                            //System.Windows.MessageBox.Show(string.Format("No Tangent-Space found. NormalMap will be omitted."), "Warrning", MessageBoxButton.OK);
                            phongMaterial.NormalMap = null;
                        }
                        else
                        {
                            this.texNormalMapView = new ShaderResourceView(Device, TextureLoader.CreateTexture2DFromMediaBitamp(this.Device, phongMaterial.NormalMap));
                            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 = new ShaderResourceView(Device, TextureLoader.CreateTexture2DFromMediaBitamp(this.Device, phongMaterial.DisplacementMap));
                    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.phongMaterial = null;
            this.effectTechnique = null;
            this.vertexLayout = null;

            base.Detach();
        }
Ejemplo n.º 10
0
        private void AggregateRenderPackages(PackageAggregationParams parameters)
        {
            //Clear the geometry values before adding the package.
            VisualizationManager_WorkspaceOpenedClosedHandled();

            foreach (var rp in parameters.Packages)
            {
                //Node ID gets updated with a ":" everytime this function is called.
                //For example, if the same point node is called multiple times (CBN), the ID has a ":"
                //and this makes the dictionary to have multiple entries for the same node. 
                var baseId = rp.Description;
                if (baseId.IndexOf(":", StringComparison.Ordinal) > 0)
                {
                    baseId = baseId.Split(':')[0];
                }
                var id = baseId;

                var p = rp.Points;
                if (p.Positions.Any())
                {
                    id = baseId + ":points";

                    PointGeometryModel3D pointGeometry3D;

                    if (model3DDictionary.ContainsKey(id))
                    {
                        pointGeometry3D = model3DDictionary[id] as PointGeometryModel3D;
                    }
                    else
                    {
                        pointGeometry3D = new PointGeometryModel3D
                        {
                            Geometry = HelixRenderPackage.InitPointGeometry(),
                            Transform = Model1Transform,
                            Color = SharpDX.Color.White,
                            Figure = PointGeometryModel3D.PointFigure.Ellipse,
                            Size = DefaultPointSize,
                            IsHitTestVisible = true,
                            IsSelected = rp.IsSelected
                        };
                        model3DDictionary.Add(id, pointGeometry3D);
                    }

                    var points = pointGeometry3D.Geometry as PointGeometry3D;
                    var startIdx = points.Positions.Count;

                    points.Positions.AddRange(p.Positions);
                    points.Colors.AddRange(p.Colors.Any() ? p.Colors : Enumerable.Repeat(defaultPointColor, points.Positions.Count));
                    points.Indices.AddRange(p.Indices.Select(i => i + startIdx));

                    if (rp.DisplayLabels)
                    {
                        var pt = p.Positions[0];
                        parameters.Text.TextInfo.Add(new TextInfo(HelixRenderPackage.CleanTag(rp.Description), new Vector3(pt.X + 0.025f, pt.Y + 0.025f, pt.Z + 0.025f)));
                        Text = parameters.Text;
                    }

                    pointGeometry3D.Geometry = points;
                    pointGeometry3D.Name = baseId;
                    pointGeometry3D.MouseDown3D += meshGeometry3D_MouseDown3D;
                }

                var l = rp.Lines;
                if (l.Positions.Any())
                {
                    id = baseId + ":lines";

                    LineGeometryModel3D lineGeometry3D;

                    if (model3DDictionary.ContainsKey(id))
                    {
                        lineGeometry3D = model3DDictionary[id] as LineGeometryModel3D;
                    }
                    else
                    {
                        lineGeometry3D = new LineGeometryModel3D()
                        {
                            Geometry = HelixRenderPackage.InitLineGeometry(),
                            Transform = Model1Transform,
                            Color = SharpDX.Color.White,
                            Thickness = 0.5,
                            IsHitTestVisible = true,
                            IsSelected = rp.IsSelected
                        };

                        model3DDictionary.Add(id, lineGeometry3D);
                    }

                    var lineSet = lineGeometry3D.Geometry as LineGeometry3D;
                    var startIdx = lineSet.Positions.Count;

                    lineSet.Positions.AddRange(l.Positions);
                    lineSet.Colors.AddRange(l.Colors.Any() ? l.Colors : Enumerable.Repeat(defaultLineColor, l.Positions.Count));
                    lineSet.Indices.AddRange(l.Indices.Any() ? l.Indices.Select(i => i + startIdx) : Enumerable.Range(startIdx, startIdx + l.Positions.Count));

                    if (rp.DisplayLabels)
                    {
                        var pt = lineSet.Positions[startIdx];
                        parameters.Text.TextInfo.Add(new TextInfo(HelixRenderPackage.CleanTag(rp.Description), new Vector3(pt.X + 0.025f, pt.Y + 0.025f, pt.Z + 0.025f)));
                        Text = parameters.Text;
                    }

                    lineGeometry3D.Geometry = lineSet;
                    lineGeometry3D.Name = baseId;
                    lineGeometry3D.MouseDown3D += meshGeometry3D_MouseDown3D;
                }

                var m = rp.Mesh;
                if (!m.Positions.Any()) continue;

                id = ((rp.RequiresPerVertexColoration || rp.Colors != null) ? rp.Description : baseId) + ":mesh";

                DynamoGeometryModel3D meshGeometry3D;

                if (model3DDictionary.ContainsKey(id))
                {
                    meshGeometry3D = model3DDictionary[id] as DynamoGeometryModel3D;
                }
                else
                {
                    meshGeometry3D = new DynamoGeometryModel3D()
                    {
                        Transform = Model1Transform,
                        Material = WhiteMaterial,
                        IsHitTestVisible = true,
                        RequiresPerVertexColoration = rp.RequiresPerVertexColoration,
                        IsSelected = rp.IsSelected,
                    };
                    
                    if (rp.Colors != null)
                    {
                        var pf = PixelFormats.Bgra32;
                        var stride = (rp.ColorsStride / 4 * pf.BitsPerPixel + 7) / 8;
                        try
                        {
                            var diffMap = BitmapSource.Create(rp.ColorsStride/4, rp.Colors.Count()/rp.ColorsStride, 96.0, 96.0, pf, null,
                                rp.Colors.ToArray(), stride);
                            var diffMat = new PhongMaterial
                            {
                                Name = "White",
                                AmbientColor = PhongMaterials.ToColor(0.1, 0.1, 0.1, 1.0),
                                DiffuseColor = materialColor,
                                SpecularColor = PhongMaterials.ToColor(0.0225, 0.0225, 0.0225, 1.0),
                                EmissiveColor = PhongMaterials.ToColor(0.0, 0.0, 0.0, 1.0),
                                SpecularShininess = 12.8f,
                                DiffuseMap = diffMap
                            };
                            meshGeometry3D.Material = diffMat;
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.Message);
                            Console.WriteLine(ex.StackTrace);
                        }
                    }
                    ((MaterialGeometryModel3D) meshGeometry3D).SelectionColor = selectionColor; 
                    model3DDictionary.Add(id, meshGeometry3D);
                }

                var mesh = meshGeometry3D.Geometry == null ? HelixRenderPackage.InitMeshGeometry() : meshGeometry3D.Geometry as MeshGeometry3D;
                var idxCount = mesh.Positions.Count;

                mesh.Positions.AddRange(m.Positions);

                mesh.Colors.AddRange(m.Colors);
                mesh.Normals.AddRange(m.Normals);
                mesh.TextureCoordinates.AddRange(m.TextureCoordinates);
                mesh.Indices.AddRange(m.Indices.Select(i => i + idxCount));

                if (mesh.Colors.Any(c => c.Alpha < 1.0))
                {
                    meshGeometry3D.HasTransparency = true;
                }

                if (rp.DisplayLabels)
                {
                    var pt = mesh.Positions[idxCount];
                    parameters.Text.TextInfo.Add(new TextInfo(HelixRenderPackage.CleanTag(rp.Description), new Vector3(pt.X + 0.025f, pt.Y + 0.025f, pt.Z + 0.025f)));
                    Text = parameters.Text;
                }

                meshGeometry3D.Geometry = mesh;
                meshGeometry3D.Name = baseId; 
                meshGeometry3D.MouseDown3D += meshGeometry3D_MouseDown3D;
            }

            Attach();
        }
Ejemplo n.º 11
0
        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;
        }
Ejemplo n.º 12
0
        private void SetupScene()
        {
            var ptColor = (Color)SharedDictionaryManager.DynamoColorsAndBrushesDictionary["PointColor"];
            defaultPointColor = new Color4(ptColor.R/255.0f, ptColor.G/255.0f, ptColor.B/255.0f, ptColor.A/255.0f);

            var lineColor = (Color)SharedDictionaryManager.DynamoColorsAndBrushesDictionary["EdgeColor"];
            defaultLineColor = new Color4(lineColor.R/255.0f, lineColor.G/255.0f, lineColor.B/255.0f, lineColor.A/255.0f);

            directionalLightColor = new Color4(0.9f, 0.9f, 0.9f, 1.0f);
            directionalLightDirection = new Vector3(-0.5f, -1.0f, 0.0f);

            var matColor = (Color)SharedDictionaryManager.DynamoColorsAndBrushesDictionary["MaterialColor"];
            materialColor = new Color4(matColor.R/255.0f, matColor.G/255.0f, matColor.B/255.0f, matColor.A/255.0f);
            
            RenderTechnique = Techniques.RenderDynamo;

            WhiteMaterial = new PhongMaterial
            {
                Name = "White",
                AmbientColor = PhongMaterials.ToColor(0.1, 0.1, 0.1, 1.0),
                DiffuseColor = materialColor,
                SpecularColor = PhongMaterials.ToColor(0.0225, 0.0225, 0.0225, 1.0),
                EmissiveColor = PhongMaterials.ToColor(0.0, 0.0, 0.0, 1.0),
                SpecularShininess = 12.8f,
            };

            var selColor = (Color)SharedDictionaryManager.DynamoColorsAndBrushesDictionary["SelectionColor"];
            selectionColor = new Color4(selColor.R/255.0f, selColor.G/255.0f, selColor.B/255.0f, selColor.A/255.0f);
            SelectedMaterial = new PhongMaterial
            {
                Name = "White",
                AmbientColor = PhongMaterials.ToColor(0.1, 0.1, 0.1, 1.0),
                DiffuseColor = selectionColor,
                SpecularColor = PhongMaterials.ToColor(0.0225, 0.0225, 0.0225, 1.0),
                EmissiveColor = PhongMaterials.ToColor(0.0, 0.0, 0.0, 1.0),
                SpecularShininess = 12.8f,
            };

            Model1Transform = new TranslateTransform3D(0, -0, 0);
            
            // camera setup
            Camera = new PerspectiveCamera
            {
                UpDirection = new Vector3D(0, 1, 0),
                FarPlaneDistance = 10000000,
            };

            ResetCamera();

            DrawGrid();
        }
Ejemplo n.º 13
0
            /// <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;
            }
Ejemplo n.º 14
0
        private DynamoGeometryModel3D CreateDynamoGeometryModel3D(HelixRenderPackage rp)
        {
            var meshGeometry3D = new DynamoGeometryModel3D()
            {
                Transform = Model1Transform,
                Material = WhiteMaterial,
                IsHitTestVisible = true,
                RequiresPerVertexColoration = rp.RequiresPerVertexColoration,
                IsSelected = rp.IsSelected,
            };

            if (rp.Colors != null)
            {
                var pf = PixelFormats.Bgra32;
                var stride = (rp.ColorsStride / 4 * pf.BitsPerPixel + 7) / 8;
                try
                {
                    var diffMap = BitmapSource.Create(rp.ColorsStride / 4, rp.Colors.Count() / rp.ColorsStride, 96.0, 96.0, pf, null,
                        rp.Colors.ToArray(), stride);
                    var diffMat = new PhongMaterial
                    {
                        Name = "White",
                        AmbientColor = PhongMaterials.ToColor(0.1, 0.1, 0.1, 1.0),
                        DiffuseColor = defaultMaterialColor,
                        SpecularColor = PhongMaterials.ToColor(0.0225, 0.0225, 0.0225, 1.0),
                        EmissiveColor = PhongMaterials.ToColor(0.0, 0.0, 0.0, 1.0),
                        SpecularShininess = 12.8f,
                        DiffuseMap = diffMap
                    };
                    meshGeometry3D.Material = diffMat;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.WriteLine(ex.StackTrace);
                }
            }
            ((MaterialGeometryModel3D)meshGeometry3D).SelectionColor = defaultSelectionColor;

            return meshGeometry3D;
        }
Ejemplo n.º 15
0
        private void SetupScene()
        {
            RenderTechnique = Techniques.RenderDynamo;

            WhiteMaterial = new PhongMaterial
            {
                Name = "White",
                AmbientColor = PhongMaterials.ToColor(0.1, 0.1, 0.1, 1.0),
                DiffuseColor = defaultMaterialColor,
                SpecularColor = PhongMaterials.ToColor(0.0225, 0.0225, 0.0225, 1.0),
                EmissiveColor = PhongMaterials.ToColor(0.0, 0.0, 0.0, 1.0),
                SpecularShininess = 12.8f,
            };

            SelectedMaterial = new PhongMaterial
            {
                Name = "White",
                AmbientColor = PhongMaterials.ToColor(0.1, 0.1, 0.1, 1.0),
                DiffuseColor = defaultSelectionColor,
                SpecularColor = PhongMaterials.ToColor(0.0225, 0.0225, 0.0225, 1.0),
                EmissiveColor = PhongMaterials.ToColor(0.0, 0.0, 0.0, 1.0),
                SpecularShininess = 12.8f,
            };

            Model1Transform = new TranslateTransform3D(0, -0, 0);

            // camera setup
            Camera = new PerspectiveCamera();

            SetCameraData(new CameraData());

            DrawGrid();
        }
Ejemplo n.º 16
0
    /// <summary>
    /// reads the Material of a chunck
    /// </summary>
    /// <param name="reader"></param>
    /// <param name="chunkSize"></param>
    private void ReadMaterial(BinaryReader reader,int chunkSize)
    {
      int total = 6;
      string name = null;
      var luminance = Color.Transparent; //SharpDX.Color not System.Windows.Media.Color
      var diffuse = Color.Transparent;
      var specular = Color.Transparent;
      var shininess = Color.Transparent;
      string texture = null;
      while (total < chunkSize)
      {
        ChunkID id = this.ReadChunkId(reader);
        int size = this.ReadChunkSize(reader);
        total += size;
        switch (id)
        {
          case ChunkID.MAT_NAME01:
            name = this.ReadString(reader);
            break;
          case ChunkID.MAT_LUMINANCE:
            luminance = this.ReadColor(reader);
            break;
          case ChunkID.MAT_DIFFUSE:
            diffuse = this.ReadColor(reader);
            break;
          case ChunkID.MAT_SPECULAR:
            specular = this.ReadColor(reader);
            break;
          case ChunkID.MAT_SHININESS:
            byte[] bytes = this.ReadData(reader, size - 6);
            break;
          case ChunkID.MAT_MAP:
            texture = this.ReadMatMap(reader, size - 6);
            break;
          case ChunkID.MAT_MAPFILE:
            this.ReadData(reader, size - 6);
            break;

          default:
            this.ReadData(reader, size - 6);
            break;
        }
      }
      int specularPower = 100;//check if we can find this somewhere instead of just setting it to 100 
      BitmapSource image = ReadBitmapSoure(texture, diffuse);


      var material = new PhongMaterial()
      {
        DiffuseColor = diffuse,
        AmbientColor = luminance, //not really sure about this, lib3ds uses 0xA010 as AmbientColor
        SpecularColor = specular,
        SpecularShininess = specularPower,
        
        
        
        
      };
      if(image!= null)
      {
        material.NormalMap = image;
      }
      if (name != null)
      {
        materials[name] = material;
      }

    }
Ejemplo n.º 17
0
        /// <summary>
        /// reads the Material of a chunck
        /// </summary>
        /// <param name="reader"></param>
        /// <param name="chunkSize"></param>
        private void ReadMaterial(BinaryReader reader, int chunkSize)
        {
            int    total     = 6;
            string name      = null;
            var    luminance = Color.Transparent; //SharpDX.Color not System.Windows.Media.Color
            var    diffuse   = Color.Transparent;
            var    specular  = Color.Transparent;
            var    shininess = Color.Transparent;
            string texture   = null;

            while (total < chunkSize)
            {
                ChunkID id   = this.ReadChunkId(reader);
                int     size = this.ReadChunkSize(reader);
                total += size;
                switch (id)
                {
                case ChunkID.MAT_NAME01:
                    name = this.ReadString(reader);
                    break;

                case ChunkID.MAT_LUMINANCE:
                    luminance = this.ReadColor(reader);
                    break;

                case ChunkID.MAT_DIFFUSE:
                    diffuse = this.ReadColor(reader);
                    break;

                case ChunkID.MAT_SPECULAR:
                    specular = this.ReadColor(reader);
                    break;

                case ChunkID.MAT_SHININESS:
                    byte[] bytes = this.ReadData(reader, size - 6);
                    break;

                case ChunkID.MAT_MAP:
                    texture = this.ReadMatMap(reader, size - 6);
                    break;

                case ChunkID.MAT_MAPFILE:
                    this.ReadData(reader, size - 6);
                    break;

                default:
                    this.ReadData(reader, size - 6);
                    break;
                }
            }
            int          specularPower = 100;//check if we can find this somewhere instead of just setting it to 100
            BitmapSource image         = ReadBitmapSoure(texture, diffuse);


            var material = new PhongMaterial()
            {
                DiffuseColor      = diffuse,
                AmbientColor      = luminance, //not really sure about this, lib3ds uses 0xA010 as AmbientColor
                SpecularColor     = specular,
                SpecularShininess = specularPower,
            };

            if (image != null)
            {
                material.NormalMap = image;
            }
            if (name != null)
            {
                materials[name] = material;
            }
        }