我正在写一些有点“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。我知道这可能需要很大的重新考虑因素。