Esempio n. 1
0
    // Use this for initialization
    void Start()
    {
        MeshFilter filter = (MeshFilter)this.GetComponent <MeshFilter> ();

        if (filter == null)
        {
            filter = gameObject.AddComponent <MeshFilter> ();
        }
        filter.mesh = CylinderGenerator.generateCylinder(1f, 0.004f, 0.003f, 5);
        gameObject.AddComponent <MeshRenderer> ().material = material;

        int   numberOfNodes = 35;
        float rotationAngle = 75;
        float leafWidth     = 0.2f;

        for (int i = 0; i < numberOfNodes; i++)
        {
            Leaf newLeaf = new GameObject("BranchLeaf").AddComponent <Leaf> ().Initialize(fernBranchMaterial, leafWidth, 0.6f, null);
            newLeaf.transform.parent        = this.transform;
            newLeaf.transform.localScale    = Vector3.one * ((0.3f / (((float)i / (float)numberOfNodes) + 0.3f)) - 0.16f); //Mathf.Pow(1.13f, i/numberOfNodes);
            newLeaf.transform.localPosition = new Vector3(-(leafWidth / 2f) * newLeaf.transform.localScale.x, Mathf.Log10((((float)i / (float)numberOfNodes) + 0.1f) * 10f), 0f);
            newLeaf.transform.localRotation = Quaternion.Euler(0f, 0f, 0f);
            //newLeaf.transform.RotateAround (newLeaf.transform.position + new Vector3((leafWidth/2f) * newLeaf.transform.localScale.x, 0f, 0f), this.transform.rotation.eulerAngles, -rotationAngle + ((i % 2) * (rotationAngle * 2)));
            rotateAroundLocal(newLeaf.transform, newLeaf.transform.position + new Vector3((leafWidth / 2f) * newLeaf.transform.localScale.x, 0f, 0f), Vector3.forward, -rotationAngle + ((i % 2) * (rotationAngle * 2)));

            /*newLeaf.transform.localRotation = Quaternion.Euler(0, 0, );
             *
             * //Correct for rotation anchor point.
             * float angle = Mathf.Deg2Rad * (newLeaf.transform.localRotation.eulerAngles.z);
             * float hypo = .1f;
             * newLeaf.transform.localPosition += new Vector3(Mathf.Sin(angle) * hypo, Mathf.Cos(angle) * hypo);*/
        }
    }
Esempio n. 2
0
    public void Render()
    {
        CylinderGenerator.GenerateCylinder(resolution, mesh, atom0.color, atom1.color);
        float l = atoms.getDistance(a0, a1);

        transform.localPosition = (atom0.transform.localPosition + atom1.transform.localPosition) / 2f;
        transform.localScale    = new Vector3(radius, radius, l);
        transform.localRotation = Quaternion.LookRotation(atoms.getVector(a0, a1));
    }
 // Use this for initialization
 void Start()
 {
     CylinderGenerator.Create(gameObject, true, 64);
     meshRenderer = gameObject.AddComponent <MeshRenderer>();
     meshRenderer.material.shader = cylinderShader;
     meshRenderer.material.EnableKeyword("FROM_SPHERICAL");
     meshRenderer.material.SetFloat("_Fade", 1f);
     meshRenderer.material.SetFloat("_ShiftU", shiftU);
     meshRenderer.material.SetFloat("_ScaleV", scaleCylinderV);
 }
