我正在嘗試編寫僅適用於某些頂點的頂點着色器。僅用於某些頂點的頂點着色器
在Unity中,文本呈現爲一系列不連貫的4頂點多邊形。 我試圖轉換/旋轉/縮放這些多邊形,但是分開。 所以我可以獨立移動每個字母。
我不認爲這是可能的,但如果每個頂點有一個ID,我可以將它們分組0-3,4-7等,並以這種方式移動它們。
是否有任何技巧來修改頂點取決於他們附加什麼,或者他們是哪個「數字」?
我正在嘗試編寫僅適用於某些頂點的頂點着色器。僅用於某些頂點的頂點着色器
在Unity中,文本呈現爲一系列不連貫的4頂點多邊形。 我試圖轉換/旋轉/縮放這些多邊形,但是分開。 所以我可以獨立移動每個字母。
我不認爲這是可能的,但如果每個頂點有一個ID,我可以將它們分組0-3,4-7等,並以這種方式移動它們。
是否有任何技巧來修改頂點取決於他們附加什麼,或者他們是哪個「數字」?
我不相信你可以直接這樣做,但你可以使用第二個UV
頻道來存儲你的ID。
這是一個重新定義的Unity normal shading example使用「頂點ID」來確定何時應用法線作爲顏色。
Shader "Custom/ColorIdentity" {
Properties {
//_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct appdata {
float4 vertex : SV_POSITION;
float3 normal : NORMAL;
float4 texCoord2 : TEXCOORD1;
};
struct v2f {
float4 pos : SV_POSITION;
float3 color : COLOR0;
};
v2f vert (appdata v)
{
v2f o;
//here is where I read the vertex id, in texCoord2[0]
//in this case I'm binning all values > 1 to id 1, else id 0
//that way they can by multiplied against to the vertex normal
//to turn color on and off.
int vID = (v.texCoord2[0]>1)?1:0;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
o.color = v.normal * vID; //Use normal as color for vertices w/ ids>1
return o;
}
half4 frag (v2f i) : COLOR
{
return half4 (i.color, 1);
}
ENDCG
}
}
Fallback "Diffuse"
}
此外,這裏是僞裝的腳本,我分配完全任意的ID。 ID是根據y軸上頂點的位置分配的。根據我得到的網格,隨機選擇邊界:
public class AssignIdentity : MonoBehaviour {
public GameObject LiveObject;
// Use this for initialization
void Start() {
Mesh mesh = LiveObject.GetComponent<MeshFilter>().mesh;
Vector3[] vertices = mesh.vertices;
Vector2[] uv2s = new Vector2[vertices.Length];
int i = 0;
foreach(Vector3 v in vertices){
if(v.y>9.0f || v.y < 4.0){
uv2s[i++] = new Vector2(2,0);
} else {
uv2s[i++] = new Vector2(1,0);
}
}
mesh.uv2 = uv2s;
}
}
請使用unity3d標記來表示該事物。統一標籤用於Microsoft Unity。 – 2013-05-07 09:44:22
我的不好,我從來沒有聽說過MS Unity :)我將來會使用unity3d。 – 2013-05-07 09:52:51