博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GL基础教程
阅读量:6978 次
发布时间:2019-06-27

本文共 3231 字,大约阅读时间需要 10 分钟。

GL基础教程

1.什么是GL

GL(Graphics Library)是底层图像库,主要是可以使用程序来绘制2D或者3D图形。绘制出来的2D或者3D图形都是以面的形式渲染。

2D图形与3D图形的区别是2D图形在所有3D物体的上方,不会随摄像机的移动而改变,而3D图形会根据摄像机的移动而移动。绘制2D图形需要用到GL库 中的LoadOrtho方法,该方法的作用是做一个正交投影变换,将图形映射在屏幕中,而绘制3D图形与绘制2D唯一不同的是无需调用LoadOrtho方法。

GL可以绘制线段、三角形、三角形带(前三个点组成一个简单三角形,第四个点和前面两个点组成三角形,依次类推)和四边形。

值得注意的是,需要将绘制的内容写在OnPostRender方法中,该方法由系统调用,无法手动调用。只有将绘制图形的脚本 附于相机并启用时才会调用该方法,否则无法显示绘制的图形。

2.绘制直线

using UnityEngine;using System.Collections;public class DrawLineDemo : MonoBehaviour{    private Material mat;    // Use this for initialization    void Start()    {        mat = new Material("Shader \"Lines/Colored Blended\" {" +    "SubShader { Pass {" +    "   BindChannels { Bind \"Color\",color }" +    "   Blend SrcAlpha OneMinusSrcAlpha" +    "   ZWrite Off Cull Off Fog { Mode Off }" +    "} } }");    }    void OnPostRender()    {        GL.PushMatrix();        mat.SetPass(0);        //绘制2D线段,注释掉GL.LoadOrtho();则绘制3D图形        GL.LoadOrtho();        //开始绘制直线类型,需要两个顶点        GL.Begin(GL.LINES);        //绘制起点,绘制的点需在Begin和End之间        GL.Vertex3(0, 0, 0);        GL.Vertex3(1, 1, 0);        GL.End();        GL.PopMatrix();    }}

2.绘制三角形

using UnityEngine;using System.Collections;public class DrawTriangle : MonoBehaviour {    public Material mat;    void Start()    {        mat = new Material("Shader \"Lines/Colored Blended\" {" +"SubShader { Pass {" +"   BindChannels { Bind \"Color\",color }" +"   Blend SrcAlpha OneMinusSrcAlpha" +"   ZWrite Off Cull Off Fog { Mode Off }" +"} } }");        mat.hideFlags = HideFlags.HideAndDontSave;        mat.shader.hideFlags = HideFlags.HideAndDontSave;    }    void Update()    {        if (Input.GetMouseButtonDown(0))        {            Debug.Log("press mousedown");        }    }    private void DrawATriangle( Material mat)    {        GL.PushMatrix();        mat.SetPass(0);        GL.LoadOrtho();        GL.Begin(GL.TRIANGLES);        GL.Vertex3(0.2f, 0.2f, 0);        GL.Vertex3(0.3f, 0.6f, 0);        GL.Vertex3(0.7f, 0.5f, 0);        GL.End();        GL.PopMatrix();    }    void OnPostRender()    {        DrawATriangle( mat);    }}

画四边形

Unity中原点(0,0)是在屏幕的左下角,右上角为(1,1)

using UnityEngine;using System.Collections;public class Draw3DRect : MonoBehaviour {    private Material mat;    // Use this for initialization    void Start () {        mat = new Material("Shader \"Lines/Colored Blended\" {" +    "SubShader { Pass {" +    "   BindChannels { Bind \"Color\",color }" +    "   Blend SrcAlpha OneMinusSrcAlpha" +    "   ZWrite Off Cull Off Fog { Mode Off }" +    "} } }");        mat.hideFlags = HideFlags.HideAndDontSave;        mat.shader.hideFlags = HideFlags.HideAndDontSave;    }    // Update is called once per frame    void Update () {    }    void OnPostRender()    {        GL.PushMatrix();        mat.SetPass(0);        GL.LoadOrtho();        GL.Begin(GL.QUADS);        GL.Color(Color.red);        GL.Vertex3(0, 0.5F, 0);        GL.Vertex3(0.5F, 1, 0);        GL.Vertex3(1, 0.5F, 0);        GL.Vertex3(0.5F, 0, 0);        GL.Color(Color.cyan);        GL.Vertex3(0, 0, 0);        GL.Vertex3(0, 0.25F, 0);        GL.Vertex3(0.25F, 0.25F, 0);        GL.Vertex3(0.25F, 0, 0);        GL.End();        GL.PopMatrix();    }}

画四边形

转载于:https://www.cnblogs.com/Sir6/p/5242776.html

你可能感兴趣的文章
费用保险单,如何失焦时自动补零
查看>>
[设计模式]外观模式
查看>>
贝塞尔曲线学习
查看>>
P4269 [USACO18FEB]Snow Boots G
查看>>
Exceptions Interview Questions
查看>>
《少年派的奇幻漂流》观后感
查看>>
Extjs:添加查看全部按钮
查看>>
UNIX/Linux系统管理技术手册(3)----bash 数组和算术运算
查看>>
LINQ之路19:LINQ to XML之X-DOM更新、和Value属性交互
查看>>
笔记之远程桌面服务(RDS)
查看>>
怎样操作vue.js使用3DES加密
查看>>
js实现点击<li>标签弹出其索引值
查看>>
DIV限制宽度,字符断行,避免变形
查看>>
通过进程ID获得该进程主窗口的句柄
查看>>
快速把web项目部署到weblogic上
查看>>
.Net 文件流 System.IO之Stream
查看>>
Jmeter 笔记
查看>>
一个JS对话框,可以显示其它页面,
查看>>
IDEA ctrl+alt+L 格式化快捷键无效时解决
查看>>
前端小知识
查看>>