简介

由于项目特殊需求,需要在unity中使用一些OpenGL的东西来绘制图形(PS:其实就是有一个拖尾算法只有OpenGL版本~~~懒得改了,直接在unity中使用OpenGL算了)。所以琢磨咯下如何在unity中使用OpenGL,刚找到点入门级的调用,藉此分享一下。

关于Unity和OpenGL

这里不多过的介绍概念知识,unity在脚本中预留了这样一些功能:
1.OnPostRender函数(PS:这个函数只有挂在摄像机上才生效,可以在摄像机做渲染前做进一步操作)
2.GL接口(PS:开放的功能不多,比如GL模式只有LINES=1,QUADS=7,TRIANGLES=4,TRIANGLE_STRIP=5四种,当然也有可能是其他功能也可以用,只是没有列出来,以及一些OpenGL标准中的一些函数并未提供)

OpenGL的基本使用

恩,既然要使用OpenGL,那就先来说说OpenGL的基本格式:
GL.Begin(OpenGL的预置模式);
各种添加顶点(GL.Vertex),设置顶点颜色(GL.Color),贴图(GL.MultiTexCoord)等操作
GL.End();

简单示范

废话不多说了,直接上代码,一共就几行,很简单的:
using UnityEngine;

public class TestScripts : MonoBehaviour
{ public Material mat; void Awake()
{
} void OnPostRender()
{
// 清屏操作(可以不要此操作,这样场景中的对象才可以显示)
GL.Clear(true, true, Color.black); // 将当前矩阵变换对象push缓存下来,防止自己的操作影响到其它渲染操作
GL.PushMatrix(); // 设置绘制模式为2D绘制,设置这个模式之后屏幕左下角变为(0,0),屏幕右上角变为(1,1),注释之后变为3D真实坐标
GL.LoadOrtho(); // 绘制过程
for (var i = 0; i < mat.passCount; ++i)
{
// 设置shader,用过OpenGL ES2.0的同志应该知道,这个类似于combine glsl的过程,这里么有自己写,用的unity自带的sprite的shader
// 由于shader可能存在多个pass通道,所以采用遍历的方式将每个通道都绘制一遍,当然有些shader只有一个通道,比如这个自带的sprite的shader
// 也可以设置成SetPass(0),就是使用默认的第一个通道进行渲染
mat.SetPass(i);
// 设置绘制模式为线条模式(这个模式每两个顶点为一组)
GL.Begin(GL.LINES); // 设置顶点颜色(设置下一个顶点的颜色,如果后面没有更改,继续保留这个颜色属性直至被更改)
GL.Color(Color.red);
// 向GL中增加一个点的坐标
GL.Vertex3(0, 0, 0);
GL.Vertex3(0.5F, 0.5F, 0); GL.Color(Color.white);
GL.Vertex3(0.5F, 0.5F, 0);
GL.Color(Color.blue);
GL.Vertex3(1F, 0F, 0); // 通知GL关闭当前绘制模式
GL.End();
} // 将矩阵对象还原,与之前的push操作相对应
GL.PopMatrix();
} }

具体效果如下:因为清了屏,所以背景是黑色的,如果注释掉,也可以显示原有3D场景的内容

总结

这只是一个简单的OpenGL使用教程,更多的操作请自行了解OpenGL的相关教程,函数名字都是一样的,照搬就行了....

