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(); } }
分类:
unity3d
posted on 2014-10-27 17:40 c_dragon 阅读(18396) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能