我试图在iPhone上制作图像拉伸效果。我创建了一个顶点数组,并在背景图像的任意半径内移动每个indice的纹理数据。然后进行以下调用以显示:
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,这样所有绘图都在一个方法中完成。这是正确的方法吗?有没有更好的办法?是应该将所有图像数据以某种方式组合成一个简单的顶点数组?
答案 0 :(得分:0)
在一组基元上绘制背景。
在第二组基元上绘制“附魔”,更接近相机(如果使用正交投影,则更改一维的值)。
不能说为什么背景会闪现并消失。可能有很多原因。您忘记正确清除opengl状态,存在深度冲突或任何其他大量错误。
但是如果你坚持在不同“平面”上的不同几何图形上绘制重叠图像,那么你应该得到你想要的效果。