如何将顶点颜色信息传递给GLSL着色器程序Unity

时间:2017-12-08 12:42:24

标签: opengl unity3d glsl shader

我的问题是如何将每个顶点颜色数据合并到着色器程序中。 与OpenGL c ++代码不同,我们定义属性并将其与着色器程序链接。

示例:

float vertices []
{
     //vertex pos                   //vertex color
    .0.0, 1.0, 0.0,                   1.0, 0.0, 0.0,
     1.0, 2.0, 1.0                    0.0, 1.0, 0.0
}

然后我们通过将数据基于大小和偏移大小解析到顶点缓冲区来传递数据。 在统一“gl_vertex”中获取所有顶点位置数据,但我也想传递颜色数据,以便片段着色器可以使用它。

我想要这样的东西,

 //vertex shader
in vec4 color
out vec4 Color
void main()
{
gl_Position = gl_vertex //working fine
Color = color //expecting
}

//fragment shader
out vec4 fragcolor
in vec4 Color
void main()
{
outColor = Color
}

1 个答案:

答案 0 :(得分:1)

可以为[{1]}设置顶点颜色,如[1]中所述。

要在着色器中使用它们,请将一个成员添加到顶点着色器输入结构中,并使用Mesh装饰它,如[2]中所述。

[1] Unity Scripting API; Mesh.colors; https://docs.unity3d.com/ScriptReference/Mesh-colors.html

[2] Unity手册;向顶点程序提供顶点数据; https://docs.unity3d.com/560/Documentation/Manual/SL-VertexProgramInputs.html