u3d mesh构造

u3d  mesh的组织方法  ,u3d 默认的mesh构造方法是三角形,即index指向三个点,那么这三个点就会被连接成三角形,

那么之前必须先申请很多点,uv,法线,然后设置点,index即可,有一点需要注意就是 ,u3d里面必须逆时针绘制才会显示面,否则不显示,以下代码先记录

using UnityEngine;
using System.Collections;

public class LiDiBoxOne : MonoBehaviour
{
    private GameObject TObj;

    public Material Tmeterial;
    public float THeight;
    private Mesh teMesh;

    private int MNUMPOINT = 12100;
    private Vector3[] vertex;
    private Vector2[] uvs;
    private int[] trangles;
    private Vector4[] tangents;

    private Vector3 m_OldPos;
    private Vector3 m_OldLeftPos;
    private Vector3 m_OldRightPos;

    private int m_Step;
    // Use this for initialization
    void Start()
    {
        m_Step = 0;
        m_OldPos = new Vector3(0, 0, 0);

        TObj = new GameObject();
        TObj.name = "abc";
        TObj.transform.position = new Vector3(0, 0, 0);

        vertex = new Vector3[MNUMPOINT];
        uvs = new Vector2[MNUMPOINT];
        tangents = new Vector4[MNUMPOINT];

        trangles = new int[MNUMPOINT *12];

        TObj.gameObject.AddComponent<MeshFilter>();
        TObj.gameObject.AddComponent("MeshRenderer");
        if (Tmeterial)
            TObj.renderer.material = Tmeterial;
        else
            TObj.renderer.material.color = Color.white;

        teMesh = new Mesh();

    }

    // Update is called once per frame
    void Update()
    {
        LidiNewAction();

    }

    void LidiOldAction()
    {
        Vector3 mTempPositionCar = this.transform.position;
        Vector3 mTempPosition = new Vector3(mTempPositionCar.x, THeight, mTempPositionCar.z);

        if (Vector3.Distance(m_OldPos, mTempPosition) > 4.0f)
        {
            Vector3 m_leftstep = this.transform.right * 4.50f;

            Vector3 m_left = mTempPosition - m_leftstep;
            Vector3 m_right = mTempPosition + m_leftstep;
            float PointDis;
            for (int j = 0; j < 2; ++j)
            {
                if (j == 0)
                {
                    vertex[m_Step * 2 + j] = new Vector3(m_left.x, THeight, m_left.z);

                    PointDis = 0;

                    uvs[m_Step * 2 + j] = new Vector2(0.0f, m_Step);
                    m_OldLeftPos = new Vector3(m_left.x, THeight, m_left.z);
                }
                else
                {
                    vertex[m_Step * 2 + j] = new Vector3(m_right.x, THeight, m_right.z);
                    uvs[m_Step * 2 + j] = new Vector2(1.0f, m_Step);

                    m_OldRightPos = new Vector3(m_right.x, THeight, m_right.z);
                }

                tangents[m_Step * 2 + j] = new Vector4(0, 1, 0, 1);

            }

            if (m_Step > 0)
            {
                int ggtemp = m_Step - 1;

                trangles[ggtemp * 6 + 0] = ggtemp * 2;
                trangles[ggtemp * 6 + 1] = ggtemp * 2 + 2;
                trangles[ggtemp * 6 + 2] = ggtemp * 2 + 1;

                trangles[ggtemp * 6 + 3] = ggtemp * 2 + 2;
                trangles[ggtemp * 6 + 4] = ggtemp * 2 + 3;
                trangles[ggtemp * 6 + 5] = ggtemp * 2 + 1;
            }

            teMesh.vertices = vertex;
            teMesh.uv = uvs;

            teMesh.triangles = trangles;
            teMesh.RecalculateNormals();
            teMesh.RecalculateBounds();
            teMesh.tangents = tangents;
            TObj.GetComponent<MeshFilter>().mesh = teMesh;

            m_Step++;

            m_OldPos = mTempPosition;
        }

    }

