关于uniy3D的GL图像库的使用.docVIP

  • 6
  • 0
  • 约11.42万字
  • 约 23页
  • 2016-12-08 发布于河南
  • 举报
关于uniy3D的GL图像库的使用

关于unity3D的GL图像库的使用 7.5 GL图象库 GL图象库是底层的图象库,主要功能是使用程序来绘制常见的2D与3D几何图形。这些图形具有一定的特殊性,他们不属于3D网格图形, 只会以面的形式渲染。使用GL图象库,可在屏幕中绘制2D几何图形,并且该几何图形将永远显示在屏幕当中,不会因为摄象机的移动而 改变。2D图形的呈现方式和前面章节介绍的GUI有点类似,值得注意的是,绘制2D图像时,需要使用GL.LoadOrtho()方法将图形映射在 平面中;如果绘制的是3D图形,就无须使用此方法。 使用GL图象库时,需要将所有绘制相关的内容写在OnPostRender()方法中。此方法由系统自身调用,无法手动调用。此外,有关GL图象 库的脚本需要绑定在Hierarchy视图中的摄象机对象当中,否则将无法显示绘制的图形 绘制线 在了解如何绘制线之前,先熟悉Unity中GL图象库的平面坐标系。按照箭头所指的方向,平面坐标系的原点(0,0)位于左下脚。 值得注意的是,GL图象库的平面坐标和普通坐标是有区别的,GL图象库的x轴的最大值是1,y轴的最大值也为1,而不是按照像素 来计算的,因此,在GL图象库的平面坐标系中,每个点的横坐标和纵坐标都应当是0与1之间的浮点数,而真实的像素坐标需要根据这 个浮点数来计算。 比如当前游戏屏幕的像素宽高是500*500,在GL图象库平面上选择一个点(0.5f,0.5f),那么这个点的真实像素的横坐标和纵坐标应 当是:500(屏幕宽)*0.5(x坐标) = 250 500(屏幕高)*0.5(x坐标) = 250 public class Script:MonoBehaviour { //绘制线段材质 public Material material; //此绘制方法由系统调用 void OnPostRender() { if(!material) { Debug.LogError(“请给材质资源赋值”); Return; } //设置该材质通道,0为默认值 Material.SetPass(0); GL.LoadOrtho(); //表示开始绘制,绘制类型为线段 GL.Begin(GL.LINES); //绘制线段 DrawLine(0,0,200,100); DrawLine(0,50,200,100); DrawLine(0,100,200,200); GL.End(); } void DrawLine(float x1,float y1;float x2,float y2) { //绘制线段,需要将屏幕中某个点的像素坐标点除以屏幕完成宽或高 GL.Vetex(new Vector3(x1/Screen.width,y1/Screen.height,0)); GL.Vetex(new Vector3(x2/Screen.width,y2/Screen.height,0)); } 7.5.2实例----绘制曲线(228) 本例通过GL图象库记录鼠标移动的轨迹并且将其以曲线的形式显示在屏幕当中,如图所示,具体实现原理是:记录鼠标在Game视图中移动 时每一点的坐标,然后将鼠标移动的坐标存储在链表中,使用绘制方法OnPostRender()遍历链表中记录的鼠标坐标点,最后通过GL图象库 绘制线段的方法将这些点两两连成一条线段 当前鼠标x轴位置:835 当前鼠标y轴位置:894 public class Script:MonoBehaviour { //绘制线段材质 public Material material; Private ListVector lineInfo; void Start() { //初始化鼠标线段链表 lineInfo = new ListVector3(); } void Update() { //将每次鼠标改变的位置存储进链表 lineInfo.Add(Input.mousePosition); } void OnGUI() { GUILayout.Label(“当前鼠标x轴位置:” +Input.mousePosition.x) GUILayout.Label(“当前鼠标y轴位置:”+Input.mousePosition.y) } //此绘制方法又系统调用 void OnPostRender(){ if(!material) { Debug.LogError(“请给材质资源赋值”); Return; } //设置该材质通道,0为默认值 material.SetPass(0); //设置绘制2D图象 GL.LoadOrtho(); //表示开始绘制,

文档评论(0)

1亿VIP精品文档

相关文档