用户工具

站点工具


侧边栏



Unity3D中文文档

script:unityengine:classes:gl:gl.triangle_strip

GL.TRIANGLE_STRIP 三角形带

JavaScript ⇒ public static var TRIANGLE_STRIP: int;
C# ⇒ public static int TRIANGLE_STRIP;

Description 描述

Mode for Begin: draw triangle strip.

从Begin模式开始后,然后绘制三角形带。(前三个点组成一个简单三角形,第四个点和前面两个点组成三角形,依次类推)。

If you want to draw something 2D in screen space then probably you will want to use GL.LoadOrtho or GL.LoadPixelMatrix.
If you want something in “3D”, then probably you should consider using GL.LoadIdentity followed by GL.MultMatrix with the actual 3D transform you want your stuff to be in.

如果在场景中画2D对象,你可能要用到GL.LoadOrtho 或 GL.LoadPixelMatrix函数。
如果在场景中画3D对象,你可能要用到GL.LoadIdentity 或 GL.MultMatrix函数进行3D变换。

See Also: GL.Begin, GL.End.

JavaScript:

	// Draws 2 triangles in the left side of the screen
	// that look like a square
 
	var mat : Material;
 
	function OnPostRender() {
		if (!mat) {
			Debug.LogError("Please Assign a material on the inspector");
			return;
		}
		GL.PushMatrix();
		mat.SetPass(0);
		GL.LoadOrtho();
		GL.Begin(GL.TRIANGLE_STRIP);
		GL.Color(Color(0,0,0,1));
		GL.Vertex3(0.25,0.5,0);
		GL.Vertex3(0,0.5,0);
		GL.Vertex3(0.25,0.25,0);
		GL.Vertex3(0,0.25,0);
		GL.End();
		GL.PopMatrix();
	}

C#:

using UnityEngine;
using System.Collections;
 
public class Sample : MonoBehaviour {
 
	// Draws 2 triangles in the left side of the screen
	// that look like a square
 
	Material mat  ;	
	void OnPostRender() {
		if (!mat) {
			Debug.LogError("Please Assign a material on the inspector");
			return;
		}
		GL.PushMatrix();
		mat.SetPass(0);
		GL.LoadOrtho();
		GL.Begin(GL.TRIANGLE_STRIP);
		GL.Color(new Color(0,0,0,1));
		GL.Vertex3(0.25f,0.5f,0);
		GL.Vertex3(0,0.5f,0);
		GL.Vertex3(0.25f,0.25f,0);
		GL.Vertex3(0,0.25f,0);
		GL.End();
		GL.PopMatrix();
	}
}

注解:

GL_TRIANGLE_STRIP绘制三角形方式很多时候令人疑惑,在这里对其运作机理进行解释。

一般情况下有三种绘制一系列三角形的方式,分别是GL_TRIANGLES、GL_TRIANGLE_STRIP和GL_TRIANGLE_FAN。

如下图所示:

GL_TRIANGLES是以每三个顶点绘制一个三角形。第一个三角形使用顶点v0,v1,v2,第二个使用v3,v4,v5,以此类推。如果顶点的个数n不是3的倍数,那么最后的1个或者2个顶点会被忽略。

GL_TRIANGLE_STRIP则稍微有点复杂。

其规律是:

构建当前三角形的顶点的连接顺序依赖于要和前面已经出现过的2个顶点组成三角形的当前顶点的序号的奇偶性(如果从0开始):

如果当前顶点是奇数:

组成三角形的顶点排列顺序:T = [n-1 n-2 n].

如果当前顶点是偶数:

组成三角形的顶点排列顺序:T = [n-2 n-21 n].

以上图为例,第一个三角形,顶点v2序号是2,是偶数,则顶点排列顺序是v0,v1,v2。第二个三角形,顶点v3序号是3,是奇数,则顶点排列顺序是v2,v1,v3,第三个三角形,顶点v4序号是4,是偶数,则顶点排列顺序是v2,v3,v4,以此类推。

这个顺序是为了保证所有的三角形都是按照相同的方向绘制的,使这个三角形串能够正确形成表面的一部分。对于某些操作,维持方向是很重要的,比如剔除。

注意:顶点个数n至少要大于3,否则不能绘制任何三角形。

GL

script/unityengine/classes/gl/gl.triangle_strip.txt · 最后更改: 2016/08/02 05:24 (外部编辑)