2012-04-03 7 views
0

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

Я решил, что хочу установить видовое окно на размер текстуры, а 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

Это после того, как «Splats крови» (в настоящее время свинья!) Оказывается на «арену» текстуру фона, показанной на рисунке 1. Обратите внимание, что оригинальная текстура сжалась слишком мала, чтобы видеть в середине (его несколько pixles) и свинья «кровь знак» прыгает в зигзагом, щелкая по центру текстуры и становится все меньше ...

image2

(извините, не имеют достаточно респ разместить изображения в сообщении!)

+0

Вы можете ссылаться на изображение? Трудно представить, что может означать «перекос». – Tim

+0

Я добавил несколько изображений к вопросу, пытаясь описать, что происходит – Joe

ответ

0

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

+0

ahhh, вот и все! Какой надзор ... Спасибо за вашу помощь! Теперь работать намного лучше - о, и «перевертывание» было решено путем правильной обработки текстуры. – Joe