【问题标题】:Drawing a line using openGL es 2.0 and iphone touchscreen使用 openGL es 2.0 和 iphone 触摸屏画一条线
【发布时间】:2011-12-07 21:47:07
【问题描述】:

这是我之前发的问题的超级简单版(我觉得太复杂了)

如何在 OpenGL ES 2.0 中使用触摸屏上的笔触作为参考来绘制线条?

例如,如果我用手指在屏幕上绘制一个正方形,我希望它使用 OpenGL 在屏幕上绘制。

我已经尝试了很多研究,但到目前为止没有运气。

(我现在才怎么画已经有固定顶点数组的对象,不知道怎么画一个不断变化的数组也不知道怎么实现)

【问题讨论】:

    标签: opengl-es-2.0 gesture


    【解决方案1】:

    您应该使用顶点缓冲区对象 (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);
    

    绘制线条不需要元素数组中的索引。

    【讨论】:

    • 您好,这里的问题是我真的不明白在哪里实现它(或如何实现)。我必须更改几何形状,所以我必须不断将顶点添加到原始数组中,对吗?
    • 这是我另一个问题的链接(这个问题的完整版本)
    • 噢,谢谢!只是一个问题,我应该何时以及如何调用该方法以使用新的线点数组重绘?我在 touchesmoved 处创建这个 NSMutablearray,并在触摸结束时复制(或想要)它(以便我可以显示整个笔画/图形)
    • 抱歉,我对便携式设备的细节一无所知。我只知道OpenGL方面。我放的glDrawArrays 是您的glDrawElements(GL_TRIANGLES, sizeof(Indices)/sizeof(Indices[0]), GL_UNSIGNED_BYTE, 0); 的替代品,因为您不需要索引来绘制线循环。通常你应该在内容发生变化时重新绘制场景?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多