Esempio n. 4
0
    //Build the actual shape of the branch.
    public void build()
    {
        if (parentBranch != null)
        {
            this.manager          = parentBranch.manager;
            this.material         = parentBranch.material;
            this.transform.parent = parentBranch.transform;

            this.branchDepth = parentBranch.branchDepth + 1;


            //These constants control the appearance of the tree.
            updateLength();
            this.width = parentBranch.width * 0.5f;

            //Move the current branch so that it is stacked right above its parent.
            if (directBranch)
            {
                transform.localPosition = Vector3.up * parentBranch.length;
            }
            else
            {
                transform.localPosition = Vector3.up * Random.Range(parentBranch.length - ((parentBranch.length) * (0.8f - this.branchDepth / 10)), parentBranch.length);
            }


            //when we rotate we have to transform again so that the branch keeps its bottom connected to its parent's top.
            //float hypo = this.length/2f;
            //float opposite = Mathf.Sin(Mathf.Deg2Rad * transform.localRotation.eulerAngles.z) * hypo;
            //float adjacent = Mathf.Cos (Mathf.Deg2Rad * transform.localRotation.eulerAngles.y) * hypo;
            //float oppositeX = Mathf.Sin (Mathf.Deg2Rad * transform.localRotation.eulerAngles.x) * 2f *adjacent;
            //transform.localPosition = transform.localPosition + new Vector3 (0f, adjacent, 0f);
        }

        //Check for mesh filter and make one if none exists.
        MeshFilter filter = (MeshFilter)this.GetComponent <MeshFilter> ();

        if (filter == null)
        {
            filter = gameObject.AddComponent <MeshFilter> ();
        }

        //Create a new cylinder mesh.
        filter.mesh = mesh = new Mesh();
        int numberOfRingVerts = 6 - this.branchDepth;

        if (numberOfRingVerts < 2)
        {
            numberOfRingVerts = 2;
        }

        filter.mesh = mesh = CylinderGenerator.generateCylinder(this.length, this.width, this.width * 0.5f, numberOfRingVerts);
        //transform.localRotation = Quaternion.Euler(0f, 0f, weightedRand() * 30f);
    }
    void Start()
    {
        if (isCylinder)
        {
            CylinderGenerator.Create(gameObject, true, 64);
        }
        else
        {
            IcoSphereGenerator.Create(gameObject, true, 5);
        }

        meshRenderer = gameObject.AddComponent <MeshRenderer>();
        if (isCylinder)
        {
            meshRenderer.material.shader = cylinderShader;
            meshRenderer.material.EnableKeyword("FROM_SPHERICAL");
            meshRenderer.material.SetFloat("_Fade", 1f);
            meshRenderer.material.SetFloat("_ShiftU", shiftU);
            meshRenderer.material.SetFloat("_ScaleV", scaleCylinderV);
        }
        else
        {
            meshRenderer.material.shader = sphereShader;
            meshRenderer.material.SetFloat("_Fade", 1f);
            meshRenderer.material.SetFloat("_ShiftU", shiftU);
        }

        infoBlock = new GameObject(name + " Info");
        infoBlock.transform.SetParent(transform);
        infoBlock.transform.localPosition = new Vector3(0f, -0.5f, 0.5f);
        infoBlock.transform.localRotation = Quaternion.Euler(45f, 0f, 0f);

        var infoText = infoBlock.AddComponent <TextMesh>();

        infoText.text          = "Record: Not yet loaded\nImage: N/A";
        infoText.anchor        = TextAnchor.MiddleCenter;
        infoText.fontSize      = 40;
        infoText.characterSize = 0.005f;

        OnValidate();

        if (Application.sandboxType != ApplicationSandboxType.NotSandboxed)
        {
            archive.jsonPath = Application.streamingAssetsPath;
        }
        archive.Load();
        ChangeRecord(-1);
    }
Esempio n. 6
0
        private void SetupVirtualPointsCylinder(
            int lengthPoints,
            int circlePoints,
            double radius,
            double height
            )
        {
            var generated = CylinderGenerator.Generate(
                lengthPoints,
                circlePoints,
                radius,
                height
                );

            SetControlPointsUsingPositions(generated);
        }
    void SetupCylinder()
    {
        cylinder = new GameObject("Virtual Panorama Cylinder");
//		cylinder.transform.SetParent(transform);
        cylinder.transform.position = new Vector3(0f, aboveFloor + screenHeight * 0.5f, 0f) - viewerPosition;
        float sr = diameter / 2f;
        float sh = screenHeight / 2f;

        cylinder.transform.localScale = new Vector3(sr, sh, sr);
        cylinder.layer = PanoramaCameraRig.PANORAMA_LAYER;
        CylinderGenerator.Create(cylinder, true, 180);
        cylinderRenderer = cylinder.AddComponent <MeshRenderer>();
        if (undistortSlices)
        {
            cylinderRenderer.material = new Material(Shader.Find("EMPlus/PanoramaSliceWarpShader"));
            cylinderRenderer.material.SetVector("_SliceLayout", new Vector4(cameraRig.numSlices, cameraRig.sliceAngle * Mathf.Deg2Rad, 0f, 0f));
        }
        else
        {
            cylinderRenderer.material = new Material(Shader.Find("Unlit/Texture"));
        }
        cylinderRenderer.material.SetTexture("_MainTex", cameraRig.renderTexture);
        cylinderRenderer.material.SetTextureScale("_MainTex", new Vector2(360f / cameraRig.RenderedAngle(), 1f));

        cylinderBlack = new GameObject("Virtual Cylinder Outside Black");
        CylinderGenerator.Create(cylinderBlack, true, 90);
        cylinderBlack.AddComponent <MeshRenderer>();
        cylinderBlack.layer = PanoramaCameraRig.PANORAMA_LAYER;
        cylinderBlack.transform.SetParent(cylinder.transform);
        Material matBlack = cylinderBlack.GetComponent <MeshRenderer>().material;

        matBlack.shader = Shader.Find("Unlit/Color");
        matBlack.SetColor("_Color", new Color(0, 0, 0, 1f));

        floor       = GameObject.CreatePrimitive(PrimitiveType.Quad);
        floor.name  = "Virtual Panorama Screen Floor Quad";
        floor.layer = PanoramaCameraRig.PANORAMA_LAYER;
        floor.transform.SetParent(cylinder.transform);
        floor.transform.rotation = Quaternion.Euler(90f, 0f, 0f);
        Material matFloor = floor.GetComponent <MeshRenderer>().material;

        matFloor.shader = Shader.Find("Standard");
        matFloor.SetColor("_Color", new Color(0.1f, 0.1f, 0.1f, 1f));

        OnValidate();
    }
