我无法使用openGL以有序的方式移动这些对象。
我想要做的是让每一行中的每个对象慢慢旋转并移动屏幕右侧,当它从视图中消失时,它应该重新出现在另一侧,就像在循环中一样。
idle函数适用于单个对象,但它不能与对象组一起使用。
str.replace('\\n','\n')
答案 0 :(得分:0)
您必须更改说明的顺序。通过将平移矩阵乘以旋转矩阵,执行围绕对象轴的旋转。
object-matrix = translation-matrix * rotation-matrix
请参阅明确说明的glRotate
文档:
glRotate
围绕向量x
y
z
生成角度旋转。当前矩阵(参见glMatrixMode
)乘以旋转矩阵,产品替换当前矩阵。
像这样调整你的代码:
void renderObject(GLfloat x, GLfloat y,
GLfloat ambr, GLfloat ambg, GLfloat ambb,
GLfloat difr, GLfloat difg, GLfloat difb,
GLfloat specr, GLfloat specg, GLfloat specb, GLfloat shine)
{
glPushMatrix();
glTranslatef(x, y, 0.0); // translation-matrix
glRotatef(yRotated, 0.0, 1.0, 0.0); // multiply by rotation-matrix
glRotatef(xRotated, 1.0, 0.0, 0.0);
.....
}
注意,你的轮换非常轻微。出于调试原因,将yRotated += 0.01;
更改为yRotated += 1.0;
(角度以度为单位)。