Unity中简单使用Opengl
简介
由于项目特殊需求,需要在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的更多相关文章
- Unity中几种简单的相机跟随
#unity中相机追随 固定相机跟随,这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动 using UnityEngine; using System.Collectio ...
- 【原创翻译】初识Unity中的Compute Shader
一直以来都想试着自己翻译一些东西,现在发现翻译真的很不容易,如果你直接把作者的原文按照英文的思维翻译过来,你会发现中国人读起来很是别扭,但是如果你想完全利用中国人的语言方式来翻译,又怕自己理解的不到位 ...
- 移植UE4的模型操作到Unity中
最近在Unity上要写一个东东,功能差不多就是在Unity编辑器上的旋转,移动这些,在手机上也能比较容易操作最好,原来用Axiom3D写过一个类似的,有许多位置并不好用,刚好在研究UE4的源码,在模型 ...
- 【Unity技巧】Unity中的优化技术
http://blog.csdn.net/candycat1992/article/details/42127811 写在前面 这一篇是在Digital Tutors的一个系列教程的基础上总结扩展而得 ...
- 骨骼动画的原理及在Unity中的使用
制作骨骼动画 我们看看这几步操作后,我们得到了那些数据: 1.每个皮肤顶点的初始世界坐标. 2.每个骨骼关节顶点的初始世界坐标. 3.每个顶点被骨骼顶点的影响信息. 4.骨骼如何移动. 骨骼动画原理 ...
- Unity 中的坐标系
说明: 注意几点: 0 行向量右乘矩阵与列向量左乘矩阵,两个矩阵互为逆矩阵 1 法线转换与mul,mul函数左乘矩阵当列矩阵计算,右乘当行矩阵计算 2 叉乘与左右手系,左手系用左手,右手系用右手,ax ...
- Unity中的资源管理
一.AssetBundle 相关 Q1:Unity中的SerializedFile是怎么产生的?请问用Unload(false)可以清除吗?因为读取了Bundle里面的内容后已经赋值给其他物体了.而且 ...
- Unity中的优化技术
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/candycat1992/article/ ...
- 如何在Unity中创造真实的水
你将要创造什么 Unity是由Unity Technologies开发的多平台游戏引擎,用于为控制台,移动设备,计算机甚至网站等多种设备创建视频游戏和应用程序.Unity的核心优势在于其稳健性,可移植 ...
随机推荐
- 编程语言 IDE 对比
IDE是集成开发环境的英文缩写,所谓集成开发环境,就是将你在开发过程中所需要的工具或功能集成到了一起,比如代码编写.分析.编译.调试等功能,从而最大化地提高开发者的工作效率. 每种编程语言都有一些特定 ...
- selenium实战练习之:粉丝反馈表单的自动化脚本
链接 粉丝反馈表 要求 服务质量5颗星 喜欢的内容选择各种公开课 对交流群的意见需要填写 留下自己正确的联系方式 点击提交 断言 不需要断言,能符合上面的要求成功提交就可以
- whoami 和 Who am i
① 两个命令在一般的情况下,似乎效果是一样的 ② 但是当你执行完su 命令切换用户后,就不一样了,who am i 显示最早login的账户,而whoami 显示切换后的账户 例如: -bash-3. ...
- 同时大量连接导致的DDOS攻击,导致收发器宕机,用户大面积超时掉线
前段时间一个客户改成电信网通自动路由后(当然和这个没有关系,但是客户一般没有分析能力,会多想),用户经常大面积掉线,用户才180多个,在线最多也才120多,十分苦恼,原先帮其维护的技术人员,只是远程诊 ...
- C#如何更好地理解引用类型和值类型
说道值类型和引用类型,在C#中,官方的说法就是: 值类型直接指向数据:一般包括C#自带的所有数字类型,字符类型,bool类型,当然还有自定义的结构类型和枚举类型 而引用类型则是指向数据存储的地址.一般 ...
- 解决mac os x下 tomcat启动报 java.net.BindException: Permission denied <null>:80 错误
我在mac os x上启动tomcat的时候,报 java.net.BindException: Permission denied <null>:80,java.net.BindExce ...
- struts2:JSP页面及Action中获取HTTP参数(parameter)的几种方式
本文演示了JSP中获取HTTP参数的几种方式,还有action中获取HTTP参数的几种方式. 1. 创建JSP页面(testParam.jsp) <%@ page language=" ...
- AngularJs解决方案笔记(1)
接触AngularJs约1年半时间,目前用其独立完成了一个Solution, 构建出比较完整的项目架构,从C/S往B/S转型的过程背后是大量精力与时间成本的付出,特别是工作了好几年后, 本来掌握好的稳 ...
- React Native ——实现一个简单的抓取github上的项目数据列表
/** * Sample React Native App * https://github.com/facebook/react-native */ 'use strict'; var React ...
- CORS Cookie,和nodejs中的具体实现
CORS(跨来源资源共享协议),高级浏览器(Chrome,firefox, opera, safir, ie10)在 XMLHttpRequest(AJAX) 中已经支持了这个协议.可以实现ajax跨 ...