Opengl 合成图像时,确保以正确的纵横比渲染图像的最佳方法是什么
我写的东西有点像photoshoppy,因为有一些图像层在彼此上面渲染 每个层渲染到FBO,FBO可以通过效果等运行 虽然用户可以扭曲图像,但我希望图像最初以自己的纵横比渲染 当前,每个图像都绘制到FBO,如下所示: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);
//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、 我知道这可能需要很大的重新考虑