修改Grafika Texture2dProgram以绘制图片中的图片(或纹理中的纹理)

时间:2014-08-30 14:36:04

标签: android opengl surfaceview glsurfaceview

我是openGL的新手,因此有一些问题可以找出如何修改grafika texture2dProgram以便我可以获得图片效果(或纹理纹理)。以下是我对所有例子的理解:

(表面准备好后)

  1. 设置视口

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

    new Drawable2d(RECTANGLE)
    
  3. 在新框架上,使用Texture2dProgram绘制带纹理的视口

  4. 我想了解并修改,以便在屏幕上输入图片输出。我该如何实现这一目标?

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

1 个答案:

答案 0 :(得分:1)

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

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

Drawable2d定义形状,Program定义它的呈现方式,Sprite2d定义位置,大小和外观。您在Sprite2d对象上设置纹理ID(请参阅surfaceChanged()中的HardwareScalerActivity)。

这种分解起初看起来有点奇怪,但它与OpenGL ES的工作方式很吻合。

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