如何使用另一个转换来反转(或取消)OpenGL SRT转换?

时间:2011-11-27 22:24:06

标签: c++ c opengl graphics transformation

我正在读考试,以前的考试有这个问题:

1. void drawGLScene(){ 
2. glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

3. glLoadIdentity(); 
4. glTranslatef(0, 1, 0); 
5. glRotatef(-90.0f, 0.0f, 0.0f, 1.0f); 
6. glScalef(.5, 2, 1); 
7. drawChevron();  
8. glFlush(); 
9. }

“写入三行OpenGL,插入第6行和第7行之间 反转(取消)第4到6行实现的转换效果 不要使用glLoadIdentity()。“

我很确定它必须是另一个Translate,Rotate,Scale。但我知道它并不像使用我认为的反向参数那么简单。我很难理解x和y轴面向哪个方向,以及尺度是否会影响平移。

有人能够向我解释如何正确地做到这一点吗?

1 个答案:

答案 0 :(得分:3)

这三行将是:

glScalef(1.0/.5, 1.0/2, 1.0/1);
glRotatef(90.0f, 0.0f, 0.0f, 1.0f);
glTranslatef(0, -1, 0);

基本上你需要以相反的顺序执行逆变换。你从缩放开始。缩放的反向将缩减,但这次是1 /因子。然后将其向后旋转90度并在y轴上向后平移1个单位。