zoukankan      html  css  js  c++  java
  • unity3d 使用GL 方式画线

    这个是画线部分
    private Vector3[] linePoints;
        public int m_LineCount;
        public int m_PointUsed;
    
    
    
     public void RenderPath()
        {
            
            GL.Begin(GL.LINES);
    
            for (int i = 0; i < m_LineCount - 1; ++i)
            {
    
                GL.Vertex(GetPoint(i));
    
                GL.Vertex(GetPoint(i + 1));
    
            }
    
            GL.End();
        }

    但是这个画线部分要放到   void OnPostRender() 这个函数里面去

    void OnPostRender()
        {
           
            GL.Color(Color.red);
            GL.PushMatrix();
            mat.SetPass(0);
            m_linePath[0].RenderPath();
            m_linePath[1].RenderPath();
            m_linePath[2].RenderPath();
    
            GL.PopMatrix();
        }

    而void OnPostRender() 这个函数的类的脚本需要绑定到摄像机上面才能显示线条,绑定其他物体是不行的

    class MiCirle
    { 
        private  Vector3[] linePoints;
        private int m_PointCount = 0;
        private Vector3 m_EarthPos;
    
        public void Init(Vector3 _Pos,float _s)
        {
            m_EarthPos = _Pos;
            linePoints = new Vector3[390];
    
            CompliteAllPoint(_s);
        
        }
    
        float DegreetoRadians(float x)
        {
            return x * 0.017453292519943295769f;
        }
    
        float RadianstoDegrees(float x)
        {
            return x * 57.295779513082321f;
        }
    
    
    
        void AddPoint(Vector3 _vec)
        {
            linePoints[m_PointCount++] = _vec;
    
    
        }
        Vector3 GetPoint(int _x)
        {
            if (_x > 360)
                return new Vector3(0, 0, 0);
            else
                return linePoints[_x];
    
        }
    
        void CompliteAllPoint(float _size)
        {
            float angle = 0;
            float SizeX = _size;
           
            for (int i = 0; i < 361; i++)
            {
                float XPos = Mathf.Sin(DegreetoRadians(i)) * SizeX;
                float YPos = Mathf.Cos(DegreetoRadians(i)) * SizeX;
    
              
    
    
                Vector3 temp = new Vector3(m_EarthPos.x + XPos, m_EarthPos.y + YPos, m_EarthPos.z);
               
    
    
                AddPoint(temp);
    
            }
    
        }
    
        public void RenderLines()
        {
            GL.Begin(GL.LINES);
    
            for (int i = 0; i < 360; ++i)
            {
                GL.Color(Color.white);
                GL.Vertex(GetPoint(i));
    
                GL.Vertex(GetPoint(i + 1));
            }
    
            GL.End();
    
        }
    
        public void RenderVirtualLine()
        { 
            
        
        }
    
    
    };

    调用则:

    public class MainScript : MonoBehaviour
    {
        public GameObject m_ObjEarth;
        public GameObject m_ObjMoon;
    
      
        private int m_LineCount =0;
        private MiCirle m_CircleNomal;
        private MiCirle m_CircleBig;
        private MiCirle m_CircleSmall;
    
    
        private Vector3 m_EarthPos;
        private Material lineMaterial;
    
      
        void Start ()
        {
            
    
            m_EarthPos = m_ObjEarth.transform.position;
            m_CircleNomal = new MiCirle();
            m_CircleBig = new MiCirle();
            m_CircleSmall = new MiCirle();
    
    
            m_CircleNomal.Init(m_EarthPos,3.5f);
            m_CircleBig.Init(m_EarthPos,4.0f);
            m_CircleSmall.Init(m_EarthPos,3.0f);
    
            lineMaterial = new Material("Shader "Lines/Colored Blended" {" +
                    "SubShader { Pass {" +
                "   BindChannels { Bind "Color",color }" +
                "   Blend SrcAlpha OneMinusSrcAlpha" +
                "   ZWrite Off Cull Off Fog { Mode Off }" +
                "} } }");
    
            lineMaterial.hideFlags = HideFlags.HideAndDontSave;
    
            lineMaterial.shader.hideFlags = HideFlags.HideAndDontSave;
    
            
        }
        
        // Update is called once per frame
        void Update () 
        {
        
        }
    
      
    
        void OnPostRender()
        {
            lineMaterial.SetPass(0);
    
          //  Debug.Log("Render lines");
    
            GL.Color(Color.red);
            GL.PushMatrix();
            m_CircleNomal.RenderLines();
            m_CircleBig.RenderLines();
            m_CircleSmall.RenderLines();
    
    
            GL.PopMatrix();
        }
    }
    View Code
  • 相关阅读:
    Splashtop :符合 HIPAA 标准的远程桌面软件
    学生如何在家中访问学校许可的软件
    Splashtop用于远程实验室的功能得到增强
    docker环境安装,镜像和容器常用命令
    vue-cli入门
    webpack快速入门
    Vue路由vue-router
    Vue组件化
    Vue指令
    Vue实例
  • 原文地址:https://www.cnblogs.com/dragon2012/p/4054760.html
Copyright © 2011-2022 走看看