使用OpenGL在Unity中画一个框
2015-12-30 21:46
429 查看
转载自:http://blog.csdn.net/xv_ly15/article/details/9047509
Unity3D使用的图形引擎是DirectX,OpenGL和自带的APi(Wii)
我们这里使用OpenGL的渲染方式
代码:
(使用过OpenGl的应该相对容易理解
另外:代码中使用Shader是因为矩形框中部的透明部分需要)
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();//还原 } }
相关文章推荐
- 解决Vista系统OpenGL驱动问题的方法整理
- Delphi下OpenGL2d绘图之画四边形的方法
- Delphi下OpenGL2d绘图之画点的方法
- Delphi下OpenGL2d绘图之初始化流程详解
- Delphi使用OpenGL2d绘图之画图片Bmp的方法
- 通过OpenGL ES混合模式缩放视频缓冲区来适应显示尺寸
- VC运用OPENGL加载BMP纹理图的实现方法汇总
- java实现OpenGL ES纹理映射的方法
- java基于OpenGL ES实现渲染实例
- OpenGL坐标系介绍
- 【翻译】安卓opengl ES教程之四——添加颜色
- linux下opengl的安装(with qt)
- OpenGL超级宝典笔记——显示列表
- OpenGL超级宝典笔记——顶点数组
- OpenGL生成轮廓
- OpenGL超级宝典笔记——性能比较
- OpenGL超级宝典笔记——顶点缓冲区对象
- OpenGL超级宝典笔记——选择
- OpenGL超级宝典笔记——反馈
- OpenGL超级宝典笔记——遮挡查询