【问题标题】:Modify Grafika Texture2dProgram to draw picture in picture (or texture in texture)修改 Grafika Texture2dProgram 以画中画(或纹理中的纹理)
【发布时间】:2014-08-30 14:36:03
【问题描述】:

我是 openGL 的新手,所以有一些问题弄清楚如何修改 grafika texture2dProgram 以便我可以获得画中画效果(或纹理中的纹理)。以下是我对所有示例的理解:

(表面准备好后)

  1. 设置视口

    GLES20.glViewport(0, 0, width, height);
    
  2. 设置有纹理和顶点坐标的Drawable2d

    new Drawable2d(RECTANGLE)
    
  3. 在新帧上,使用 Texture2dProgram 将纹理绘制到视口中

我想把我的理解和修改,以便我在屏幕上得到画中画输出。我如何实现这一目标?

我的理解是我应该执行以下操作:创建两个 Texture2dProgram 并分配不同的纹理 id 并传递不同的投影矩阵,以便一个 texture2dprogram 仅在较小的部分上绘制。这是正确的还是我错过了什么?

【问题讨论】:

    标签: android opengl surfaceview glsurfaceview


    【解决方案1】:

    Texture2dProgram class 只是抽象了 GLES 程序,封装了一个顶点着色器和一个像素着色器。如果您需要不同的着色器,则只需要其中一个以上,例如您想同时使用“普通”和“外部”纹理。

    如果您查看HardwareScalerActivity,您会看到它使用相同的程序绘制两种形状。你想做类似的事情。 (它还会创建一个FlatShadedProgram,因为它允许您在 UI 中在它们之间切换。)

    Drawable2d 定义形状,Program 定义渲染方式,Sprite2d 定义位置、大小和外观。您在 Sprite2d 对象上设置纹理 ID(参见 HardwareScalerActivity 中的 surfaceChanged())。

    这种分解乍一看可能有点奇怪,但它非常适合 OpenGL ES 的工作方式。

    就在另一件事上渲染一件事而言,Grafika 中的 GLES 代码非常有限——仅在与显示器平行的单个平面上进行 2D 渲染。无论你先画什么,都会被你之后画的东西覆盖。不要乱用视口,只需在Sprite2d 对象上设置位置和大小即可。

    【讨论】:

    • 酷。让我去看看。感谢参考
    • 好的。这肯定更有意义。谢谢!!
    • @faaden 你能告诉我在eclipse中使用NDK时如何启用自动完成功能
    • @james 您应该使用 android-ndk 标签将其作为一个单独的问题发布。确保您先用尽了谷歌搜索。
    • @fadden 这是我的问题stackoverflow.com/questions/25618201/…
    猜你喜欢
    • 2020-04-28
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 2013-01-05
    相关资源
    最近更新 更多