网站大量收购独家精品文档,联系QQ:2885784924

关于unity3D的GL图像库的使用.doc

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于unity3D的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坐标) = 250public 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轴位置:894public 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();//表示开始绘制,绘制类型为线段GL.Begin(GL.LINES);//得到鼠标信息的总数量int size=lineInfo.Count;//遍历鼠标点的链表for(int i=0

您可能关注的文档

文档评论(0)

wf93679 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档