public Rbfx_RandomBoxes(Node RootNode)
        {
            var boxesNode = RootNode.CreateChild("Boxes");

            boxesNode.SetTemporary(true);
            const int numObjects = 2000;
            var       boxModel   = RootNode.Context.Cache.GetResource <Urho3DNet.Model>("Models/Box.mdl");
            //var boxMaterial = RootNode.Context.Cache.GetResource<Material>("Materials/Stone.xml");
            var boxMaterial = Material_Ext.TransParentMaterial(new Color(1, 0, 0, .5f));


            for (var i = 0; i < numObjects; ++i)
            {
                Node boxNode = new Node(RootNode.Context);
                boxNode.Name = "Box" + i.ToString("00");
                boxesNode.AddChild(boxNode, 0);
                boxNode.Position = new Vector3(Shared_Utility.Randoms.Next(0, 200f) - 100f, Shared_Utility.Randoms.Next(0, 200f) - 100f, Shared_Utility.Randoms.Next(0, 200f) - 100f);
                //Orient using random pitch, yaw and roll Euler angles
                boxNode.Rotation = new Quaternion(Shared_Utility.Randoms.Next(0, 360.0f), Shared_Utility.Randoms.Next(0, 360.0f), Shared_Utility.Randoms.Next(0, 360.0f));

                var boxObject = boxNode.CreateComponent <StaticModel>();
                boxObject.SetModel(boxModel);
                boxObject.SetMaterial(boxMaterial);
                boxObject.CastShadows = true;
                boxNode.CreateComponent <RotateObject>();
                var basenode = boxNode.CreateComponent <CustomNodeComponent>();
                basenode.OriginalPosition = new Vector3(5, 10, 5);
                basenode.OriginalMaterial = boxMaterial;
            }
        }
示例#2
0
        public void DrawLine(Engine_Point position, Engine_Point vector, Color color, Node Parent)
        {
            var linechild = Parent.CreateChild("Line");
            var cusLine   = linechild.CreateComponent <CustomGeometry>();

            cusLine.BeginGeometry(0, PrimitiveType.LineList);
            var mat = Material_Ext.noLitFromColor(color, true);

            // mat.FillMode = FillMode.FillWireframe;

            cusLine.SetMaterial(mat);
            cusLine.DefineVertex(vector.ToVec3());
            cusLine.DefineColor(color);
            cusLine.Commit();
            linechild.Position = position.ToVec3();
        }
示例#3
0
        private async void DisplaceAll(Node selected, string name)
        {
            var pos    = selected.Position;
            var childs = selected.GetChildren();


            foreach (var node in childs)
            {
                if (!node.Name.ToLower().Contains(name))
                {
                    continue;
                }
                var cuscmp = node.GetComponent <CustomNodeComponent>();
                if (cuscmp == null)
                {
                    cuscmp = new CustomNodeComponent(Context);
                    cuscmp.OriginalPosition = node.Position;
                    node.AddComponent(cuscmp, 1, CreateMode.Local);
                }

                var chpos = node.Position;
                var dir   = selected.Position - chpos;
                dir.Normalize();
                var dis  = chpos.DistanceToPoint(selected.Position);
                var rpos = new Vector3(Randoms.Next(0, 200f) - 100f, Randoms.Next(0, 200f) - 100f, Randoms.Next(0, 200f) - 100f);
                // Orient using random pitch, yaw and roll Euler angles
                //var rrot = new Quaternion(Randoms.Next(0, 360.0f), Randoms.Next(0, 360.0f), Randoms.Next(0, 360.0f));

                var move = node.GetComponent <MoveObject>();
                if (move == null)
                {
                    move = node.CreateComponent <MoveObject>();
                }

                if (cuscmp.OriginalPosition == node.Position)
                {
                    move.TargetPos = rpos;
                    if (cuscmp.OriginalMaterial == null)
                    {
                        cuscmp.OriginalMaterial = node.GetComponents().Where(o => o is StaticModel).Cast <StaticModel>()?.FirstOrDefault().GetMaterial();
                    }
                    node.GetComponents().Where(o => o is StaticModel).Cast <StaticModel>().ForEach(o => o.SetMaterial(Material_Ext.SetMaterialFromColor(Color.Red, true)));
                }
                else
                {
                    move.TargetPos = cuscmp.OriginalPosition;
                    node.GetComponents().Where(o => o is StaticModel).Cast <StaticModel>().ForEach(o => o.SetMaterial(cuscmp.OriginalMaterial));
                }
            }
        }
