【问题标题】:Drawing shape on button click using OpenGL in android在android中使用OpenGL在按钮点击上绘制形状
【发布时间】:2014-09-17 05:19:14
【问题描述】:

作为 android OpenGL 部分的新手。我已经下载了站点 Displaying Graphics with OpenGL ES 上给出的示例示例

因此,运行下载的示例及其运行时出现错误并按预期显示输出。 我确实在 GLSurfaceview 中绘制了三角形并且它工作正常。 绘制的三角形的屏幕截图:-

现在随着需求的变化,我必须在图像视图的单击上绘制三角形,而不是在启动应用程序时。 这是上述要求的屏幕截图

黑色三角形是图像视图,右侧是 GLSurfaceView 区域,我需要在其中绘制三角形。当前,当我单击图像视图时,它不会绘制图像,但会出现一些异常,这是 logcat 消息:

by Log Tag libEGL

by Log Message called unimplemented OpenGL ES API

我无法理解我在哪里做错了。这部分卡住了。

那么,这种需求可以在Android中用OpenGL来完成。

【问题讨论】:

    标签: android opengl-es opengl-es-2.0


    【解决方案1】:

    听起来您正试图从您的 UI 线程进行 OpenGL 调用。 GLSurfaceView 创建一个渲染线程和一个当前渲染线程的 OpenGL 上下文。然后GLSurfaceView发起的所有渲染都在这个渲染线程中执行。

    您不能在没有当前上下文的情况下进行 OpenGL 调用,并且 UI 线程没有一个,除非您专门创建一个。这样做会很麻烦,我不建议在这种情况下使用它。如果你有兴趣继续阅读,前几天我回答了一个相关问题,我试图解释如何创建和使用多个上下文:about opengles and texture on android

    做你需要的最干净的方法是在GLSurfaceView.Renderer实现中将需要绘制的内容的表示(例如,在你的例子中的3个三角形顶点的坐标)存储为成员变量。那么流程是:

    1. 为了响应 UI 输入,您调用 Renderer 实现上的方法,这些方法在类的成员变量中设置三角坐标。您可能希望使用 synchronized 方法,因为这些坐标将同时被 UI 线程和渲染线程访问。
    2. 您可以通过调用GLSurfaceViewrequestRender() 方法来触发重绘。
    3. 将调用Renderer 实现的onDrawFrame() 方法作为响应。它从成员变量中获取新坐标,并绘制三角形。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多