Chcę ustawić każdy z trzech wierzchołków trójkąta z siatki na czerwony, niebieski i zielony.Ustaw kolor dla każdego wierzchołka w trójkącie
Jak widać w pierwszej części samouczek this dla innego języka. Jest to kod, którego używają, aby ustawić czerwony, zielony i niebieski do każdego vertext w każdym trójkącie z siatką:
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
i to wyjście wygląda z prostym kolorze vertex shader:
próbowałem odtworzyć-samo w jedności z C#, ale walczę z pierwszej części tego poradnika.
Oto mój kod:
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;
}
ale to jest wyjście otrzymuję od jedności z prostym kolorze vertex shader:
Jeśli przyjrzeć się bliżej będziesz zobacz, że każdy wierzchołek w mojej kostce nie ma przypisanego do niego koloru rgb, tak jak kostka z mojego pierwszego zrzutu ekranu. Wygląda jednak bardzo blisko.
Co jest nie tak z kodem? Dlaczego każdy wierzchołek nie ma koloru rgb jak obraz z mojego pierwszego zrzutu ekranu.
Shader:
Problem ten prawdopodobnie nie ma nic wspólnego z shadera ale tutaj prosty kolor shader w jedności:
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;
}
sprawdzić ten ... będzie pomocne: https://forum.unity3d.com/threads/standard-shader-with-vertex-colors.316529/ – joreldraw
Wystarczy, że czerwony. Ten post mówi o tworzeniu vertexowych shaderów, które mogę zrobić.To pytanie dotyczy ustawiania koloru każdego wierzchołka w każdym trójkącie w siatce, z kodu, a nie z modułu cieniującego. Jest inaczej i myślę, że problem prawdopodobnie wynika z kodu C#. Może wierzchołki nie są w porządku. – Programmer
Nie określono modułu cieniującego ani kodu ... tylko kolor wierzchołka – joreldraw