示例#4
0
        public void CreateCustomShape2(Serializable.Engine_Geometry geom)
        {
            Logger.Log($"Generating Geometry [{geom.Name}]");

            if (geom.Engine_Faces.Count == 0)
            {
                Logger.Log($"Geometry: [{geom.Name}] has no faces", "", Logger.ErrorType.Warrning);
                return;
            }

            var geonode = RootNode.CreateChild(geom.Name);

            geonode.Scale(geom.Flip.ToVec3());
            if (geom.Rotation != null)
            {
                geonode.Rotate(new Quaternion(geom.Rotation.ToVec3()));
            }
            float scaleValue = (float)DynConstants.FeettoMeter;

            geonode.Scale(new Vector3(scaleValue, scaleValue, scaleValue));

            geom.GenerateNormals();
            if (!geom.GenerateTangents())
            {
                var failChild = geonode.CreateChild($"{geom.Name} Failed");
                failChild.Position = geom.Position.ToVec3();
                var model  = Cache.GetResource <Model>("Models/Box.mdl");
                var stcomp = failChild.CreateComponent <StaticModel>();
                stcomp.SetModel(model);
                return;
            }

            var    faceColorGroups = geom.Engine_Faces.GroupBy(o => o.FaceColor.ToString());
            string dir             = System.IO.Path.GetDirectoryName(geom.FileName);
            var    files           = System.IO.Directory.GetFiles(dir).ToList();

            foreach (var faceColorGroup in faceColorGroups)
            {
                var      facechild = geonode.CreateChild("Face_Color");
                Material mat       = null;

                var faceColor = faceColorGroup.ElementAt(0).FaceColor;

                if (faceColor.L != 1)
                {
                    mat = Material_Ext.TransParentMaterial(faceColor.ToColor());
                }
                else
                {
                    mat = Material_Ext.ColoredMaterial(faceColor.ToColor());
                }
                mat.CullMode = geom.GeoCullModel;
#if false
                var faceColor = faceColorGroup.ElementAt(0).FaceColor.ToColor();

                // mat = RootNode.Context.Cache.GetResource<Material>("Materials/Stone.xml");
                if (!files.Any(o => o.Contains(faceColor.ToString())))
                {
                    if (faceColor.ToVector4().W != 1)
                    {
                        mat = Material_Ext.TransParentMaterial(faceColor);
                    }
                    else
                    {
                        mat = Material_Ext.ColoredMaterial(faceColor);
                    }
                    mat.CullMode = geom.GeoCullModel;

                    var isSaved = mat.SaveFile(dir + "\\" + mat.Name);
                }

                mat = Cache.GetResource <Material>(dir + "\\" + faceColor.ToString() + ".xml");
#endif

                var cus = facechild.CreateComponent <CustomNodeComponent>();
                cus.OriginalMaterial = mat;

                var cusGeo = facechild.CreateComponent <CustomGeometry>();
                cusGeo.CastShadows = true;

                cusGeo.BeginGeometry(0, PrimitiveType.TriangleList);
                cusGeo.SetMaterial(mat);

                Logger.Log("Begin Geometry");
                foreach (var face in faceColorGroup)
                {
                    var triangles      = face.EngTriangles;
                    var trianglesCount = face.EngTriangles.Count;
                    for (int triIndex = 0; triIndex < trianglesCount; triIndex++)
                    {
                        var triangle  = triangles[triIndex];
                        var triPoints = triangle.GetPoints();
                        foreach (var engpoint in triPoints)
                        {
                            cusGeo.DefineVertex(engpoint.EngPosition.ToVec3());
                            cusGeo.DefineNormal(engpoint.EngNormal.ToVec3());
                            cusGeo.DefineTexCoord(engpoint.EngTexture.ToVec2());
                            cusGeo.DefineTangent(engpoint.EngTangent.ToVec4());
                        }
                    }
                }
                cusGeo.Commit();
                Logger.Log("End Geometry");
            }
        }
示例#5
0
        void Reload()
        {
            if (geom != null && !geom.IsZoneDirty())
            {
                geom.Remove();
            }

            if (Node == null || Node.IsDirty())
            {
                return;
            }

            geom = Node.CreateComponent <CustomGeometry>();

            geom.BeginGeometry(0, PrimitiveType.LineList);

            geom.SetMaterial(Material_Ext.noLitFromColor(color, true));

            var halfSize = Size / 2;

            for (int i = -halfSize; i <= halfSize; i++)
            {
                if (i % 5 == 0)
                {
                    continue;
                }

                //x
                geom.DefineVertex(new Vector3(i, 0, -halfSize) * Scale);
                geom.DefineColor(Color);
                geom.DefineVertex(new Vector3(i, 0, halfSize) * Scale);
                geom.DefineColor(Color);

                //z
                geom.DefineVertex(new Vector3(-halfSize, 0, i) * Scale);
                geom.DefineColor(Color);
                geom.DefineVertex(new Vector3(halfSize, 0, i) * Scale);
                geom.DefineColor(Color);
            }

            geom.Commit();

            geom = Node.CreateComponent <CustomGeometry>();
            geom.BeginGeometry(0, PrimitiveType.LineList);

            geom.SetMaterial(0, Material_Ext.noLitFromColor(Color.White, true));

            for (int i = -halfSize; i <= halfSize; i++)
            {
                if (i % 5 != 0)
                {
                    continue;
                }

                //x
                geom.DefineVertex(new Vector3(i, 0, -halfSize) * Scale);
                geom.DefineColor(Color);
                geom.DefineVertex(new Vector3(i, 0, halfSize) * Scale);
                geom.DefineColor(Color);

                //z
                geom.DefineVertex(new Vector3(-halfSize, 0, i) * Scale);
                geom.DefineColor(Color);
                geom.DefineVertex(new Vector3(halfSize, 0, i) * Scale);
                geom.DefineColor(Color);
            }

            geom.Commit();
        }