繁体   English   中英

OpenGL ES 2.0渲染到纹理坐标系

[英]OpenGL ES 2.0 Render to texture coordinate system

我发现如果我使用glFramebufferTexture2D在OpenGL ES 2.0 glFramebufferTexture2D图元渲染为纹理,则坐标系与渲染为默认帧缓冲区时不同。 例如:V0(-1,-1),我想会在左下角,但是如果渲染到纹理,则V0会在右上角。 有人可以告诉我为什么吗?

(-1,-1)当然不应该映射到右上角。 但是它看起来似乎在左上方,具体取决于您如何看待数据。

实际上,(-1,-1)始终是默认OpenGL坐标系的左下角。 它看起来令人困惑的原因是由于纹理在内存中的排列方式。 它们从下到上存储,即,存储器的第一行是最底部的行。 这与大多数图像文件格式不同,后者第一行是最上面的行。 这是大多数y反转问题的根本原因。

可能导致意外行为的几种情况:

  1. 您从文件加载图像的格式从上到下存储数据,然后将其用于采样。 如果要以原始方向显示图像,则需要将1.0用于与底部顶点对应的v纹理坐标,将0.0用于顶部顶点,这是与顶点坐标相反的方向。 对顶部纹理坐标使用0.0会将纹理的第一行放在顶部,这与内存中的顺序匹配。

  2. 您使用默认设置执行glReadPixels() 结果中图像的行从下到上排序。 如果要将数据保存为从上到下存储数据的图像格式,则在写出数据时需要翻转行的顺序。

  3. 使用FBO渲染到纹理,然后使用该纹理进行采样。 此纹理的行从下到上排列。 与您在示例1中使用的纹理数据从上到下排列的示例相比,现在可以翻转v纹理坐标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM