您当前的位置: 首页 >  unity

程序员正茂

暂无认证

  • 1浏览

    0关注

    283博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity3d绘制四棱锥

程序员正茂 发布时间:2021-09-26 14:37:46 ,浏览量:1

using System.Collections; using System.Collections.Generic; using UnityEngine;

public class Pyramis : MonoBehaviour {     public Material mat;     public float angle1=120.0f;     public float angle2 = 90.0f;     public float height = 5.0f;

    MeshFilter _meshFilter;     // Start is called before the first frame update     void Start()     {         GenMesh();     }

    private void Update()     {         if(Time.frameCount % 10 == 0)         {             float halfAngle1 = 0.5f * angle1;             float halfAngle2 = 0.5f * angle2;             Vector3 ptRectCenter = transform.position - transform.up * height;             Vector3 ptRightForward = ptRectCenter + Mathf.Tan(halfAngle1 * Mathf.Deg2Rad) * height * transform.right + Mathf.Tan(halfAngle2 * Mathf.Deg2Rad) * height * transform.forward;             Vector3 ptRightBack = ptRectCenter + Mathf.Tan(halfAngle1 * Mathf.Deg2Rad) * height * transform.right - Mathf.Tan(halfAngle2 * Mathf.Deg2Rad) * height * transform.forward;             Vector3 ptLeftBack = ptRectCenter - Mathf.Tan(halfAngle1 * Mathf.Deg2Rad) * height * transform.right - Mathf.Tan(halfAngle2 * Mathf.Deg2Rad) * height * transform.forward;             Vector3 ptLeftForward = ptRectCenter - Mathf.Tan(halfAngle1 * Mathf.Deg2Rad) * height * transform.right + Mathf.Tan(halfAngle2 * Mathf.Deg2Rad) * height * transform.forward;

            Vector3[] ptVectexs = new Vector3[10];             ptVectexs[0] = transform.position;             ptVectexs[1] = transform.position;             ptVectexs[2] = transform.position;             ptVectexs[3] = transform.position;             ptVectexs[4] = transform.position;

            ptVectexs[5] = ptRightForward;             ptVectexs[6] = ptRightBack;             ptVectexs[7] = ptLeftBack;             ptVectexs[8] = ptLeftForward;             ptVectexs[9] = ptLeftForward;

            _meshFilter.mesh.vertices = ptVectexs;             _meshFilter.mesh.RecalculateNormals();             _meshFilter.mesh.RecalculateBounds();         }            }

    void GenMesh()     {         float halfAngle1 = 0.5f * angle1;         float halfAngle2 = 0.5f * angle2;         Vector3 ptRectCenter = transform.position - transform.up * height;         Vector3 ptRightForward = ptRectCenter + Mathf.Tan(halfAngle1 * Mathf.Deg2Rad) * height * transform.right + Mathf.Tan(halfAngle2 * Mathf.Deg2Rad) * height * transform.forward;         Vector3 ptRightBack = ptRectCenter + Mathf.Tan(halfAngle1 * Mathf.Deg2Rad) * height * transform.right - Mathf.Tan(halfAngle2 * Mathf.Deg2Rad) * height * transform.forward;         Vector3 ptLeftBack = ptRectCenter - Mathf.Tan(halfAngle1 * Mathf.Deg2Rad) * height * transform.right - Mathf.Tan(halfAngle2 * Mathf.Deg2Rad) * height * transform.forward;         Vector3 ptLeftForward = ptRectCenter - Mathf.Tan(halfAngle1 * Mathf.Deg2Rad) * height * transform.right + Mathf.Tan(halfAngle2 * Mathf.Deg2Rad) * height * transform.forward;

        //UV         Vector2[] uv1s = new Vector2[10];

        //生成顶点         Vector3[] ptVectexs = new Vector3[10];         ptVectexs[0] = transform.position;         ptVectexs[1] = transform.position;         ptVectexs[2] = transform.position;         ptVectexs[3] = transform.position;         ptVectexs[4] = transform.position;

        ptVectexs[5] = ptRightForward;         ptVectexs[6] = ptRightBack;         ptVectexs[7] = ptLeftBack;         ptVectexs[8] = ptLeftForward;         ptVectexs[9] = ptLeftForward;

        uv1s[0] = new Vector2(0.0f, 1f);         uv1s[1] = new Vector2(0.25f, 1f);         uv1s[2] = new Vector2(0.5f, 1f);         uv1s[3] = new Vector2(0.75f, 1f);         uv1s[4] = new Vector2(1f, 1f);

        uv1s[5] = new Vector2(0.0f, 0f);         uv1s[6] = new Vector2(0.25f, 0f);         uv1s[7] = new Vector2(0.5f, 0f);         uv1s[8] = new Vector2(0.75f, 0f);         uv1s[9] = new Vector2(1f, 0f);

        int[] triangleIndexs = new int[] {             0, 5, 6,             0, 6, 1,             1, 6, 7,             1, 7, 2,             2, 7, 8,             2, 8, 3,             3, 8, 9,             3, 9, 4,             4, 9, 5,             4, 5, 0         };

        Mesh mesh = new Mesh();         mesh.vertices = ptVectexs;         mesh.uv = uv1s;         mesh.triangles = triangleIndexs;

        //计算法向量         mesh.RecalculateNormals();         mesh.RecalculateBounds();

        //开始构建Mesh         _meshFilter = this.gameObject.AddComponent();         _meshFilter.mesh = mesh;

        MeshRenderer meshRender = this.gameObject.AddComponent();         meshRender.sharedMaterial = mat;         meshRender.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;     } }  

关注
打赏
1660743125
查看更多评论
立即登录/注册

微信扫码登录

0.0349s