unity3d 使用GL 方式画线

转载 2016年08月30日 18:13:34
这个是画线部分
复制代码
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();
    }
}
复制代码

图形化调试 - unity使用GL库画线

图形化调试可以加速开发。 例如在战斗中,可能需要知道所有单位的仇恨值,如果这些信息全打log的话,很难有直观感受, 而如果在Scene窗口里,单位头顶有一个球,越红表示仇恨越高,越暗表示仇...

【Unity】Unity 几种画线方式

转载地址:http://blog.sina.com.cn/s/blog_471132920101gxzf.html 【前言】 图形化调试可以加速开发。 例如在战斗中,可能需要...

unity3d 使用GL 方式画线

这个是画线部分 private Vector3[] linePoints; public int m_LineCount; public int m_PointUsed; ...

[脚本] Unity3d 如何用GL画线

var e : Event; private var cur : int = 0; private var orgPos; private var endPos; static var lineMat...

【Unity3d开发记录】Unity动态画曲线、弧线(GL画线)在UI上的显示

开发过程中遇到了一个问题,在UI上动态画弧线,花了一天的时间,终于解决了,拿来和大家分享一下(个人场景里只有UI)。 我才用的动态画线的方法是GL画线,有一定的性能开销,unity版本5.3.2.。...

Unity3d Unity 几种画线方式

【前言】 图形化调试可以加速开发。 例如在战斗中,可能需要知道所有单位的仇恨值,如果这些信息全打log的话,很难有直观感受, 而如果在Scene窗口里,单位头顶有一个球,越红表示仇恨越高,越暗表示仇恨...

[Unity3D]使用GL实现图案解锁功能

聊天是时候看到有人问如何在Unity3D的UGUI中实现图案解锁的功能,然后便试了一下。刚开始想用LineRender来实现,但又一想是要在UGUI中,然后就用了另外一种方法,即使用GL类来实现。 ...

Unity3D 使用 GL 绘制线条

本文永久地址:http://www.omuying.com/article/77.aspx,【文章转载请注明出处!】 在前两篇中,我们使用了 Graphics(查看详情)以及 Line Rend...

Unity3d LineRenderer画线

LineRenderer线渲染器主要是用于在3D中渲染线段,虽然我们也可以使用GL图像库来渲染线段,但是使用LineRenderer我们可以对线段进行更多的操作,例如:设置颜色,宽度等。在这里要注意L...

unity3d NavMeshAgent 寻路画线/画路径

今天在群里看见有个小伙在问Game视图寻路时怎么画线。更多精彩请关注【狗刨学习网】               正好前几天写了个寻路,而且自己也不知道具体怎么在寻路时画线,所以决定帮帮他,...
  • Carl180
  • Carl180
  • 2015年02月01日 23:19
  • 549
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:unity3d 使用GL 方式画线
举报原因:
原因补充:

(最多只允许输入30个字)