文章目录

  • 1.前言
  • 2.绘制简单图形
    • 2.1 绘制圆环
    • 2.2 绘制三角形
    • 2.3 绘制四边形
    • 2.4 绘制圆形面
    • 2.5 绘制立方体
  • 3.完整代码

1.前言

在GL简介中已经对GL方法的使用做了详细的说明,此文则是对GL方法的一些简单应用实例。

2.绘制简单图形

基本参数变量如下所示:

    public int circleCount = 6;public int circleRadius = 3;public int triangleSize = 2;public int quadSize = 2;

2.1 绘制圆环

基于GL.LINES通过绘制线来生成圆。代码如下:

    private void DrawCircle(){float angleDelta = 2 * Mathf.PI / circleCount;GL.Begin(GL.LINES);GL.Color(Color.red);for (int i = 0; i < circleCount; i++){float angle = angleDelta * i;float angleNext = angle + angleDelta;GL.Vertex3(Mathf.Cos(angle) * circleRadius, Mathf.Sin(angle) * circleRadius, 0);GL.Vertex3(Mathf.Cos(angleNext) * circleRadius, Mathf.Sin(angleNext) * circleRadius, 0);}GL.End();}

2.2 绘制三角形

绘制三角形平面

    private void DrawTriangle(){GL.Begin(GL.TRIANGLES);GL.Color(Color.green);GL.Vertex3(-triangleSize, -triangleSize, 0);GL.Color(Color.black);GL.Vertex3(triangleSize, -triangleSize, 0);GL.Color(Color.red);GL.Vertex3(0, triangleSize, 0);GL.End();}

2.3 绘制四边形

绘制四边形平面

    private void DrawQuad(){GL.Begin(GL.QUADS);GL.Color(Color.blue);GL.Vertex3(-quadSize, -quadSize, 0);GL.Vertex3(quadSize, -quadSize, 0);GL.Vertex3(quadSize, quadSize, 0);GL.Vertex3(-quadSize, quadSize, 0);GL.End();}

2.4 绘制圆形面

在2.1中通过线绘制圆形环,此节通过三角形绘制圆面

   private void DrawCircleSurface(){float angleDelta = 2 * Mathf.PI / circleCount;GL.Begin(GL.TRIANGLES);GL.Color(Color.yellow);for (int i = 0; i < circleCount; i++){float angle = angleDelta * i;float angleNext = angle + angleDelta;GL.Vertex3(0, 0, 0);GL.Vertex3(Mathf.Cos(angle) * circleRadius, Mathf.Sin(angle) * circleRadius, 0);GL.Vertex3(Mathf.Cos(angleNext) * circleRadius, Mathf.Sin(angleNext) * circleRadius, 0);}GL.End();}

2.5 绘制立方体

通过Quad绘制立方体

    private void DrawCube(){GL.Begin(GL.QUADS);GL.Color(Color.white);GL.Vertex3(-quadSize, -quadSize, -quadSize);GL.Vertex3(quadSize, -quadSize, -quadSize);GL.Vertex3(quadSize, quadSize, -quadSize);GL.Vertex3(-quadSize, quadSize, -quadSize);GL.Vertex3(-quadSize, -quadSize, quadSize);GL.Vertex3(quadSize, -quadSize, quadSize);GL.Vertex3(quadSize, quadSize, quadSize);GL.Vertex3(-quadSize, quadSize, quadSize);GL.Vertex3(quadSize, -quadSize, -quadSize);GL.Vertex3(quadSize, -quadSize, quadSize);GL.Vertex3(quadSize, quadSize, quadSize);GL.Vertex3(quadSize, quadSize, -quadSize);GL.Vertex3(-quadSize, -quadSize, -quadSize);GL.Vertex3(-quadSize, -quadSize, quadSize);GL.Vertex3(-quadSize, quadSize, quadSize);GL.Vertex3(-quadSize, quadSize, -quadSize);GL.Vertex3(-quadSize, -quadSize, -quadSize);GL.Vertex3(quadSize, -quadSize, quadSize);GL.Vertex3(quadSize, -quadSize, quadSize);GL.Vertex3(-quadSize, -quadSize, quadSize);GL.Vertex3(-quadSize, quadSize, -quadSize);GL.Vertex3(quadSize, quadSize, -quadSize);GL.Vertex3(quadSize, quadSize, quadSize);GL.Vertex3(-quadSize, quadSize, quadSize);GL.End();}

