为什么纹理出现在带有帧缓冲对象的左下角

时间:2015-11-26 09:58:41

标签: c# opengl opentk

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

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

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

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

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

提前致谢!

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

  

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

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

  

我希望它显示在左上角。

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

答案 2 :(得分:-1)

第一次尝试FBO时遇到了类似的问题,所以我的回答是:

  1. 虽然有几种方法可以解决这个颠倒问题,但修改纹理矩阵根本不是一个坏主意。有时修改纹理矩阵在某些情况下可能很方便,例如:Use non normalized texture coordinate,所以你可以在绑定纹理函数中添加这些特性。

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