【发布时间】:2011-12-07 21:47:07
【问题描述】:
这是我之前发的问题的超级简单版(我觉得太复杂了)
如何在 OpenGL ES 2.0 中使用触摸屏上的笔触作为参考来绘制线条?
例如,如果我用手指在屏幕上绘制一个正方形,我希望它使用 OpenGL 在屏幕上绘制。
我已经尝试了很多研究,但到目前为止没有运气。
(我现在才怎么画已经有固定顶点数组的对象,不知道怎么画一个不断变化的数组也不知道怎么实现)
【问题讨论】:
标签: opengl-es-2.0 gesture
这是我之前发的问题的超级简单版(我觉得太复杂了)
如何在 OpenGL ES 2.0 中使用触摸屏上的笔触作为参考来绘制线条?
例如,如果我用手指在屏幕上绘制一个正方形,我希望它使用 OpenGL 在屏幕上绘制。
我已经尝试了很多研究,但到目前为止没有运气。
(我现在才怎么画已经有固定顶点数组的对象,不知道怎么画一个不断变化的数组也不知道怎么实现)
【问题讨论】:
标签: opengl-es-2.0 gesture
您应该使用顶点缓冲区对象 (VBO) 作为顶点数据的支持 OpenGL 结构。然后,必须将手势转换为一系列位置(我不知道在您的平台上是如何发生的)。如果现有 VBO 足够大,则必须使用 glBufferSubData 将这些位置推送到 VBO,如果现有 VBO 太小,则必须使用 glBufferData 将这些位置推送到 VBO。
使用 VBO 绘制线条或任何其他 OpenGL 形状很容易,并且存在许多教程来完成它。
根据您的其他问题,您似乎快到了!您已经像我提到的那样创建了 VBO,但它们可能还不够大。当前大小为sizeof(Vertices),在glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);中指定
您需要将赋予 glBufferData 的大小更改为足够大以容纳所有原始顶点 + 稍后添加的顶点。您还应该使用GL_STREAM 作为最后一个参数(阅读函数)。
要添加新顶点,请使用以下内容:
glBufferSubData(GL_ARRAY_BUFFER, current_nb_vertices*3*sizeof(float), nb_vertices_to_add, newVertices);
current_nb_vertices += nb_vertices_to_add;
//...
// drawing lines
glDrawArrays(GL_LINE_STRIP, 0, current_nb_vertices);
绘制线条不需要元素数组中的索引。
【讨论】:
glDrawArrays 是您的glDrawElements(GL_TRIANGLES, sizeof(Indices)/sizeof(Indices[0]), GL_UNSIGNED_BYTE, 0); 的替代品,因为您不需要索引来绘制线循环。通常你应该在内容发生变化时重新绘制场景?