我正在尝试在 iphone 上制作图像拉伸效果。我制作了一个顶点数组并在背景图像的任意半径内移动每个索引的纹理数据。然后进行以下调用以显示:
int n = gridSize_.x * gridSize_.y;
glEnableClientState( GL_VERTEX_ARRAY);
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
glVertexPointer(3, GL_FLOAT, 0, vertices);
glTexCoordPointer(2, GL_FLOAT, 0, texCoordinates);
glDrawElements(GL_TRIANGLES, n*6, GL_UNSIGNED_SHORT, indices);
//if(num_myindices > 0)
// glDrawElements(GL_TRIANGLES, num_myindices*6, GL_UNSIGNED_SHORT, myindices);
glDisableClientState(GL_VERTEX_ARRAY );
glDisableClientState( GL_TEXTURE_COORD_ARRAY );
我的问题是被拉伸区域的边缘看起来非常不稳定,网格尺寸相对较小,例如 32x32 甚至 64x64。任何更大的都会使它更平滑,但速度要慢得多。
所以我尝试添加背景图像的副本,并将顶点数组限制为仅受影响的索引。我使用更小的网格尺寸,但用于更小的区域。上面的绘图代码现在看起来像:
//glDrawElements(GL_TRIANGLES, n*6, GL_UNSIGNED_SHORT, indices);
if(num_myindices > 0)
glDrawElements(GL_TRIANGLES, num_myindices*6, GL_UNSIGNED_SHORT,myindices);
显示受影响的区域,但背景图像似乎闪烁并消失,我的拉伸区域漂浮在黑色背景上。显然,我的背景首先呈现,然后我上面的代码覆盖并仅呈现我的顶点数组中的数据。
有没有人对如何有效地组合图像的绘图有建议?
我计划为背景制作第二个简单的顶点数组,并在我的 if 语句之前调用 glDrawArray,以便所有绘图都在一个方法中完成。这是解决这个问题的正确方法吗?有没有更好的办法?是否应该以某种方式将所有图像数据组合成 1 个简单的顶点数组?