Unity中简单使用Opengl的更多相关文章

  1. Unity中几种简单的相机跟随

    #unity中相机追随 固定相机跟随,这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动 using UnityEngine; using System.Collectio ...

  2. 【原创翻译】初识Unity中的Compute Shader

    一直以来都想试着自己翻译一些东西,现在发现翻译真的很不容易,如果你直接把作者的原文按照英文的思维翻译过来,你会发现中国人读起来很是别扭,但是如果你想完全利用中国人的语言方式来翻译,又怕自己理解的不到位 ...

  3. 移植UE4的模型操作到Unity中

    最近在Unity上要写一个东东,功能差不多就是在Unity编辑器上的旋转,移动这些,在手机上也能比较容易操作最好,原来用Axiom3D写过一个类似的,有许多位置并不好用,刚好在研究UE4的源码,在模型 ...

  4. 【Unity技巧】Unity中的优化技术

    http://blog.csdn.net/candycat1992/article/details/42127811 写在前面 这一篇是在Digital Tutors的一个系列教程的基础上总结扩展而得 ...

  5. 骨骼动画的原理及在Unity中的使用

    制作骨骼动画 我们看看这几步操作后,我们得到了那些数据: 1.每个皮肤顶点的初始世界坐标. 2.每个骨骼关节顶点的初始世界坐标. 3.每个顶点被骨骼顶点的影响信息. 4.骨骼如何移动. 骨骼动画原理 ...

  6. Unity 中的坐标系

    说明: 注意几点: 0 行向量右乘矩阵与列向量左乘矩阵,两个矩阵互为逆矩阵 1 法线转换与mul,mul函数左乘矩阵当列矩阵计算,右乘当行矩阵计算 2 叉乘与左右手系,左手系用左手,右手系用右手,ax ...

  7. Unity中的资源管理

    一.AssetBundle 相关 Q1:Unity中的SerializedFile是怎么产生的?请问用Unload(false)可以清除吗?因为读取了Bundle里面的内容后已经赋值给其他物体了.而且 ...

  8. Unity中的优化技术

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/candycat1992/article/ ...

  9. 如何在Unity中创造真实的水

    你将要创造什么 Unity是由Unity Technologies开发的多平台游戏引擎,用于为控制台,移动设备,计算机甚至网站等多种设备创建视频游戏和应用程序.Unity的核心优势在于其稳健性,可移植 ...

随机推荐

  1. 杀死O2O的三大杀手?!

    0个O2O领域,20多个“已故”项目,三种不同的死因……记者糜丰.孙锋将O2O项目的一些固有问题分析得淋漓尽致! 这三个O2O杀手分别是:买不起的流量.承担不起的物流成本.惹不起的传统企业. 除了找钱 ...

  2. SSH乱码解决

    解决方案: 使用linux,在用户根目录(/root)下有一个.bash_profile配置文件,该配置只对当前用户有效. 使用ls -a命令可以查看到该文件.使用vi编辑器打开该文件后,在其中加入 ...

  3. Hadoop源代码中的build-main.xml

    在Hadoop的每一个Project中,都有build-main.xml,如下图所示: 这个文件其实是通过maven-ant插件生成的,在hadoop的每一个Maven工程中,都有一个pom文件,在p ...

  4. android google 统计导致的文件冲突

    android studio 加入google 统计 1. buildscript { repositories { jcenter() } dependencies { classpath 'com ...

  5. 【过程改进】总结大中小型项目的git流程

    git作为源码管理工具出于流行趋势.这里和大家一起分享下我们是如何用git的分支(branch)功能管理不同规模的项目 小型项目 推荐工具:TortoiseGit 开发阶段(第一版上线前):2个分支 ...

  6. c#如何区分静态只读变量和常量

    常量const 常量就是一个其值永远不会改变的静态字段.常量的值会在编译时自动推算,编译器会在遇到常量时,将其逐个替换为该常量的值.常量可以是C#内建的任何数字类型或枚举类型.声明一个常量的时候必须对 ...

  7. TSPL学习笔记(3):排序算法练习

    快速排序 快排的详细介绍见,简单的说就是取输入序列中的首元素m,然后将除首元素m以外的其它元素分成两组,小于等于m的一组和大于m的一组.将3组元素组合成输入队列:小于等于m + m + 大于m. 下面 ...

  8. 程序员的复仇:11行代码如何让Node.js社区鸡飞狗跳

    来源自:http://www.techug.com/node-js-community 几天前,一名 NPM(Node.js Package Manager)社区的贡献者 Azer Koçulu 出于 ...

  9. UNIX环境高级编程笔记之高级I/O

    本章说明了很多高级I/O功能: 非阻塞I/O——发一个I/O操作,不使其阻塞,记录锁,STREAMS机制 I/O多路转接——select和poll函数 readv和writev函数,以及存储映射I/O ...

  10. Android开发艺术探索笔记—— View(一)

    Android开发艺术探索笔记 --View(一) View的基础知识 什么是View View是Android中所有控件的基类.是一种界面层控件的抽象. View的位置参数 参数名 获取方式 含义 ...