我有一些我无法控制的数据(由客户提供),其中指定了:
顶点
索引
“colorPalette”(vec4的8种不同颜色,总共32个值)
“vertexColors”数组,用于定义哪些顶点应该应用colorPalette中的哪种颜色。例如此数组中的0,0,1280表示“colorPalette中的”color'0'应应用于索引在0到1280之间的所有顶点。“
在我看来,当我定义我的GLSL顶点着色器时,我需要能够访问当前顶点的索引,以便我可以使用vertexColors确定colorPalette中的哪种颜色应用并传递给片段着色器通过使用变化。
如何找到当前顶点的索引?
感谢您的帮助,
菲尔。
P.S。我是Open GLES 2.0的新手,之前从未使用过OpenGL或OpenGLES,并且正在接受“OpenGLES 2.0编程指南”中的所有指导以及我在互联网上可以找到的任何内容。
P.P.S。在我看来,Open GLES 1.x看起来更容易:)
答案 0 :(得分:2)
使用gl_VertexID
内置属性。
老实说,我不知道你将如何搜索颜色数组中的颜色(给定索引)。
相反,我会为顶点颜色创建一个特殊的缓冲区对象,并将颜色缓冲区绘制到其中(绑定为目标纹理缓冲区对象)。在这种情况下,几何着色器将生成具有所需颜色的线条,如下所示: - 在0处创建点 - 在1280点创建点数 - 从调色板中获取颜色,将其传递给片段着色器
此操作对于HW而言非常便宜,可根据您提供的调色板数据为每个顶点提供精确的颜色。
答案 1 :(得分:0)
当需要应用新调色板而不是尝试计算可能不可用的顶点索引时,是否有可能直接应用不同的着色器?老实说,我不相信GL提供您正在寻找的指数,但我绝不是该领域的专家。我会按照我的建议做,并使用多个着色器,并确定应用这些值的其他逻辑方法。