我想從網格紅色,藍色和綠色中設置三角形的每個三個頂點。爲三角形中的每個頂點設置顏色
正如在第一部分this教程這是另一種語言。這是他們使用的設置紅色,綠色和藍色,從網格的每個三角形的每個vertext代碼:
function set_wireframe_colors(m)
local cc = {}
for i = 1, m.size/3 do
table.insert(cc, color(255,0,0))
table.insert(cc, color(0,255,0))
table.insert(cc, color(0,0,255))
end
m.colors = cc
end
,這是輸出看起來像一個簡單的頂點顏色着色器:
我試圖重新在Unity-同樣的事情用C#,但我本教程的第一部分中掙扎。
這裏是我的代碼:
void Start()
{
Mesh mesh = GetComponent<MeshFilter>().mesh;
Vector3[] vertices = mesh.vertices;
//Create new colors array where the colors will be created.
Color32[] colors = new Color32[vertices.Length];
for (int i = 0; i < vertices.Length; i += 3)
{
colors[i] = new Color32(255, 0, 0, 255);
colors[i + 1] = new Color32(0, 255, 0, 255);
colors[i + 2] = new Color32(0, 0, 255, 255);
}
//assign the array of colors to the Mesh.
mesh.colors32 = colors;
}
但這是輸出我從Unity得到一個簡單的頂點顏色着色器:
如果你仔細看就會看到我的多維數據集中的每個頂點都沒有像第一次截圖中的多維數據集那樣分配給它的rgb顏色。它看起來非常接近。
有什麼不好的代碼?爲什麼每個頂點都不像我的第一張截圖中的圖像那樣具有RGB顏色。
着色:
這個問題可能已經無關着色器,但這裏簡單的顏色着色器在Unity:
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float4 color : COLOR;
};
struct v2f
{
float2 uv : TEXCOORD0;
UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
float4 color : COLOR;
};
sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert(appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.color = v.color;
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
float4 frag(v2f i) : SV_Target
{
return i.color;
}
檢查這一個... ...將是有益的:https://forum.unity3d.com/threads/standard-shader-with-vertex-colors.316529/ – joreldraw
正當紅說。這篇文章正在討論如何製作頂點着色器。這個問題是關於如何設置網格中每個三角形中每個頂點的顏色,從代碼而不是着色器。這是不同的,我認爲這個問題可能來自C#代碼。也許頂點不正確。 – Programmer
您不指定着色器或代碼...只有頂點顏色 – joreldraw