【问题标题】:Why texture appear on Bottom Left with Frame Buffer Object为什么纹理出现在带有帧缓冲区对象的左下角
【发布时间】:2015-11-26 18:58:26
【问题描述】:

我正在尝试使用 C# 中的 OpenTK 使用 FBO 渲染到纹理。 当我尝试渲染时,除了纹理显示在左下角之外,一切都显示出来并且很好,我希望它显示在左上角。

纹理在Y轴上也出现翻转,所以我需要在绑定纹理目标后修改纹理矩阵。

如果我只是绑定我的纹理并绘制顶点,精灵将出现在左上角。

我使用的代码与official documentation 完全相同。

我有 2 个问题:
1.我是否正确地通过修改纹理矩阵使目标纹理正确显示?
2. 如何让纹理目标出现在左上角?

提前致谢!

【问题讨论】:

    标签: c# opengl opentk


    【解决方案1】:

    实际上 Origin 位于左下角,因此 FBO 显示在左下角。 在普通图像中,纹理空间 0,0 位于顶部,因此您看不到它翻转。 所以你必须添加纹理矩阵才能使空间相同。

    【讨论】:

    • 实际上在 OpenGL 中 2D 纹理图像的原点总是在左下方。在规范中查找。
    【解决方案2】:

    当我尝试渲染时,除了纹理显示在左下角之外,一切都显示出来并且很好,

    是的。在 OpenGL 中,2D 图像(视口、纹理、渲染缓冲区)的原点 (0,0) 位于左下方。

    我希望它显示在左上角。

    为什么?原点(就 OpenGL 而言)位于左下方。你为什么期望它在顶部?

    【讨论】:

      【解决方案3】:

      我第一次尝试FBO的时候也遇到过类似的问题,所以我的回答如下:

      1. 尽管有几种方法可以解决这个颠倒问题,但修改纹理矩阵一点也不坏。有时在某些情况下修改纹理矩阵可能会很方便,例如:Use non normalized texture coordinate,因此您可以将此类功能添加到绑定纹理函数中。

      2. 似乎是投影/视口问题,如果您确定正常精灵出现在左上角坐标上,请在取消绑定 FBO 手柄之前尝试重新设置您的投影/视图/相机。

      【讨论】:

      • 感谢第一个问题的建议,真的很有帮助!我之前用初始化投影代码替换了GL.Viewport 作为您的建议,现在它可以正常工作了!!再次感谢您!
      猜你喜欢
      • 1970-01-01
      • 2012-04-24
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      相关资源
      最近更新 更多