すべてのフレームと呼ばれるこのOpenGLES1.1コードについて考えてみます。
glPushMatrix();
glRotatef(m_currentAngle, 0, 0, 1);
//... enable, point, draw vertices
glPopMatrix();
すべてうまくいっています。ここで、プッシュ/ポップを削除すると、連続回転アニメーションが得られます。これは理にかなっています。
ただし、ES 2.0では、これと同等の効果があります。
//no glRotate so doing this:
float radians = m_currentAngle * 3.14159f / 180.0f;
float s = std::sin(radians);
float c = std::cos(radians);
float zRotation[16] = {
c, s, 0, 0,
-s, c, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
};
GLint modelviewUniform = glGetUniformLocation(m_simpleProgram, "Modelview");
glUniformMatrix4fv(modelviewUniform, 1, 0, &zRotation[0]);
//... then enable, point and draw vertices
これも適切な画像を作成しますが、「プッシュ/ポップ」手法に相当するものはありませんが、継続的に回転することはありません。1.1が回転するのに、2.0が連続回転しないのはなぜですか?
言い換えれば、1.1では連続アニメーションを防ぐためにプッシュ/ポップが必要なのに、2.0では必要ないのはなぜですか?