特定の回転でクワッドをレンダリングしたいのですが、さらにこのクワッドには、二分木構造のようにその下にレンダリングされた「リーフ」クワッドがあります。各子には、親のローテーションに加えて、独自のローテーションが適用されます。つまり、ルート クワッドが回転すると、ツリー全体が回転しますが、各サブツリーも個別に回転できます。したがって、私の再帰的なレンダー関数は次のようになります...
RenderNode(Node current_node){
glRotate(current_node->rotation);
glBegin(GL_QUADS);
// supply 4 vertices and texture mapping
glEnd();
RenderNode(current_node->leftChild);
RenderNode(current_node->rightChild);
}
ここで、子ノードの回転が親と比べてわずかに異なることを期待しますが、残念ながらそうではありません。単一フレーム中に glRotate() が呼び出される回数が多いほど、回転アニメーションは高速になりますが、すべてのプレートは同じ平面上にとどまります。クワッドは最後までレンダリングされず、最新の変換マトリックスがすべてに適用されているようです。テストとして、各変換の前に glPushMatrix() を配置し、glEnd() への各呼び出しの後に glPopMatrix() を配置してみました。これにより、すべてのプレートの回転が完全に停止します。
誰かがここで何が起こっているか教えてくれますか?