Esempio n. 8
0
        /// <inheritdoc />
        public override IGameObject BuildArea(Tile tile, Rule rule, Area area)
        {
            base.BuildArea(tile, rule, area);

            if (tile.Registry.Contains(area.Id))
            {
                return(null);
            }

            double   radius;
            Vector2d center;

            CircleUtils.GetCircle(tile.RelativeNullPoint, area.Points, out radius, out center);

            var elevation = ElevationProvider.GetElevation(center);

            var height       = rule.GetHeight();
            var minHeight    = rule.GetMinHeight();
            var actualHeight = (height - minHeight);
            var color        = rule.GetFillColor();
            var gradient     = CustomizationService.GetGradient(color);

            tile.Registry.RegisterGlobal(area.Id);

            var cylinderGen = new CylinderGenerator()
                              .SetCenter(new Vector3((float)center.X, elevation + minHeight, (float)center.Y))
                              .SetHeight(actualHeight)
                              .SetMaxSegmentHeight(5f)
                              .SetRadialSegments(7)
                              .SetRadius((float)radius)
                              .SetGradient(gradient);

            var meshData = new MeshData(MeshDestroyIndex.Default, cylinderGen.CalculateVertexCount())
            {
                GameObject  = GameObjectFactory.CreateNew(GetName(area)),
                MaterialKey = rule.GetMaterialKey()
            };

            cylinderGen.Build(meshData);

            BuildObject(tile.GameObject, meshData, rule, area);
            return(meshData.GameObject);
        }
Esempio n. 9
0
    public void growChildren()
    {
        branchAge++;
        float originalLength = this.length;

        this.width = this.width * this.manager.widthFactor;
        if (parentBranch)
        {
            this.width = this.parentBranch.width * this.manager.childWidthFactor;
        }

        if (branchAge < 3)
        {
            this.length = this.ultimateLength / 4 + (this.ultimateLength / 4) * branchAge;
        }

        //Check for mesh filter and make one if none exists.
        MeshFilter filter = (MeshFilter)this.GetComponent <MeshFilter> ();

        if (filter == null)
        {
            filter = gameObject.AddComponent <MeshFilter> ();
        }

        //Create a new cylinder mesh to represent a larger version of the branch.
        filter.mesh = mesh = CylinderGenerator.generateCylinder(this.length, this.width, this.width * 0.65f, 6);

        if (childBranches.Count == 0)
        {
            branch();
        }
        else
        {
            for (int i = 0; i < childBranches.Count; i++)
            {
                //preserves the child branch's position on the parent branch.
                childBranches [i].transform.localPosition = Vector3.up * (childBranches [i].transform.localPosition.y * this.length) / originalLength;
                childBranches [i].growChildren();
            }
        }
    }
Esempio n. 10
0
    // Use this for initialization
    void Start()
    {
        if (segments < 6)
        {
            segments = 6;
        }
        if (segments > 360)
        {
            segments = 360;
        }
        CylinderGenerator.Create(gameObject, insideOut, segments);
        var cylinderRenderer = gameObject.AddComponent <MeshRenderer>();

        if (material != null)
        {
            cylinderRenderer.sharedMaterial = material;
        }
        else
        {
            cylinderRenderer.material.shader = Shader.Find("EMPlus/GridShader");
            cylinderRenderer.material.SetColor("_Color", color);
            cylinderRenderer.material.SetFloat("_LineWidth", lineWidth);
        }
    }
 // Use this for initialization
 void Start()
 {
     cylinderGenerator = new CylinderGenerator ();
 }
Esempio n. 12
0
 public void Render()
 {
     CylinderGenerator.GenerateCylinder(resolution, mesh, atom0.color, atom1.color);
     _cylinderRendered = true;
     UpdateLocalTransform();
 }
Esempio n. 13
0
 // Use this for initialization
 void Start()
 {
     CylinderGenerator.Create(gameObject, true, 64);
 }