# GL.MultiTexCoord 多重纹理坐标

static function MultiTexCoord (unit : int, v : Vector3) : void

Description描述

Sets current texture coordinate (v.x,v.y,v.z) to the actual texture unit.

In OpenGL this matches glMultiTexCoord for the given texture unit if multi-texturing is available. On other graphics APIs the same functionality is emulated.

The Z component is used only when:

1. You access a cubemap (which you access with a vector coordinate, hence x,y & z).
2. You do "projective texturing", where the X & Y coordinates are divided by Z to get the final coordinate. This would be mostly useful for water reflections and similar things.

Z坐标用在以下情况：

1. 六面体纹理。
2. 投影纹理。Z有X，Y坐标得到。例如水面倒射效果。

This function can only be called between GL.Begin and GL.End functions.

``````using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
public Material mat;
private bool flagTex = true;
void Update() {
if (Input.GetKeyDown(KeyCode.Space))
if (flagTex)
flagTex = false;
else
flagTex = true;

}
void OnPostRender() {
if (!mat) {
Debug.LogError("Please Assign a material on the inspector");
return;
}
GL.PushMatrix();
mat.SetPass(1);
if (flagTex)
GL.MultiTexCoord(0, new Vector3(0, 0, 0));
else
GL.MultiTexCoord(1, new Vector3(0, 0, 0));
GL.Vertex3(0.25F, 0.25F, 0);
if (flagTex)
GL.MultiTexCoord(0, new Vector3(0, 1, 0));
else
GL.MultiTexCoord(1, new Vector3(0, 1, 0));
GL.Vertex3(0.25F, 0.75F, 0);
if (flagTex)
GL.MultiTexCoord(0, new Vector3(1, 1, 0));
else
GL.MultiTexCoord(1, new Vector3(1, 1, 0));
GL.Vertex3(0.75F, 0.75F, 0);
if (flagTex)
GL.MultiTexCoord(0, new Vector3(1, 0, 0));
else
GL.MultiTexCoord(1, new Vector3(1, 0, 0));
GL.Vertex3(0.75F, 0.25F, 0);
GL.End();
GL.PopMatrix();
}
}``````
``````// Changes between two textures assigned to a material
// When pressed space
//当按下空格键，在两个纹理之间改变指定到一个材质

var mat : Material;
private var flagTex : boolean = true;
function Update() {
if (Input.GetKeyDown(KeyCode.Space)) {
if(flagTex) {
flagTex = false;
} else {
flagTex = true;
}
}
}

function OnPostRender() {
if (!mat) {
Debug.LogError("Please Assign a material on the inspector");
return;
}
GL.PushMatrix();
mat.SetPass(1);
if (flagTex) {
GL.MultiTexCoord(0,Vector3(0,0,0)); // main texture 主纹理
} else {
GL.MultiTexCoord(1,Vector3(0,0,0)); // second texture 第二纹理
}
GL.Vertex3(0.25,0.25,0);
if (flagTex) {
GL.MultiTexCoord(0,Vector3(0,1,0));
} else {
GL.MultiTexCoord(1,Vector3(0,1,0));
}
GL.Vertex3(0.25,0.75,0);
if (flagTex) {
GL.MultiTexCoord(0,Vector3(1,1,0));
} else {
GL.MultiTexCoord(1,Vector3(1,1,0));
}
GL.Vertex3(0.75,0.75,0);
if (flagTex) {
GL.MultiTexCoord(0,Vector3(1,0,0));
} else {
GL.MultiTexCoord(1,Vector3(1,0,0));
}
GL.Vertex3(0.75,0.25,0);
GL.End();
GL.PopMatrix();
}``````
Page last updated: 2011-3-21