我正在写一些有点“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());
目前所有的纹理失真等都是通过 src 纹理矩阵发生的,目前模型和 dst 始终设置为恒等,并且没有投影矩阵。感觉一切都错了。
使用屏幕大小的表面和视口将最终的复合纹理渲染到屏幕上。
如何确保保留每个图像的纵横比?
ps 我知道这可能需要大量的重构。