在堆肥图像时,确保以正确的宽高比渲染图像的最佳方法是什么

时间:2015-01-26 10:05:03

标签: opengl glsl aspect-ratio fbo sharpgl

我正在写一些有点“photoshoppy”的东西,因为有图像层在彼此之上呈现。

每个图层渲染到FBO,fbos可以通过效果等运行。

虽然用户可以扭曲图像,但我希望图像最初以自己的宽高比进行渲染。

目前,每个图像都被绘制到FBO中,如下所示:

 //fbo is created at the size of the texture
 if (fboRenderTarget == null)
        {
            fboRenderTarget = new RenderTarget(gl);
            fboRenderTarget.ChangeRenderTarget(new RenderTargetState(textureInfo.Width, textureInfo.Height, TextureType.LowPrecisionIsNorm));
        }


       //viewport is set to size of texture
        gl.Viewport(0, 0, textureInfo.Width, textureInfo.Height);
        gl.BindFramebufferEXT(OpenGL.GL_FRAMEBUFFER_EXT, fboRenderTarget.Name);

        //draw the texture

当我混合时:

 //fbo is created at the size of the destination texture
 if (fboRenderTarget == null)
        {
            fboRenderTarget = new RenderTarget(gl);
            fboRenderTarget.ChangeRenderTarget(new RenderTargetState(dstTextureInfo.Width, dstTextureInfo.Height, TextureType.LowPrecisionIsNorm));
        }


       //viewport is set to size of texture
        gl.Viewport(0, 0, dstTextureInfo.Width, dstTextureInfo.Height);
        gl.BindFramebufferEXT(OpenGL.GL_FRAMEBUFFER_EXT, 
       ....

       //SET MATRIX
            ShaderPropertySetter.SetUniformMat4(gl, "uModelMatrix_m4", modelMatrix);
            if (srcMatrix != null)
                ShaderPropertySetter.SetUniformMat4(gl, "uSrcTextureMatrix_m4", srcMatrix.GetAsMat4());
            if (dstMatrix != null)
                ShaderPropertySetter.SetUniformMat4(gl, "uDstTextureMatrix_m4", dstMatrix.GetAsMat4());

目前所有纹理失真都是通过src纹理矩阵发生的,目前模型和dst总是设置为标识,并且没有投影矩阵。哪个感觉都错了。

使用屏幕尺寸表面和视口将最终复合纹理渲染到屏幕。

如何确保保留每个图像的宽高比?

P.S。我知道这可能需要很大的重新考虑因素。

0 个答案:

没有答案