opengl自上而下<-&燃气轮机;自底向上纹理?

opengl自上而下<-&燃气轮机;自底向上纹理?,opengl,textures,flip,topdown,bottom-up,Opengl,Textures,Flip,Topdown,Bottom Up,当我通过FreeImage加载图像时,位是从下到上的。 我的GL代码要求所有图像都是自上而下的。当我将位复制到纹理时,翻转图像的最佳方式是什么?我认为使用简单的数组算法和1个临时长单词值进行就地翻转是明智的。(因此每像素翻转4个字节) 当然,您可以翻转纹理坐标,但这是不明智的,因为您可能不想用纹理颠倒的信息污染代码 可以尝试一下FreeImage_FlipVertical()。可以使用纹理矩阵有效地翻转纹理坐标。我认为这是可行的: glMatrixMode(GL_TEXTURE); glLoad

当我通过FreeImage加载图像时,位是从下到上的。
我的GL代码要求所有图像都是自上而下的。当我将位复制到纹理时,翻转图像的最佳方式是什么?

我认为使用简单的数组算法和1个临时长单词值进行就地翻转是明智的。(因此每像素翻转4个字节)


当然,您可以翻转纹理坐标,但这是不明智的,因为您可能不想用纹理颠倒的信息污染代码

可以尝试一下FreeImage_FlipVertical()。

可以使用纹理矩阵有效地翻转纹理坐标。我认为这是可行的:

glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glScalef(1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);

根据您的应用程序,大多数专业游戏都会在构建过程中而不是在加载时翻转其纹理。

FreeImage\u GetPitch会返回什么?如果为负数,则内存中的扫描线是自底向上的。如果为正值,则扫描线为自上而下。我建议您手动转换为OpenGL可以接受的位图。这不是一个错误的选择吗?我的意思是:你将在代码中嵌入纹理的一个方面,因此当纹理数据正确提供时,你的代码突然就不能工作了。@Frans Bouma:如果你一直使用相同的格式,我认为这是一个不错的选择。如果你正在混合和匹配格式(从上到下的顺序不同),这肯定是一件令人头痛的事。纹理矩阵不再在核心OpenGL中-必须不断地修补顶点着色器以翻转纹理坐标是痛苦的,而且效率肯定很低。最好对所有源几何体纹理坐标一致地翻转一次,或者在加载时翻转纹理并完成。