    void LidiNewAction()
    {
        Vector3 mTempPosition = this.transform.position;
        Vector3 m_leftstep = this.transform.right * 6.50f;
        Vector3 m_leftPos = mTempPosition - m_leftstep;
        Vector3 m_rightPos = mTempPosition + m_leftstep;

        float disleft = Vector3.Distance(m_leftPos, m_OldLeftPos);
        float disright = Vector3.Distance(m_rightPos, m_OldRightPos);

        if (disleft > 1.5250f || disright > 1.525f)
        {
            for (int j = 0; j < 3; ++j)
            {
                if (j == 0)
                {
                    vertex[m_Step * 3 + j] = new Vector3(m_leftPos.x, THeight, m_leftPos.z);
                    uvs[m_Step * 3 + j] = new Vector2(0.0f, m_Step *0.25f);
                }

                if (j == 1)
                {
                    vertex[m_Step * 3 + j] = new Vector3(mTempPosition.x, THeight, mTempPosition.z);
                    uvs[m_Step * 3 + j] = new Vector2(0.5f, m_Step *0.25f);
                }

                if (j == 2)
                {
                    vertex[m_Step * 3 + j] = new Vector3(m_rightPos.x, THeight, m_rightPos.z);
                    uvs[m_Step * 3 + j] = new Vector2(1.0f, m_Step *0.25f);

                }

                // tangents[m_Step * 2 + j] = new Vector4(0, 1, 0, 1);

            }

            if (m_Step > 0)
            {
                int ggtemp = m_Step - 1;

                trangles[ggtemp * 12 + 0] = ggtemp * 3;
                trangles[ggtemp * 12 + 1] = ggtemp * 3 + 3;
                trangles[ggtemp * 12 + 2] = ggtemp * 3 + 4;

                trangles[ggtemp * 12 + 3] = ggtemp * 3 + 0;
                trangles[ggtemp * 12 + 4] = ggtemp * 3 + 4;
                trangles[ggtemp * 12 + 5] = ggtemp * 3 + 1;

                trangles[ggtemp * 12 + 6] = ggtemp * 3 + 1;
                trangles[ggtemp * 12 + 7] = ggtemp * 3 + 4;
                trangles[ggtemp * 12 + 8] = ggtemp * 3 + 2;

                trangles[ggtemp * 12 + 9] = ggtemp * 3 + 2;
                trangles[ggtemp * 12 + 10] = ggtemp * 3 + 4;
                trangles[ggtemp * 12 + 11] = ggtemp * 3 + 5;

            }

            teMesh.vertices = vertex;
            teMesh.uv = uvs;

            teMesh.triangles = trangles;
            teMesh.RecalculateNormals();
            teMesh.RecalculateBounds();
            teMesh.tangents = tangents;

            TObj.GetComponent<MeshFilter>().mesh = teMesh;

            m_Step++;

            m_OldLeftPos = m_leftPos;
            m_OldRightPos = m_rightPos;
            m_OldPos = mTempPosition;
        }

    }
}

u3d mesh构造,布布扣,bubuko.com

时间: 2024-10-24 03:24:35

u3d mesh构造的相关文章

unity mesh baker(游戏场景优化插件)

模型+灯光测试结果: 执行之前使用的Draw Calls和内存 执行之后使用的Draw Calls和内存 ?模型合并规则: 1.非同样的静态模型才需要合并 同样模型(复制的)不用合并 2.UV无重复的模型可用Mesh Baker合并 重复的Mesh Baker会出错 有需要可以在制作软件里合并 3.使用同样材质模型可以合并 使用不同材质的模型不能合并 4.合并模型贴图大小必须为2的N次幂 需选择合适大小以免浪费空间或效果不理想 不要通过贴图设置另外更改大小 灯光烘焙优化场景效果和资源方法: 1.

Unity3d修炼之路:用Mesh绘制一个Cube

#pragma strict function Awake(){ var pMeshFilter : MeshFilter = gameObject.AddComponent(typeof(MeshFilter)) as MeshFilter;//网格过滤器 var pMeshRender : MeshRenderer = gameObject.AddComponent(typeof(MeshRenderer)) as MeshRenderer;//网格渲染 var pMesh : Mesh =

