Android 将自定义属性传递给自定义片段着色器

Android 将自定义属性传递给自定义片段着色器,android,opengl-es,opengl-es-2.0,shader,Android,Opengl Es,Opengl Es 2.0,Shader,是否可以将自定义属性传递给片段着色器,我知道我可以通过GLES20.glvertexattributepointer将属性传递给顶点着色器,但如何将float[]传递给片段着色器?否 如果要将制服传递给片段着色器,可以轻松地执行此操作(请参见任何教程)。但是如果您想要类似于逐顶点属性的东西,那么这样做是没有意义的。您还可以将属性传递给顶点着色器,然后在顶点着色器中将它们作为变量传递给片段着色器。它们将在原语中插值,并作为片段着色器的输入提供。蒂姆的答案当然是正确的 一种可能的解决方法是将floa

是否可以将自定义属性传递给片段着色器,我知道我可以通过
GLES20.glvertexattributepointer
将属性传递给顶点着色器,但如何将float[]传递给片段着色器?


如果要将制服传递给片段着色器,可以轻松地执行此操作(请参见任何教程)。但是如果您想要类似于逐顶点属性的东西,那么这样做是没有意义的。您还可以将属性传递给顶点着色器,然后在顶点着色器中将它们作为变量传递给片段着色器。它们将在原语中插值,并作为片段着色器的输入提供。

蒂姆的答案当然是正确的

一种可能的解决方法是将
float
值存储在2D纹理中,并将纹理坐标(以及值的数量)传递给着色器。但是,如果每个顶点都有大量的浮点值(因为每个片段都有纹理查找),这可能会变得非常缓慢。另一个问题是,如果有很多顶点,这会导致非常大的纹理。
不管怎样,在某些情况下,这种方法是有用的。

Tim,这个答案对我来说真的很合适,就是制服、属性和制服是如何协同工作的。谢谢插值是否可以控制?例如,在使用(手电筒)光源的情况下,您不希望这种变化在每个正方形使用的三角形中造成高光。遗憾的是,你得到的不是一个圆O,而是一个带\或/的圆O。