3.完整代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Graphics02GLDrawings : MonoBehaviour
{public enum DrawingType{DRAW_CIRCLE,DRAW_TRIANGLE,DRAW_QUAD,DRAW_CIRCLE_SURFACE,DRAW_CUBE}public DrawingType type = DrawingType.DRAW_CIRCLE;public int circleCount = 6;public int circleRadius = 3;public int triangleSize = 2;public int quadSize = 2;private Material glMat;private void SetMaterialPass(){if (glMat == null){glMat = new Material(Shader.Find("Hidden/Internal-Colored"));}glMat.SetPass(0);}private void OnRenderObject(){SetMaterialPass();switch(type){case DrawingType.DRAW_CIRCLE:DrawCircle();break;case DrawingType.DRAW_TRIANGLE:DrawTriangle();break;case DrawingType.DRAW_QUAD:DrawQuad();break;case DrawingType.DRAW_CIRCLE_SURFACE:DrawCircleSurface();break;case DrawingType.DRAW_CUBE:DrawCube();break;}}private void DrawCircle(){float angleDelta = 2 * Mathf.PI / circleCount;GL.Begin(GL.LINES);GL.Color(Color.red);for (int i = 0; i < circleCount; i++){float angle = angleDelta * i;float angleNext = angle + angleDelta;GL.Vertex3(Mathf.Cos(angle) * circleRadius, Mathf.Sin(angle) * circleRadius, 0);GL.Vertex3(Mathf.Cos(angleNext) * circleRadius, Mathf.Sin(angleNext) * circleRadius, 0);}GL.End();}private void DrawTriangle(){GL.Begin(GL.TRIANGLES);GL.Color(Color.green);GL.Vertex3(-triangleSize, -triangleSize, 0);GL.Color(Color.black);GL.Vertex3(triangleSize, -triangleSize, 0);GL.Color(Color.red);GL.Vertex3(0, triangleSize, 0);GL.End();}private void DrawQuad(){GL.Begin(GL.QUADS);GL.Color(Color.blue);GL.Vertex3(-quadSize, -quadSize, 0);GL.Vertex3(quadSize, -quadSize, 0);GL.Vertex3(quadSize, quadSize, 0);GL.Vertex3(-quadSize, quadSize, 0);GL.End();}private void DrawCircleSurface(){float angleDelta = 2 * Mathf.PI / circleCount;GL.Begin(GL.TRIANGLES);GL.Color(Color.yellow);for (int i = 0; i < circleCount; i++){float angle = angleDelta * i;float angleNext = angle + angleDelta;GL.Vertex3(0, 0, 0);GL.Vertex3(Mathf.Cos(angle) * circleRadius, Mathf.Sin(angle) * circleRadius, 0);GL.Vertex3(Mathf.Cos(angleNext) * circleRadius, Mathf.Sin(angleNext) * circleRadius, 0);}GL.End();}private void DrawCube(){GL.Begin(GL.QUADS);GL.Color(Color.white);GL.Vertex3(-quadSize, -quadSize, -quadSize);GL.Vertex3(quadSize, -quadSize, -quadSize);GL.Vertex3(quadSize, quadSize, -quadSize);GL.Vertex3(-quadSize, quadSize, -quadSize);GL.Vertex3(-quadSize, -quadSize, quadSize);GL.Vertex3(quadSize, -quadSize, quadSize);GL.Vertex3(quadSize, quadSize, quadSize);GL.Vertex3(-quadSize, quadSize, quadSize);GL.Vertex3(quadSize, -quadSize, -quadSize);GL.Vertex3(quadSize, -quadSize, quadSize);GL.Vertex3(quadSize, quadSize, quadSize);GL.Vertex3(quadSize, quadSize, -quadSize);GL.Vertex3(-quadSize, -quadSize, -quadSize);GL.Vertex3(-quadSize, -quadSize, quadSize);GL.Vertex3(-quadSize, quadSize, quadSize);GL.Vertex3(-quadSize, quadSize, -quadSize);GL.Vertex3(-quadSize, -quadSize, -quadSize);GL.Vertex3(quadSize, -quadSize, quadSize);GL.Vertex3(quadSize, -quadSize, quadSize);GL.Vertex3(-quadSize, -quadSize, quadSize);GL.Vertex3(-quadSize, quadSize, -quadSize);GL.Vertex3(quadSize, quadSize, -quadSize);GL.Vertex3(quadSize, quadSize, quadSize);GL.Vertex3(-quadSize, quadSize, quadSize);GL.End();}
}

