【发布时间】:2013-06-27 23:44:55
【问题描述】:
我在 OSX 上使用 OpenGL3.2 Core Profile。 我想做实例绘图(glDrawArraysInstanced),我为每个实例传递一个矩阵。
我的顶点着色器构建得很好:
#version 150
in mediump vec4 position;
in mediump mat4 trf;
in lowp vec4 rgb;
out lowp vec4 colour;
uniform highp mat4 modelcamviewprojmat;
void main()
{
mediump vec4 tpos = trf * position;
gl_Position = modelcamviewprojmat * tpos;
colour = rgb;
}
“trf”的绑定很好:
glBindAttribLocation(program, ATTRIB_TRF, "trf" );
但是我怎样才能传递我的数据呢? glVertexAttribPointer 不能传递大于 4 个浮点数的值。 所以这个调用失败了:
glVertexAttribPointer( ATTRIB_TRF, 16, GL_FLOAT, 0, 16 * sizeof(float), ... );
我怀疑我需要用 4 次调用 glVertexAttribPointer 来替换它,每次调用 4 个浮点数。 但是我可以为“索引”(第一个参数)使用什么值?我是否需要改用 4 个向量属性,并在 GLSL 顶点着色器中组合这四个向量?如果是这样,什么样的 GLSL 代码可以做到这一点?或者我可以使用 BindAttribLocation 的返回值并对所有行使用 val+0、val+1、val+2 和 val+3?
【问题讨论】: