我正在使用OpenGL,我想反转图像。于是我就在这里,问了一个问题,最后我有下面的代码:OpenGL垂直翻转:-360 + -360 = 0?
glMatrixMode(GL_PROJECTION);
glScalef(-1,1,1);
glTranslatef(-width(),0,0);
从我从此明白,每一个像素的位置被颠倒,这样是对图像的右侧像素现在处于相同的绝对位置,但是是图像的左侧,所以我必须将整个事物移回像它的宽度一样多的像素:360(这是“画布”的大小,因此在函数的片段中,函数正在使用width()
)!所以要撤消这个过程,我会再次反转图像,然后将它移回到它来自的位置:
glMatrixMode(GL_PROJECTION);
glScalef(-1,1,1);
glTranslatef(width(),0,0);
不,黑屏。我必须做两次完全相同的事情来撤消翻转:我每次翻转图像时都必须移动-360。为什么?
如果您的图像位于0 <= x <= w'中,则翻转('glScalef(-1,1,1)')翻转每个像素的x坐标的符号,因此您的图像现在在'-w <= x <= 0'中,由'-w'翻译将其移回到视口中。如果在第二次翻转后用'w'翻译,则将其从视口中移出,而不是移到视口中。 –