zoukankan      html  css  js  c++  java
  • sin函数的应用

    1.波浪

    https://gitee.com/alps_01/laya_wave.git

     

    import CustomMaterial from "./CustomMaterial.js";

        export default class UpdateTime extends Laya.Script {

        constructor() {

            super();

            this.material = null;

            this.time = 0;

        }

        onStart(){

            this.initShader();

            this.material = new CustomMaterial();

            let water = this.owner.getChildByName("water");

            water.meshRenderer.material = this.material;

        }

        onUpdate(){

            this.time +=  Laya.timer.delta/1000

            this.material.setTime(this.time);

        }

        //初始化我们的自定义shader

        initShader() {

            //所有的attributeMap属性

            var attributeMap = {'_glesVertex': Laya.VertexMesh.MESH_POSITION0, '_glesNormal': Laya.VertexMesh.MESH_NORMAL0};

            //所有的uniform属性

            var uniformMap = {

                        '_Time':Laya.Shader3D.PERIOD_MATERIAL,

                        '_PrimaryColor':Laya.Shader3D.PERIOD_MATERIAL,

                        '_SecondaryColor':Laya.Shader3D.PERIOD_MATERIAL,

                        '_SecondaryColorImpact':Laya.Shader3D.PERIOD_MATERIAL,

                        '_SecondaryColorAngle':Laya.Shader3D.PERIOD_MATERIAL,

                        '_Alpha':Laya.Shader3D.PERIOD_MATERIAL,

                        '_Intensity':Laya.Shader3D.PERIOD_MATERIAL,

                        '_Speed':Laya.Shader3D.PERIOD_MATERIAL,

                        '_Direction':Laya.Shader3D.PERIOD_MATERIAL,

                        '_WaveLength':Laya.Shader3D.PERIOD_MATERIAL,

                        '_SquareWaves':Laya.Shader3D.PERIOD_MATERIAL,

                        'u_CameraPos': Laya.Shader3D.PERIOD_CAMERA,

                        'u_MvpMatrix': Laya.Shader3D.PERIOD_SPRITE,

                        'u_WorldMat': Laya.Shader3D.PERIOD_SPRITE};

            //注册CustomShader

            var customShader = Laya.Shader3D.add("CustomShader");

            //创建一个SubShader

            var subShader = new Laya.SubShader(attributeMap, uniformMap);

            //我们的自定义shader customShader中添加我们新创建的subShader

            customShader.addSubShader(subShader);

            let vs =  `attribute vec4 _glesVertex;

            attribute vec3 _glesNormal;

            uniform  float _Time;

            uniform  vec3 u_CameraPos;

            uniform  mat4 u_WorldMat;

            uniform  mat4 u_MvpMatrix;

            uniform  vec4 _PrimaryColor;

            uniform  vec4 _SecondaryColor;

            uniform  float _SecondaryColorImpact;

            uniform  float _SecondaryColorAngle;

            uniform  float _Alpha;

            uniform  float _Intensity;

            uniform  float _Speed;

            uniform  float _Direction;

            uniform  float _WaveLength;

            uniform  float _SquareWaves;

            varying  vec4 xlv_TEXCOORD0;

            void main ()

            {

               vec4 tmpvar_1;

              tmpvar_1.xzw = _glesVertex.xzw;

               vec3 worldNormal_2;

               vec3 cameraVector_3;

               vec3 worldPosition_4;

               vec4 tmpvar_5;

               float tmpvar_6;

              tmpvar_6 = sin(_Direction);

               float tmpvar_7;

              tmpvar_7 = cos(_Direction);

               float tmpvar_8;

               float tmpvar_9;

              tmpvar_9 = (_Direction + 1.57);

              tmpvar_8 = sin(tmpvar_9);

               float tmpvar_10;

              tmpvar_10 = cos(tmpvar_9);

              tmpvar_1.y = (_glesVertex.y + (((sin((( ((_Time * _Speed) + (_glesVertex.x * tmpvar_6))+ (_glesVertex.z * tmpvar_7)) / _WaveLength)) * _Intensity)* 0.05) * sin((1.57 + (_SquareWaves * ((_glesVertex.x * tmpvar_8) + ( (_glesVertex.z * tmpvar_10) / _WaveLength)))))));

               vec3 tmpvar_11;

              tmpvar_11 = (u_WorldMat * tmpvar_1).xyz;

              worldPosition_4 = tmpvar_11;

               vec3 tmpvar_12;

              tmpvar_12 = normalize((worldPosition_4 - u_CameraPos));

              cameraVector_3 = tmpvar_12;

               vec4 tmpvar_13;

              tmpvar_13.w = 0.0;

              tmpvar_13.xyz = _glesNormal;

               vec3 tmpvar_14;

              tmpvar_14 = normalize((u_WorldMat * tmpvar_13).xyz);

              worldNormal_2 = tmpvar_14;

               float tmpvar_15;

              tmpvar_15 = ((dot (worldNormal_2, cameraVector_3) * _SecondaryColorAngle) + _SecondaryColorImpact);

              tmpvar_5.xyz = ((_PrimaryColor * (1.0 - tmpvar_15)) + (_SecondaryColor * tmpvar_15)).xyz;

              tmpvar_5.w = _Alpha;

              tmpvar_5.xyz = (tmpvar_5.xyz * _Alpha);

               vec4 tmpvar_16;

              tmpvar_16.w = 1.0;

              tmpvar_16.xyz = tmpvar_1.xyz;

              gl_Position = u_MvpMatrix * tmpvar_16;

              xlv_TEXCOORD0 = tmpvar_5;

            }`;

            let fs = `

            #ifdef FSHIGHPRECISION

            precision highp float;

            #else

            precision mediump float;

            #endif

            varying  vec4 xlv_TEXCOORD0;

            void main ()

            {

                gl_FragData[0] = xlv_TEXCOORD0;

            }`;

            //往新创建的subShader中添加shaderPass

            subShader.addShaderPass(vs, fs);

        }

    }

    2.指尖乐动小球动画

    using System;

    using System.Collections;

    using System.Collections.Generic;

    using UnityEngine;

    public class Bullet : MonoBehaviour

    {

        public Transform root;

        public Transform cameraTran;

        public float speed = 10;

        public float min_distance = 2;

        public float max_distance = 40;

        public float min_hight = 1;

        public float max_hight = 6;

        float tempTime;

        float y_lerp;

        float Rad180 = Mathf.Deg2Rad * 180;

        float distanceFactor = 0;

        float time = 0;

        public bool isPlay = false;

        public int index = 0;

        void Play() {

            isPlay = true;

        }

        void Stop() {

            isPlay = false;

        }

        void Start()

        {

            distanceFactor = min_distance / max_distance;

           

            cal();

        }

        void cal() {

            time = 0;

            float zDis = root.GetChild(index).position.z - transform.position.z;

            tempTime = zDis / speed;

            // 距离差值

            float z_lerp = distanceFactor * zDis;

            // 高度差值

            y_lerp = Mathf.Lerp(min_hight, max_hight, z_lerp);

           

        }

       

        float hightFactor = 0;

        void Update()

        {

            if (!isPlay) return;

            time += Time.deltaTime;

            hightFactor = Mathf.Sin((time / tempTime) * Rad180);

            if (hightFactor < 0) {

                // 如果在台子范围内,球弹起

                if (true)

                {

                    if (index >= root.childCount)

                    {

                        isPlay = false;

                        return;

                    }

                    cal();

                    index++;

                }

                // 未落到台子上,触发游戏结束

                if (hightFactor < -0.6)

                {

                    isPlay = false;

                    return;

                }

            }

            //Debug.Log("hightFactor:" + hightFactor);

            //Debug.Log("hightFactor:" + hightFactor);

            //Debug.Log("y_lerp:" + y_lerp);

            transform.position = new Vector3(transform.position.x, hightFactor * y_lerp, transform.position.z + speed * Time.deltaTime);

            cameraTran.Translate(new Vector3(0,0, speed * Time.deltaTime), Space.World);

        }

    }

    3.呼吸灯

     

    using System.Collections;

    using System.Collections.Generic;

    using UnityEngine;

    using UnityEngine.UI;

    public class TestSin : MonoBehaviour {

                    public Image img;

                    public float timer = 0;

                    // Use this for initialization

                    void Start () {

                                   

                    }

                   

                    // Update is called once per frame

                    void Update () {

                                    timer += Time.deltaTime;

                                    if (timer > 2 * Mathf.PI) {

                                                    timer -= 2 * Mathf.PI;

                                    }

                                    Color c = img.color;

                                    c.a = Mathf.Abs( Mathf.Sin(timer));

                                    img.color = c;

                    }

    }

  • 相关阅读:
    剑指offer——最小的K个数和数组中第K大的元素
    Leetcode刷题指南链接整理
    160. Intersection of Two Linked Lists
    100. Same Tree
    92. Reverse Linked List II
    94. Binary Tree Inorder Traversal
    79. Word Search
    78,90,Subsets,46,47,Permutations,39,40 DFS 大合集
    0x16 Tire之最大的异或对
    0x16 Tire
  • 原文地址:https://www.cnblogs.com/alps/p/12530811.html
Copyright © 2011-2022 走看看