protected override void Awake()
        {
            base.Awake();
            meshFilter   = GetComponent <MeshFilter>();
            meshCollider = GetComponent <MeshCollider>();

            RibbonMesh = new RibbonMesh(Vector3.one * .3f);
        }
        /// <summary>
        /// Set the scale of the ribbon cross section.
        /// </summary>
        /// <param name="scale"></param>
        public void SetRibbonScale(Vector3 scale)
        {
            List <Vector3> currentCrossSections = this.GetCrossSection();

            RibbonMesh = new RibbonMesh(currentCrossSections, scale);
            Mesh mesh = RibbonMesh.GetMesh(Points, Rotations);

            UpdateMesh(mesh);
        }
예제 #3
0
    private void generateRibbon()
    {
        List <Vector3>    points    = new List <Vector3>();
        List <Quaternion> rotations = new List <Quaternion>();

        foreach (Transform controlPoint in ControlPointParent.transform)
        {
            points.Add(controlPoint.position);
            rotations.Add(controlPoint.rotation);
        }

        GetComponent <MeshFilter>().mesh = RibbonMesh.GetRibbonMesh(points, rotations, .4f);
    }
        private void DrawHoldRibbon(RenderContext context, double now, Note startNote, Note endNote)
        {
            OnStageStatus s1 = NotesLayerUtils.GetNoteOnStageStatus(startNote, now), s2 = NotesLayerUtils.GetNoteOnStageStatus(endNote, now);

            if (s1 == s2 && s1 != OnStageStatus.OnStage)
            {
                return;
            }

            var mesh = new RibbonMesh(context, startNote, endNote, now, ConnectionType.Hold);

            mesh.Fill(RibbonBrush.Brush);
        }
 void ISerializableComponent.ApplyData(SerializableComponentData data)
 {
     if (data is RibbonSketchObjectData ribbonData)
     {
         RibbonMesh = new RibbonMesh(ribbonData.CrossSectionVertices, ribbonData.CrossSectionScale);
         SetControlPointsLocalSpace(ribbonData.ControlPoints, ribbonData.ControlPointOrientations);
         meshRenderer.sharedMaterial = Defaults.GetMaterialFromDictionary(ribbonData.SketchMaterial);
         ribbonData.ApplyDataToTransform(this.transform);
     }
     else
     {
         Debug.LogError("Invalid data for RibbonSketchObject.");
     }
 }
        public void RibbonMesh_AddControlPoint_Performance([NUnit.Framework.Range(9, 99, 10)] int length)
        {
            RibbonMesh ribbonMesh = null;

            Measure.Method(() =>
            {
                ribbonMesh.AddPoint(new Vector3(length + 1, 0, 0), Quaternion.identity);
            })
            .SetUp(() => {
                ribbonMesh = new RibbonMesh(Vector3.one);
                ribbonMesh.GetMesh(GenerateControlPoints(length), GenerateQuaternions(length));
            })
            .Run();
        }
    void initResources()
    {
        // ribbon mesh
        mRibbonMesh = new RibbonMesh(numTrails, numRibbons);

        // cs - update point
        mRt_posLife  = new RenderTexture[2];
        mRt_velScale = new RenderTexture[2];
        for (int i = 0; i < 2; i++)
        {
            mRt_posLife[i]  = initComputeRenderTexture(numTrails, numRibbons);
            mRt_velScale[i] = initComputeRenderTexture(numTrails, numRibbons);
        }
        mRt_rotDir = initComputeRenderTexture(numTrails, numRibbons);

        // render
        mRibbonMat = new Material(mRibbonShader);
    }
        internal static void DrawRibbon(this RenderContext context, RibbonMesh mesh, D3DSimpleTextureEffect effect, D3DMaterial material, Matrix viewProjection, ShaderResourceView texture)
        {
            // World = I, so use viewProjection as World*viewProjection
            effect.WorldTransform = Matrix.Identity;
            effect.WorldTransformInversedTransposed = MathF.InverseTranspose(Matrix.Identity);
            effect.WorldViewProjectionTransform     = viewProjection;

            effect.Material = material;
            effect.Texture  = texture;

            var tech          = effect.SimpleTextureTechnique;
            var desc          = tech.Description;
            var deviceContext = context.Direct3DDevice.ImmediateContext;

            for (var i = 0; i < desc.PassCount; ++i)
            {
                tech.GetPassByIndex(i).Apply(deviceContext);
                mesh.Draw(deviceContext);
            }
        }
 public void SetCrossSection(List <Vector3> CrossSectionVertices, Vector3 CrossSectionScale)
 {
     RibbonMesh = new RibbonMesh(CrossSectionVertices, CrossSectionScale);
     UpdateMesh(RibbonMesh.GetMesh(Points, Rotations));
 }
예제 #10
0
        protected override void Awake()
        {
            base.Awake();

            RibbonMesh = new RibbonMesh(Vector3.one * .3f);
        }
예제 #11
0
        internal static void DrawRibbon([NotNull] this GraphicsDevice graphicsDevice, RibbonMesh mesh, [NotNull] RibbonEffect effect, Matrix viewProjection, Material material, [NotNull] Texture2D ribbonTexture)
        {
            // World = I, so use viewProjection as World*viewProjection
            effect.World             = Matrix.Identity;
            effect.WorldInvTranspose = Matrix.Identity;
            effect.WorldViewProj     = viewProjection;

            effect.MaterialAmbient  = material.Ambient;
            effect.MaterialDiffuse  = material.Diffuse;
            effect.MaterialSpecular = material.Specular;
            effect.MaterialReflect  = material.Reflect;

            effect.Opacity = 1;

            effect.TextureTransform = Matrix.Identity;
            effect.RibbonTexture    = ribbonTexture;

            var pass = effect.CurrentTechnique.Passes[0];

            pass.Apply();

            graphicsDevice.BlendState        = BlendState.AlphaBlend;
            graphicsDevice.DepthStencilState = DepthStencilState.Default;
            graphicsDevice.RasterizerState   = RasterizerState.CullNone;

            mesh.Draw(graphicsDevice);
        }