Проблемы рендеринга в текстуру - проблемы с масштабированием (?) - PullRequest
0 голосов
/ 03 апреля 2012

Я пытаюсь заставить мой рендеринг в текстуру работать.До сих пор он делает все необходимые GL Gubbins для рисования на текстуре и все остальное - единственная проблема состоит в том, что он полностью отключает масштабирование.

Я решил, что хочу установить область просмотра равной размерутекстура, и gluOrtho2d (то, как я собираюсь рисовать на текстуру) как -halfwidth, halfwidth, -halfheight, halfheight.Это означает, что при рисовании позиция 0,0 должна быть в центре.Положение halfwdith, halfheight должно быть в верхнем правом углу и т. Д. И т. Д.

Я получаю действительно странные эффекты, хотя, кажется, что это не рисование текстуры в правильном масштабе - так что все искажается,кто-нибудь может подсказать, что я могу делать не так?

Спасибо

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 голосов
/ 03 апреля 2012

Просто умозрительное предположение, но вы не забыли установить для matrixMode значение GL_PROJECTION перед входом в функцию renderToTexture?Он не установлен внутри функции там, где, кажется, и должно быть.Также не забудьте восстановить проекционную матрицу и область просмотра в конце функции.

...