Я пытаюсь заставить мой рендеринг в текстуру работать.До сих пор он делает все необходимые 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
(извините, не хватает представителя для публикации изображений в сообщении!)