Opengl 合成图像时,确保以正确的纵横比渲染图像的最佳方法是什么

Opengl 合成图像时,确保以正确的纵横比渲染图像的最佳方法是什么,opengl,glsl,aspect-ratio,fbo,sharpgl,Opengl,Glsl,Aspect Ratio,Fbo,Sharpgl,我写的东西有点像photoshoppy,因为有一些图像层在彼此上面渲染 每个层渲染到FBO,FBO可以通过效果等运行 虽然用户可以扭曲图像,但我希望图像最初以自己的纵横比渲染 当前,每个图像都绘制到FBO,如下所示: //fbo is created at the size of the texture if (fboRenderTarget == null) { fboRenderTarget = new RenderTarget(gl);

我写的东西有点像photoshoppy,因为有一些图像层在彼此上面渲染

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

虽然用户可以扭曲图像,但我希望图像最初以自己的纵横比渲染

当前,每个图像都绘制到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());
当前,所有纹理扭曲ect都通过src纹理矩阵发生,当前模型和dst始终设置为标识,并且没有投影矩阵。感觉完全不对

使用屏幕大小的曲面和视口将最终合成纹理渲染到屏幕

如何确保保留每个图像的纵横比

p、 我知道这可能需要很大的重新考虑