我正在与OpenGL合作,我想倒置图像。于是我来到这里,问了一个问题,最后我得到了以下代码:
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每次我翻转图像。为什么?
发布于 2013-07-30 14:39:32
正如丹尼尔·菲舍尔在评论中提到的那样。下面是这个过程的一个例子。
您必须记住的是,转换在转换后的坐标系上运行。
我们从屏幕(绿色)上的图像(灰色)开始:

然后我们缩放图像。所以原点是保留的,但是x轴是镜像的。

不,我们必须再次将图像移到屏幕上。由于x轴指向左侧(但我们希望将图像移动到右侧),因此我们必须使用负偏移量进行翻译:

如果我们再次翻转图像,就会发生以下情况。原点被保留,x轴被镜像:

因此,我们必须用负偏移来翻译图像:

另一种撤消翻转的方法是取消操作(但顺序相反):
glTranslatef(width, 0, 0);
glScalef(-1,1,1);这其中的数学原因是倒置反转。如果我们有矩阵A = B * C,那么A^-1 = (C^-1 * B^-1)。
https://stackoverflow.com/questions/17948401
复制相似问题