首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL垂直翻转:-360 + -360 = 0?

OpenGL垂直翻转:-360 + -360 = 0?
EN

Stack Overflow用户
提问于 2013-07-30 13:27:57
回答 1查看 157关注 0票数 0

我正在与OpenGL合作,我想倒置图像。于是我来到这里,问了一个问题,最后我得到了以下代码:

代码语言:javascript
复制
    glMatrixMode(GL_PROJECTION);
    glScalef(-1,1,1);
    glTranslatef(-width(),0,0);

据我所知,每个像素的位置都会被倒置,因此图像右侧的像素现在处于相同的绝对位置,但是是图像的左边,所以我必须将整个像素移回与其宽度完全相同的像素: 360 (这是“画布”的大小,所以在片段中使用的是函数width() )!因此,要撤消这个过程,我将再次倒置图像,然后将其移回原来的位置:

代码语言:javascript
复制
    glMatrixMode(GL_PROJECTION);
    glScalef(-1,1,1);
    glTranslatef(width(),0,0);

不,是黑屏。我必须做两次完全相同的事情来撤销翻转:我必须移动-360每次我翻转图像。为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-30 14:39:32

正如丹尼尔·菲舍尔在评论中提到的那样。下面是这个过程的一个例子。

您必须记住的是,转换在转换后的坐标系上运行。

我们从屏幕(绿色)上的图像(灰色)开始:

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

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

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

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

另一种撤消翻转的方法是取消操作(但顺序相反):

代码语言:javascript
复制
glTranslatef(width, 0, 0);
glScalef(-1,1,1);

这其中的数学原因是倒置反转。如果我们有矩阵A = B * C,那么A^-1 = (C^-1 * B^-1)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17948401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档