OpenGL 像素在内存中的排列方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGL 像素在内存中的排列方式相关的知识,希望对你有一定的参考价值。

在OpenGL中所有和图像像素有关的API(包括glTexImage2D, glReadPixels等)第一个像素从左下角开始,从左到又一次排列,满了从下到上排列。

这个和Windows 下惯用的左上角开始的像素排列是上下颠倒的。所以使用glTexImage2D最后一个参数data,要注意你传进去的像素是左上角,还是左下角排列的。

SDL的Surface是按Windows惯用的左上角开始排列的,所以你直接把SDL的Surface作为glTexImage2D的数据的时候,你会感觉UV坐标上下颠倒了,变成了DirectX的UV坐标系(DirectX(0, 0)在左上角, OpenGL(0, 0)在左下角)。

但是实际上根源是纹理像素数据排列上下颠倒了。

 

FreeImage读出来的像素数据是按OpenGL惯用左下角开始的像素排列方式,3个颜色通道是按BGR方式排列。

stb_image库默认是按Windows惯用左上角开始的像素排列方式,3个颜色通道按RGB方式排列。但是有一个函数stbi_set_flip_vertically_on_load(1)设置颠倒上下像素排列变成OpenGL约定的左下角开始的像素排列。

以上是关于OpenGL 像素在内存中的排列方式的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL学习笔记4:纹理

像素格式

OpenGL中的像素间隙来自哪里?

使用 OpenGL 渲染位数组

OpenGL 中的 2D 绘图:在原始尺寸下具有像素精度的线性过滤

在 OpenGL 中绘制大量像素