【发布时间】:2019-07-11 22:25:36
【问题描述】:
我有多个网格,我想在 glDrawElementsInstanced 中绘制,但我希望所有顶点都具有不同的高度,因此我试图通过 sampler1D 传递高度。
这就是我创建纹理的方式:
glGenTextures(1, &meshHeightTexId_);
glBindTexture(GL_TEXTURE_1D, meshHeightTexId_);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
// meshHeight_.size() = meshNumber_*meshSize_
glTexImage1D(GL_TEXTURE_1D, 0, GL_RED, meshNumber_*meshSize_, 0, GL_RED, GL_FLOAT, meshHeight_.data());
glBindTexture(GL_TEXTURE_1D, 0);
(meshNumber_是网格的数量,meshSize_是包含的顶点数,meshHeight_是包含所有高度数据的浮点向量)
抽签前我的电话:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_1D, meshHeightTexId_);
在着色器中我收集这样的值:
int index = gl_InstanceID * meshSize + gl_VertexID;
vec4 tempo = texture(heightData, index);
float height = tempo.r;
(heightData 是我使用的 sampler1D 的名称,meshSize 是一个统一的 int,包含网格中的顶点数)
然后我用高度作为顶点的y值。
但是通过这样做,看起来我只能得到等于 0 的高度(无缘无故地以一个角度除外)。
我可能在纹理初始化时做错了..
如果你有一个比通过纹理传递网格高度更好的主意,我会接受。
【问题讨论】: