【问题标题】:how can i flip a cairo surface before saving with python?如何在使用 python 保存之前翻转 cairo 表面?
【发布时间】:2014-03-26 22:18:13
【问题描述】:

我正在使用 cairo 创建纹理并保存,问题是如果我直接将表面与 opengl 一起使用,它会垂直翻转。

如果我保存并加载,我可以使用 pil 和 im.tostring() 来翻转它。

有没有一种好方法可以将它翻转到 cairo 表面,也许保存我的 png 然后翻转以供使用或将图像倒置保存。

或者,我可以创建一个 PIL 图像并与 ciaro 共享缓冲区,这样我就可以使用 PIL tostring 方法来定位纹理。

接受建议,关于将 cairo 和 opengl 与 python 混合的信息不多。

【问题讨论】:

    标签: python opengl flip texturing


    【解决方案1】:

    如果使用旧矩阵堆栈,一种解决方案是调整纹理坐标或将缩放矩阵 (1,-1) 应用于纹理矩阵。

    另一种方法是在着色器中反转像素 (texcoord.y = 1.0 -texcoord.y),自己通过 FBO 渲染到新纹理。 (这是一个不错的选择)

    uniform sampler2D diffuseTexture;
    
    void main (void)  
    {
        vec2 t = gl_TexCoord[0].st;
        t.y = 1.0 - t.y;
        vec4 c = texture2D(diffuseTexture, t);          
        gl_FragColor = c;                         
    }
    

    【讨论】:

    • 我确实遇到了这个选项,在我编辑图像时似乎是一个更好的主意,但最终可能会使用这种方法。想知道它是否对性能翻转有很大影响我不断更新纹理,因为它们包含文本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多