使用OpenGL在Unity中画一个框

来源:互联网 发布:域名和url的区别 编辑:程序博客网 时间:2024/05/16 14:22

转载自:http://blog.csdn.net/xv_ly15/article/details/9047509

Unity3D使用的图形引擎是DirectX,OpenGL和自带的APi(Wii)

我们这里使用OpenGL的渲染方式



代码:

(使用过OpenGl的应该相对容易理解

另外:代码中使用Shader是因为矩形框中部的透明部分需要)

    using UnityEngine;      using System.Collections;            public class DrawRect : MonoBehaviour {                private Vector2 mMouseStart, mMouseEnd;          private bool mBDrawMouseRect;                private Material rectMat = null;//画线的材质 不设定系统会用当前材质画线 结果不可控                void Start()          {                    mBDrawMouseRect = false;                    rectMat = new Material("Shader \"Lines/Colored Blended\" {" +                  "SubShader { Pass { " +                  "    Blend SrcAlpha OneMinusSrcAlpha " +                  "    ZWrite Off Cull Off Fog { Mode Off } " +                  "    BindChannels {" +                  "      Bind \"vertex\", vertex Bind \"color\", color }" +                  "} } }");//生成画线的材质              rectMat.hideFlags = HideFlags.HideAndDontSave;              rectMat.shader.hideFlags = HideFlags.HideAndDontSave;          }                void Update()          {              if (Input.GetMouseButtonDown(0))              //按下鼠标左键              {                  Vector3 mousePosition = Input.mousePosition;                  mMouseStart = new Vector2(mousePosition.x, mousePosition.y);              }                    if (Input.GetMouseButton(0))              //持续按下鼠标左键              {                  mBDrawMouseRect = true;                  Vector3 mousePosition = Input.mousePosition;                  mMouseEnd = new Vector2(mousePosition.x, mousePosition.y);              }                    if (Input.GetMouseButtonUp(0))              {                  mBDrawMouseRect = false;              }          }                void OnGUI()          {              if (mBDrawMouseRect)                  Draw(mMouseStart, mMouseEnd);          }                //渲染2D框          void Draw(Vector2 start, Vector2 end)          {              rectMat.SetPass(0);                    GL.PushMatrix();//保存摄像机变换矩阵                    Color clr = Color.green;              clr.a = 0.1f;                    GL.LoadPixelMatrix();//设置用屏幕坐标绘图              //透明框              GL.Begin(GL.QUADS);              GL.Color(clr);              GL.Vertex3(start.x, start.y, 0);              GL.Vertex3(end.x, start.y, 0);              GL.Vertex3(end.x, end.y, 0);              GL.Vertex3(start.x, end.y, 0);              GL.End();                    //线              //上              GL.Begin(GL.LINES);              GL.Color(Color.green);              GL.Vertex3(start.x, start.y, 0);              GL.Vertex3(end.x, start.y, 0);              GL.End();                    //下              GL.Begin(GL.LINES);              GL.Color(Color.green);              GL.Vertex3(start.x, end.y, 0);              GL.Vertex3(end.x, end.y, 0);              GL.End();                    //左              GL.Begin(GL.LINES);              GL.Color(Color.green);              GL.Vertex3(start.x, start.y, 0);              GL.Vertex3(start.x, end.y, 0);              GL.End();                    //右              GL.Begin(GL.LINES);              GL.Color(Color.green);              GL.Vertex3(end.x, start.y, 0);              GL.Vertex3(end.x, end.y, 0);              GL.End();                    GL.PopMatrix();//还原          }      }  


1 0
原创粉丝点击