OpenGL转换(glScale,glTranslate等)

Kat*_*nie 4 opengl transformation translate scale

我正在学习openGL以及如何进行转换和缩放等转换.我知道你必须经常翻译到原点,然后做你想做的任何事情(比如缩放),然后翻译回来.根据我的理解,这是手动完成的,但你可以用glScale()做同样的事情.

我的问题是,如果我使用glScale函数,我还需要转换为原点吗?

Mar*_*one 16

您可能不需要对原点进行任何转换,只需按所需顺序进行转换即可.请记住,应用的最后一个转换发生在先前转换的空间中.例如:

// draw object centred on (1,2,3) and ten times bigger
glTranslatef(1,2,3);
glScalef(10,10,10);
drawObject();
Run Code Online (Sandbox Code Playgroud)

// draw object centred on (10,20,30) and ten times bigger
glScalef(10,10,10);
glTranslatef(1,2,3);
drawObject();
Run Code Online (Sandbox Code Playgroud)

  • 不,他们不会为你做那件事,但往往没关系.这里没有明确的规则:你需要了解发生了什么.例如,如果你想要一颗围绕太阳运行的行星,你首先进行旋转,然后进行平移.正如您所希望的那样,平移的方向将通过前一个旋转进行旋转.但是对于行星本身的日常旋转,你需要在翻译后进行另一次旋转*.希望有道理. (3认同)