Unity底层Graphics绘制接口

本文探讨了在Unity中利用Graphics类进行贴图裁剪及模型绘制的方法,以提高渲染效率。介绍了Graphics.DrawTexture和Graphics.DrawMesh的具体用法,并对比了不同绘制方式的优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写这篇文章是因为前几天有个朋友问我的一个问题。它的意思是如何在屏幕中绘制贴图的一部分,也就是如何将材质裁剪。

1.使用GUI的话效率不太高,每个部分都需要重新裁剪。

2.使用Mesh网面效率是高了,但是需要每一部分网面增加MeshRenderer组件,效率还是会打折扣。

今天我突然想到了Graphics,按照官方文档的说明它是底层绘制接口,所有GUI和网格的绘制底层都是它,我相信它的运行效率应该是最高的。

OK.我们来学习它。绘制贴图的访法是Graphics.DrawTexture() ,它也是在OnGUI中使用,但是它需要接收到Repaint事件的时候才能绘制。如下图所示,我将一张完整的贴图拆成了4部分。


来看看代码是怎么写的。

	public Texture tex;
	void OnGUI ()
	{
		 if( Event.current.type.Equals(EventType.Repaint) )
		{
		 	Graphics.DrawTexture( new Rect(200, 100, 128, 128),tex,new Rect(0.0f, 0.5f, 0.5f, 0.5f),0, 0, 0,0, null);
		    Graphics.DrawTexture( new Rect(200,250, 128, 128),tex,new Rect(0.0f, 0.0f, 0.5f, 0.5f),0, 0, 0,0, null);	
			Graphics.DrawTexture( new Rect(350, 100, 128, 128),tex,new Rect(0.5f, 0.5f, 0.5f, 0.5f),0, 0, 0,0, null);
		    Graphics.DrawTexture( new Rect(350,250, 128, 128),tex,new Rect(0.5f, 0.0f, 0.5f, 0.5f),0, 0, 0,0, null);	
		}
	}

     绘制访法应该放在EventType.Repaint中,然后Graphics.DrawTexture()方法中。参数1表示图片绘制的区域,参数2表示绘制的贴图,参数3表示绘制贴图中的那部分,取值范围在0-1中。

         Graphics还可以绘制模型,通常情况需要在Hierarchy视图中创建模型对象,然后在给模型绑定上贴图材质。这样我么就还得维护这个模型的生命周期,比如创建与施放的问题。使用Graphics可以绘制模型,但是它不会在Hierarchy视图中创建对象,也就是说纯代码绘制模型。

	public Mesh mesh;
	public Material mat;
	void Update()
	{
		Graphics.DrawMesh(mesh, Vector3.zero, Quaternion.identity, mat, 0);
	}
网格和材质绑定完后就可以看到模型,Graphics.DrawMesh()参数1需要绘制的网格,参数2 模型的坐标,参数3 模型的旋转,参数4模型的材质。 最重要的是使用Graphics.DrawMesh()模型还支持光影投射。下图我给了红色的世界光,模型接收光线变成了红色。



使用Graphics.DrawMeshNow也可以绘制模型,它是立刻绘制模型。它不支持光影的投射。

	public Mesh mesh;
	public Material mat;
 
	void OnPostRender() 
	{
		mat.SetPass(0);
		Graphics.DrawMeshNow(mesh, Vector3.zero * Time.deltaTime * 2f, Quaternion.identity);
	}
为了OnPostRender()可以得到执行,这条脚本一定要绑定在摄像机上。


详细的API可以看这里  http://docs.unity3d.com/Documentation/ScriptReference/Graphics.html

一般情况下应该很少会用到它,如果情况特殊的话尝试它吧,嘿嘿。欢迎一起讨论,学习。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值