渲染到纹理的问题 - 缩放问题(?)

时间:2012-04-03 17:42:28

标签: java opengl-es viewport render-to-texture

我正在努力让渲染到纹理工作。到目前为止,它完成了绘制纹理和所有内容所需的所有GL gubbins - 唯一的问题是它可以完全缩放。

我想我想要将视口设置为纹理的大小,并将gluOrtho2d(我将要绘制到纹理上的方式)设置为-halfwidth,halfwidth,-halfheight,halfheight。这意味着当绘制位置0,0应该在中心时。半身,半高的位置应该在右上角等等。

虽然我得到了非常奇怪的效果,但它似乎并没有以正确的比例绘制纹理 - 所以一切都变得歪斜,有人能说出我可能做错了吗?

由于

public void renderToTexture(GLRenderer glRenderer, GL10 gl)
  {
    boolean checkIfContextSupportsExtension = checkIfContextSupportsExtension(gl, "GL_OES_framebuffer_object");
    if(checkIfContextSupportsExtension)
    {
      GL11ExtensionPack gl11ep = (GL11ExtensionPack) gl;

      int mFrameBuffer = createFrameBuffer(gl,texture.getWidth(), texture.getHeight(), texture.getGLID());
      if (mFrameBuffer == -1)
      {
        return;
      }
      gl11ep.glBindFramebufferOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES, mFrameBuffer);

      int halfWidth = texture.getWidth()/2;//width/2;
      int halfHeight = texture.getHeight()/2;//height/2;

      gl.glViewport(0,0,texture.getWidth(), texture.getHeight());
      gl.glLoadIdentity();

      GLU.gluOrtho2D(gl, -halfWidth, halfWidth , -halfHeight, halfHeight);

      gl.glMatrixMode(GL10.GL_MODELVIEW);
      gl.glLoadIdentity();

      gl.glClearColor(0f, 1f, 0f, 1f);
      gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

      //draw the old version of the texture to framebuffer:
      Quad quad = new Quad(texture.getWidth(), texture.getHeight());
      quad.setTexture(texture);

      SpriteRenderable sr = new SpriteRenderable(quad);
      sr.renderTo(glRenderer, gl, 1);

      //draw the new gl objects etc to framebuffer
      for (Renderable renderable : renderThese)
      {
        if (renderable.isVisible()) {
          renderable.renderTo(glRenderer, gl, 1);
        }
      }

      //default to the old framebuffer
      gl11ep.glBindFramebufferOES(GL11ExtensionPack.GL_FRAMEBUFFER_OES, 0);
    }
  }

图片:

这是任何纹理渲染之前的游戏。

image1

这是在“血腥”(目前为猪!)渲染在图片1所示的“竞技场”背景纹理之后。请注意,原始纹理缩小得太小而无法在中间看到(它的几个像素)猪的“血啪”声以锯齿形跳跃,翻过纹理的中心,变得更小......

image2

(抱歉,没有足够的代表在帖子中发布图片!)

1 个答案:

答案 0 :(得分:0)

只是猜测猜测,但是你还记得在输入renderToTexture函数之前将matrixMode设置为GL_PROJECTION吗?它没有设置在函数内部,它似乎应该是。另外,请不要忘记在函数末尾恢复投影矩阵和视口。