gpt4 book ai didi

opengl - 使用旧的 OpenGL 功能将单独的旋转应用于多个四边形

转载 作者:行者123 更新时间:2023-12-02 09:30:08 28 4
gpt4 key购买 nike

我想渲染一个具有一定旋转的四边形,此外,该四边形在其下方渲染有“叶”四边形,类似于二叉树结构。除了 parent 的轮换之外,每个 child 都有自己的轮换。换句话说,如果根四边形旋转,整个树也会随之旋转,但每个子树也可以单独旋转。所以我的递归渲染函数看起来有点像这样......

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() ,这完全停止了所有板的旋转。

有人可以告诉我这里发生了什么吗?

最佳答案

由于递归,有点黑客,但这是我可以在短时间内想到的最佳基本情况:

试试这个:

RenderNode(Node current_node, GLfloat parentRotation){
if(current_node->leftChild != null) RenderNode(current_node->leftChild, parentRotation + current_node->rotation);
if(current_node->rightChild != null) RenderNode(current_node->rightChild, parentRotation + current_node->rotation);
glLoadIdentity();
glRotate(current_node->rotation);
glBegin(GL_QUADS);
// supply 4 vertices and texture mapping
glEnd();
}

这样您就不必弹出或推送任何矩阵,它只会重置为每个实际几何渲染的单位矩阵。如果您想渲染其他任何内容,请记住在渲染网格后再次调用 glLoadIdentity()

关于opengl - 使用旧的 OpenGL 功能将单独的旋转应用于多个四边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15461299/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com