unity制作线角三以及四边形.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
unity制作线角三以及四边形

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坐标) = 250500(屏幕高)*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;isize-1;i++){Vector3 start = lineInfo[i];Vector3 end = lineInfo[i+1];//绘制线段DrawLi

文档评论(0)

love3892 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档