(二)GL 简单绘制相关推荐

  1. Android自定义视图二:如何绘制内容

    这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...

  2. Vue 之 echarts 图表数据可视化的基础使用(简单绘制各种图表、地图)

    Vue 之 echarts 图表数据可视化的基础使用(简单绘制各种图表.地图) 目录 Vue 之 echarts 图表数据可视化的基础使用(简单绘制各种图表.地图) 一.简单介绍 二.环境搭建 三.使 ...

  3. 思维导图(二):绘制规则

    思维导图有其自身的规则和技巧,对于初学者来说,掌握这些规则和技巧是非常必要的.只有在理解并熟练掌握这些技巧之后,绘图者才可以根据自己的意愿去发展属于自己的思维导图技巧和规则. 关键词使用规则 规则 1 ...

  4. 对P5基本二维图像绘制库的交互性扩展

    5379@TOC 对P5基本二维图像绘制库的交互性扩展 因为课程需要接触学习了P5.js ,觉得还蛮有意思的 下面是对它的2D绘图函数的一些简单扩展. ///终于等到你/ 无非是用周期性.随机性.对称 ...

  5. MATLAB二维图形绘制

    MATLAB二维图形绘制 数据点标记 数据点 颜色 线型 曲线图 一.plot函数 (一)最简单的plot函数调用格式: plot(x) (1)plot函数的参数 X 为普通向量, (2)plot函数 ...

  6. MATLAB学习——图形绘制(2):二维图形绘制plot指令

    摘要 二维图形是MATLAB图形的基础,也是应用最广泛的图形类型之MATLAB提供了许多二维图形绘制函数. MATLAB基本的二维图形包括线型(LinePlots) .散点型(ScatterPlots ...

  7. Android中 自定义logo二维码绘制(仿微信QQ二维码)

    自定义Logo二维码绘制(追加上一篇简单二维码绘制) 1.实现思路 2.实现(新增拍照以及相册上传logo以及分享和保存二维码) 简单绘制二维码地址: Android 实现简单绘制二维码(包含带LOG ...

  8. Android之Graphics 简单绘制几何图形

    如果对javaSE 里面2D图形编程有点了解的人 ,估计搞android几何绘图不是什么难事,主用用到API中canvas(画布)Paint类 主要用此类来进行绘画(只讲简单的图形绘制,后期会用模仿做 ...

  9. coreldraw铺花纹_CorelDRAW简单绘制漂亮的花纹边框技巧介绍

    这篇教程教的朋友们用CorelDRAW绘制漂亮的花纹边框:花纹边框是设计工作中必不可少的一个元素,许多专业的排版软件都有花边.但CD没有.是CD弱智吗? 那肯定不是了. 是因为在CD下制作花边非常容易 ...

最新文章

  1. 学python培训到底能干嘛
  2. Python翻转字典,以及解决IndentationError: expected an indented block报错!
  3. shell中判断空字符串和有趣的空字符串
  4. AS3 中强制类型转换方法
  5. 【洛谷】P1388 算式(dp)
  6. bzoj 1632: [Usaco2007 Feb]Lilypad Pond【bfs】
  7. [Oracle]高效的PL/SQL程序设计(三)--Package的优点
  8. BI 界震动 - Power BI Premium 个人版只要每月 120 元
  9. 解决ECLIPSE 卡死的方法
  10. vvv在线文档导出工具_使用ApiPost工具快速生成在线接口文档
  11. Python文档自动生成器
  12. bootstrap学习记录
  13. 串口控制led闪烁课程设计_排除led显示屏故障的方法及步骤
  14. 让hammer完美支持Pixi.js - 2D webG库
  15. php使用p12证书调用第三方接口
  16. wien10 / win11双开微信
  17. 最全5G手机芯片简史
  18. 添加五笔输入法(默认的)windows sever 2012 r2
  19. 17*开头的是什么号码?为什么17开头手机号最好不要用
  20. 安装侧边翻译,划词翻译,看外文论文神器,比知云还好用Edge Translate

热门文章

  1. 报错“FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disa”
  2. windows7 图形界面远程 centos6.5
  3. 从零开始建站(四) - 后端项目搭建
  4. 数字滤波算法 在数字信号处理应用中使用微控制器
  5. split在python中什么意思_python 正则表达式 split(python里split什么意思)
  6. 复现应急响应文章之找到了自己服务器上的病毒
  7. [Linux][问题解决]Linux访问本地网站可以,但是外部访问不行
  8. 乐视网CEO梁军:现在就是缺钱 正在重新学习做生意 2017年09月20日01:18 新京报 37 微博 微信 QQ空间 添加喜爱 乐视网CEO梁军。 新京报记者 吴江 摄乐视网CEO梁军。 新京
  9. 中国青年报:有多少网络论坛永远免费
  10. 【阿朱说】产业互联网、消费互联网、工业互联网到底有啥联系