我想从网格红色,蓝色和绿色中设置三角形的每个三个顶点。为三角形中的每个顶点设置颜色
正如在第一部分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