gpt4 book ai didi

android - 在 FrameBuffer 中绘制

转载 作者:行者123 更新时间:2023-11-30 03:29:54 29 4
gpt4 key购买 nike

我使用一个程序来绘制一些 2D 纹理并使用它们。在这个程序中使用了 libgdx。我在使用 FrameBuffer 时遇到了一些问题。我尝试在我的 FrameBuffer 中绘制一些纹理,然后我需要保存更改的纹理(或绘制)并在更多时间在此 FrameBuffer 中使用该纹理。我尝试通过

保存纹理
Texture texture = mFrameBuffer.getColorBufferTexture() 

我尝试从 FrameBuffer 绑定(bind)纹理

mFilterBuffer.getColorBufferTexture().bind();

第一次迭代一切正常。但是当我尝试在 FrameBuffer 中使用他的 ColorBufferTexture 之类的纹理时,我有全黑的纹理。代码:

public void process(MySprite psObject, float startX, float startY, 
float endX, float endY, int mWidth, int mHeight) {
         boolean frst = false;
         if(psObject.getFrameBuffer() == null){
             psObject.setFrameBuffer(new FrameBuffer(Pixmap.Format.RGBA8888, psObject.getTexture().getWidth(), psObject.getTexture().getHeight(), true));
         }
         if(pSprite == null || pSprite != psObject){
             mFrameBuffer = psObject.getFrameBuffer();
             frst = true;
             pSprite = psObject;
         }
         mFrameBuffer.begin();
         Gdx.gl.glViewport(0, 0, psObject.getTexture().getWidth(), psObject.getTexture().getHeight());
         Gdx.graphics.getGL20().glClearColor(0f, 0f, 0f, 1f);
         Gdx.graphics.getGL20().glClear(GL20.GL_COLOR_BUFFER_BIT);
         ShaderProgram shader = MyUtils.newInstance().getCurrentShader();
         if(!shader.isCompiled()){
             Log.i("ERROR", "SHERROR " + shader.getLog());
         }
         if(shader != null){
             if(frst){
                 psObject.getTexture().bind();
             }else{
mFrameBuffer.getColorBufferTexture().bind();
             }
             shader.begin();
             Matrix4 matrix = new Matrix4();
             matrix.setToRotation(1, 0, 0, 180);
             matrix.scale(scaleSizeInFilterProcessor, scaleSizeInFilterProcessor, 1);
             shader.setUniformMatrix("u_worldView", matrix);
             shader.setUniformi("u_texture", 0);
             float [] start = new float[]{0f,0};
             float [] end = new float[]{1f,1f};
             MyUtils.newInstance().getShaderData(shader, start, end, mWidth, mHeight);
             psObject.getMesh().render(shader, GL20.GL_TRIANGLES);
             shader.end();
         }
         mFrameBuffer.end();
     }

最佳答案

您的代码需要重构 ;)。无论如何,如果这是你的问题,你不能从同一个 FBO 读取和写入。您需要 2 个 FBO(比如 A 和 B)

Draw scene to A,
Bind A's color texture
Draw scene to B (now you can read from A).

请注意,您可以扩展 libgdx FBO,使多个纹理与同一个 FBO 相关联。

关于android - 在 FrameBuffer 中绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17633971/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com