U3D优化

容易忽略的美术资源的优化: 优化的美术制作真是一种感觉和经验的积累,能看出制作水平的不是做的效果多么犀利,而是得看制作的效果与对机器的要求等的性价比. 关于合并:  100个三角形的MESH,在渲染时与1500个面数的物体是没太大差别的,最佳的渲染设置应该在每个模型大约1500-4000个三角面. 材质共享:  如果需要通过脚本来访问复用材质属性,改变Renderer.material将会造成一份材质的拷贝.应该使用Renderer.sharedMaterial来保证材质的共享状态. 批处理动态

Unity Mesh 初体验

什么是Mesh Mesh是Unity中的一个组件,称为网格组件.通俗的讲,Mesh是指模型的网格,3D模型是由多边形拼接而成,而一个复杂的多边形,实际上是由多个三角面拼接而成.所以一个3D模型的表面是由多个彼此相连的三角面构成.三维空间中,构成这些三角面的点以及三角形的边的集合就是Mesh.如下图所示: mesh.png 所以建模型就是就是要画一些列的三角形,而定位一个三角形就是只需要3个顶点而已.很简单哦. 比如我们要画一个五边形,如下: demo1.png 它有五个顶点,但是在Unity中是

u3d 元件的克隆 Cloning of u3d components

u3d 元件的克隆 Cloning of u3d components 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:[email protected] E-mail: 313134555 @qq.com 按住 alt键 ,可以在场景视图中 旋转视角. Hold Alt and you can rotate the view in the scene view. 平面 plane 的 网格渲染器 mesh renderer 性能消耗比较大 The performance

u3d性能优化

原文地址:http://blog.csdn.net/molti/article/details/8520418 性能优化需要从多方面入手,大家在项目中遇到的问题还是很普遍的,欢迎大家补充. 图形方面: 1. AlphaBlen优于AlphaTest.乍一看,以为是说错了,之前在为性能优化寻找突破点的时候,以为的在u3d的官方文档中看到,说是移动设备为AlphaBlen做了非常多的优化,而使用AlphaTest返回会降低性能,和传统的端游图形有很大不同哦. 内存/显存的占用: 1. 尽力少单场景复

U3D开发性能优化笔记(待增加版本)

U3D开发性能优化笔记: .NGUI: Atlas优化; .poolmanager使用; .控制同屏drawcall次数; .SHADER优化顶点和运算; .合批与动态剔除; .逻辑部分优化;(如看到不到的物件不要做公告板位置运算,不要播放animation) .物理帧UPDATE降低; .关闭垂直同步,降低图片采样,声音预加载 方案 等等 ..; .模型骨骼不要超过32根; .贴图不要太大,建议512 *512 以下; .少用 CUTOFF和 aplha混合; .3D游戏效率基本原则就是费内存

U3D游戏开发要思考的问题

狗刨学习网--欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,我们致力于打造业内unity3d培训.学习第一品牌. 代码驱动带来的技术题 游戏碎片化.U3D 引擎有个很有力的特色,就是实时编译运行.这意味着无论在任何时候,只要按下运行图标,当前的场景就会进入可执行状态.这导致了游戏在开发的过程中经常陷入一种不应当的自信状态.同时也导致了游戏内容长期处在碎片状态下,并低估游戏功能整合时可能遇到的困

Robust Mesh Watermarking

之前看了一篇题为"Robust Mesh Watermarking"的论文,查阅资料的时候发现了一篇与之很相似的名为"三维模型数字水印系统的设计与实现"的中文论文,在中文论文的帮助下,总算对网格水印有了一定的了解,简单整理了一下. 由于知识版权保护的需要,数字水印技术应运而生.目前,图像.视频.音频.文本的水印研究已经比较成熟,但是三维模型水印的研究还相对匮乏.然而随着三维模型在网络上传播的日益增多,三维模型知识版权的保护也有了一定的研究意义.由于三维模型自身的特点