gpt4 book ai didi

c - OpenGL/GLUT : glTranslatef and glRotatef before drawing cube, 或之后?

转载 作者:太空宇宙 更新时间:2023-11-04 08:33:28 24 4
gpt4 key购买 nike

我目前正在使用 OpenGL 和 GLUT 框架来处理粒子。

但是,对于旋转/平移,我似乎可以让我的逻辑正常工作。

我目前情况的伪代码:

void display() {
drawEnvironment();

for each particle 'part' in the array {
glPushMatrix(); // pushes the matrix for the current transformations? i.e. this particle?

glRotatef(part.angles); // rotate this matrix based of it's own angles (constantly changing)

drawParticle(part); // draws at origin

glTranslatef(part.positon); // translate to the position

glPopMatrix();
}
}

我认为我在这里做的事情如下:

  1. 从堆栈中推送我需要的变换矩阵(对于当前粒子)
  2. 旋转所述矩阵(glRotatef 围绕原点 (0,0,0) 旋转)
  3. 在原点绘制粒子,使其原地旋转
  4. 现在粒子已经旋转,将粒子平移到它的位置
  5. 将变换矩阵弹回栈中

我也尝试过翻译 -> 旋转 -> 绘图,以及其他一些混合。

如果没有快速视频,很难解释出了什么问题: https://www.youtube.com/watch?v=G0ouhCKKcIM

看起来它在被平移后旋转,所以由于它围绕原点旋转,所以它沿着那个更大的圆旋转,而不是绕着它自己的轴旋转。

最佳答案

转换应按以下顺序应用:

  1. 将矩阵压栈
  2. 翻译到位置
  3. 旋转它
  4. 画出来
  5. 弹出矩阵

这是因为 OpenGL 通过预乘工作。第一个操作最后执行。

关于c - OpenGL/GLUT : glTranslatef and glRotatef before drawing cube, 或之后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27257405/

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