[Unity基础]GL图像库
GL图像库主要用来绘制常见的2d和3d几何图形。使用GL图像库,可在屏幕中绘制2d几何图形,并且该几何图形将永远显示在屏幕当中,不会因为摄像机的移动而改变。
值得注意的是,绘制2d图像时,需要使用GL.LoadOrtho()方法来将图形映射在平面中;如果绘制的是3d图形,就无须使用此方法。
使用GL图像库时,需要将所有绘制相关的内容写在OnPostRender()方法中。有关GL图像库的脚本需要绑定在摄像机中。
GL图像库的平面坐标系:原点在左下角,x轴与y轴的最大值为1。
一、绘制线
using UnityEngine;
using System.Collections;public class DrawLine : MonoBehaviour {public Material material;void OnPostRender(){material.SetPass(0);//设置该材质通道,0为默认值GL.LoadOrtho();//设置绘制2d图像GL.Begin(GL.LINES);//绘制类型为线段Draw(0, 0, 200, 100);Draw(0, 50, 200, 150);Draw(0, 100, 200, 200);GL.End();}//将屏幕中某个点的像素坐标进行转换void Draw(float x1,float y1,float x2,float y2){GL.Vertex(new Vector3(x1 / Screen.width, y1 / Screen.height, 0));GL.Vertex(new Vector3(x2 / Screen.width, y2 / Screen.height, 0));}
}
二、绘制曲线
using UnityEngine;
using System.Collections.Generic;/// <summary>
/// 记录鼠标坐标,再两两连线
/// </summary>
public class DrawCurve : MonoBehaviour {public Material material;private List<Vector3> lineInfo = new List<Vector3>();void Update () {lineInfo.Add(Input.mousePosition);}void OnPostRender(){material.SetPass(0);//设置该材质通道,0为默认值GL.LoadOrtho();//设置绘制2d图像GL.Begin(GL.LINES);//绘制类型为线段for (int i = 0; i < lineInfo.Count - 1; i++){Vector3 start = lineInfo[i];Vector3 end = lineInfo[i + 1];Draw(start.x,start.y,end.x,end.y);}GL.End();}//将屏幕中某个点的像素坐标进行转换void Draw(float x1, float y1, float x2, float y2){GL.Vertex(new Vector3(x1 / Screen.width, y1 / Screen.height, 0));GL.Vertex(new Vector3(x2 / Screen.width, y2 / Screen.height, 0));}
}
三、绘制四边形
using UnityEngine;
using System.Collections;public class DrawQuad : MonoBehaviour {public Material material;void OnPostRender(){//绘制正四边形,提供的坐标必须是顺时针或者逆时针Draw(100, 100, 100, 200, 200, 200, 200, 100);//绘制无规则四边形Draw(15, 5, 10, 115, 95, 110, 90, 10);}//绘制四边形,四个点坐标void Draw(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4){GL.PushMatrix();material.SetPass(0);//设置该材质通道,0为默认值GL.LoadOrtho();//设置绘制2d图像GL.Begin(GL.QUADS);//绘制类型为四边形GL.Vertex3(x1 / Screen.width, y1 / Screen.height, 0);GL.Vertex3(x2 / Screen.width, y2 / Screen.height, 0);GL.Vertex3(x3 / Screen.width, y3 / Screen.height, 0);GL.Vertex3(x4 / Screen.width, y4 / Screen.height, 0);GL.End();GL.PopMatrix();}
}
四、绘制三角形
using UnityEngine;
using System.Collections;public class DrawTriangle : MonoBehaviour {public Material material;void OnPostRender(){Draw(100,0,100,200,200,100);}void Draw(float x1, float y1, float x2, float y2, float x3, float y3){material.SetPass(0);//设置该材质通道,0为默认值GL.LoadOrtho();//设置绘制2d图像GL.Begin(GL.TRIANGLES);//绘制类型为三角形GL.Vertex3(x1 / Screen.width, y1 / Screen.height, 0);GL.Vertex3(x2 / Screen.width, y2 / Screen.height, 0);GL.Vertex3(x3 / Screen.width, y3 / Screen.height, 0);GL.End();}
}
五、绘制3d几何图形
操作十分简单,就是将GL.LoadOrtho();注释掉即可
原来图形不会随摄像机的移动、旋转而变化,现在则会。
[Unity基础]GL图像库相关推荐
- Unity基础开发之事件函数的执行顺序
Unity基础开发之事件函数的执行顺序 文章目录 前言 一.Initializtion阶段 Awake() OnEnable() 二.Editor阶段 Reset() OnValidate() 三.第 ...
- Unity开发(一).Unity基础以及开发环境搭建
1. Unity基础知识概括 1)初识 Unity 由 Unity Technologies开发,创建三维视频游戏,建筑可视化及实时三维动画等互动内容的多平台的综合性开发工具. 编辑器运行平台:Win ...
- 第一阶段unity基础
第一阶段unity基础 引言 注意: 1.重点:1.适用性(什么时候用,怎么用)<记脑子里> 2.作用(能够解决什么问题) 3.定义 4.操作/语法 2.每天练习必须会独立完成 3.形 ...
- Unity用GL接口实现画格子
玩过COC的知道,地表上有格子显示.以下是用GL的画线接口实现. 效果如下 shder代码参考我另篇文章 Unity用GL接口实现画圆 以下c#代码.提醒下,调用脚本依然是挂在相机上. using S ...
- Unity基础学习路线
Unity基础 C#程序设计 第001课初识unity 第002课初始unity场景树_渲染体系_物理体系 第003课初识Unity C#的基本结构_类_成员_类的函数 第004课Unity ...
- Unity 基础 之 xml 使用 Office Excel 轻松编辑保存 xml 数据,并解析读取数据
Unity 基础 之 xml 使用 Office Excel 轻松编辑保存 xml 数据 目录 Unity 基础 之 xml 使用 Office Excel 轻松编辑保存 xml 数据 一.简单介 ...
- Unity 基础 之 在 UGUI 上简单实现VideoPlayer视频播放的功能,简单暂停播放/显示视频名称/显示时长/拖拽播放等
Unity 基础 之 在 UGUI 上简单实现VideoPlayer视频播放的功能,简单暂停播放/显示视频名称/显示时长/拖拽播放等 目录 Unity 基础 之 在 UGUI 上简单实现VideoPl ...
- Unity 基础 之 一个点(物体)绕另一个点(物体)旋转的简单封装
Unity 基础 之 一个点(物体)绕另一个点(物体)旋转的简单封装 目录 Unity 基础 之 一个点(物体)绕另一个点(物体)旋转的简单封装 一.简单介绍 二.实现原理 三.注意事项 四.效果预览 ...
- Unity3D笔记十八 GL图像库
作者:PEPE 出处:http://pepe.cnblogs.com/ 1.绘制2D图像的时需要使用GL.LoadOrtho()方法来将图形映射到平面中. 2.所有绘制相关的内容都要写在OnPost ...
最新文章
- XDC约束技巧之时钟篇
- 心得体悟帖---18、时间
- go 从入门到精通(二)基本数据类型和操作符
- AIX学习之NMON工具详解
- 具体数学第二版第二章习题(2)
- 十大常用算法之马踏棋盘算法
- 8位数控分频器的设计_数控分频器的VHDL设计
- 玩转SpringCloud(F版本) 四.路由网关(zuul)
- B - Silly Mistake set +思维
- html i标签是什么意思,html中为什么用i标签i/i作小图标
- Chrome 浏览器翻译停服!改Hosts也失效!还有这些解决方案
- 手机端上传图片出现“没有应用可执行操作”
- Outlook登录163邮箱,qq邮箱以及企业邮箱等邮箱
- 微信小程序iconfont不显示解决
- 其实,搭建一个有品质的棋牌游戏平台没那么复杂
- 并行并发CMS垃圾回收器:-XX:+UseConcMarkSweepGC
- 机器学习词汇翻译解释(2)
- (信贷风控七)申请评分卡模型Python实现(图文+代码实现)
- 手把手教你画AndroidK线分时图及指标
- “上云 用数 赋智”,这说的不是数字中台吗?
热门文章
- mall-swarm微服务商城系统
- P1162 填图颜色 洛谷(BFS的简单应用)
- Android优雅的ui倒计时,Hurry - 一款颜值超高的日历+倒计时 APP - Android 应用 - 生活 - 【最美应用】...
- Redis 6 学习记录
- 【AxureRP9】V1.0网易课堂课程
- 未来影像!华为P30国行版售价曝光:徕卡四摄+超级变焦,3988元起
- ArGIS计算多个栅格均值、最大值等
- python新年贺卡_写个新年贺卡生成器,各位小伙伴们新年快乐呀~
- 常见的异常类有哪些?
- 名帖116 文徵明 小楷《离骚经》