2012-04-03 3 views
0

텍스쳐 렌더링에 문제가 생기고 있습니다. 지금까지는 텍스처와 모든 것을 그리는 데 필요한 모든 GL 그빈을 처리합니다. 유일한 문제는 스케일링을 모두 없애는 것입니다.텍스처 스케일링 문제로 렌더링 할 때의 문제점 (?)

-halfwidth, halfwidth, -halfheight, halfheight와 같이 뷰포트를 텍스처의 크기로 설정하고 gluOrtho2d (텍스처에 그리는 방식)를 설정하고 싶다고 생각했습니다. 이것은 드로잉 위치 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); 
    } 
    } 

이미지 :

이것은 어떤 텍스처 렌더링하기 전에 게임이다. 은 "혈액 표시가"(현재 돼지!) 원래 질감이 중간에보고 너무 작 줄어든 것을 그림 1. 공지 사항에 표시된 "경기장"배경 텍스처에 렌더링 후

image1

입니다 (그 몇 pixles)와 돼지 "혈액 플랫"질감과 작은지고의 중심을 통해 뒤집기, 지그재그 점프 ...

image2

이 (죄송합니다, 충분히 담당자를 해달라고 게시물에 이미지 게시)

+0

이미지에 연결할 수 있습니까? '왜곡 된'것이 무엇을 의미하는지 상상하기 어렵습니다. – Tim

+0

나는 어떤 일이 일어날 지 설명하려고하는 질문에 이미지를 추가했다. – Joe

답변

0

투기적인 추측이지만 renderToTexture 함수를 입력하기 전에 matrixMode를 GL_PROJECTION으로 설정하는 것을 잊지 마십시오? 그것은 함수 안에서 설정되지 않습니다. 또한 함수의 끝에서 투영 행렬 및 뷰포트를 복원하는 것을 잊지 마십시오.

+0

아, 그게 다야! 너를 도와 줘서 고마워! 이제 훨씬 더 잘 작동합니다. 텍스처를 올바른 방향으로 렌더링하여 "뒤집기"를 해결했습니다. – Joe

관련 문제