2个旋转物体
2 rotating objects opengl
我有一个旋转的物体大约旋转0,0,0。我现在希望另一个对象围绕另一个对象旋转。有点像地球绕着太阳转,然后月亮绕着地球转。我不知道该怎么做。
void earth(){
glPushMatrix();
glRotatef(anglee, 1.0f, 0.0f, 0.0f);
glTranslatef(0.0,20,0);
glutSolidSphere(0.8,50,50);
glPopMatrix();
glPushMatrix();
glRotatef(anglee, 0.0f, 0.0f, 0.0f);
glTranslatef(0.0,20.0,8);
glutSolidSphere(0.4,50,50);
glPopMatrix();
anglee+=4.0f;
}
我已经正确进行了第一次旋转,但我不确定如何进行第二次旋转。
这里有一个提示.. 在你的显示回调函数中这样做:
void display()
{
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(10,10,10, 0,0,0, 0,1,0);
/* current position is by default the origin */
//draw sun
glutSolidSphere(1,100,100);
//draw planet
glRotated(angle1,0,1,0); //rotates position by angle1
glTranslated(0,0,5); //translates position by sun-planet distance
glutSolidSphere(0.7,100,100); //draw planet at this new position
//draw moon
glRotated(angle2,0,1,0); //rotates position by angle1+angle2
glTranslated(0,0,2); //translates position by planet-moon distance
glutSolidSphere(0.3,100,100); //draw moon at this new position
glutSwapBuffers();
angle1 += 0.2;
angle2 += 0.2;
if(angle1 > 360) angle1 = 0;
if(angle2 > 360) angle2 = 0;
}
尝试从绘制行星和月球部分注释一些线条,看看差异,将帮助您理解它。
希望这有帮助!
你在第二次轮换中遇到的问题:
glRotatef(anglee, 0.0f, 0.0f, 0.0f);
是不是你没有指定无旋转轴!!
尝试:
glRotatef(anglee, 0.0f, 1.0f, 0.0f);
绕 Y 轴旋转 !!
下面是一些伪代码:
声明时间浮点数。
在更新/绘制循环中将其递增一个小值,例如 .01
对变换 X 值执行 Math.cos(time) *(所需的半径),对变换 Y 值执行 Math.sin(time) *(所需的半径)。这将导致基于围绕零的时间进展速率的轨道运行。
如果您需要将其偏移"中心对象"的位置,则只需将第一个对象的平移添加到每个平移轴即可。
你实际上正在做的是在空间中绝对地改变这两个球体。你需要做的是做月球相对于地球位置的位置 ->不要在绘制地球和月球之间做glPopMatrix()。通过这样做,您正在重置 opengl 转换矩阵。
我会尝试如下:
- 在 0/0/0 绘制月亮
- 将月球转换为 0/0/0 左右的轨道
- 在 0/0/0 绘制地球
- 将地球转换为围绕太阳的轨道
所以一切都可以在GPU上完成...
PS:我没有尝试过你的代码。因此,可能需要对代码进行一些进一步的更改才能按预期工作......
相关文章:
- 如何在 c++ 中旋转向量中的每个第 N 个元素
- 确定数组是否可以旋转 3 个连续的数组元素进行排序?
- 如何校准相机焦距,平移和旋转给定四个点
- C++旋转数组的最后 n 个元素
- 我如何仅使用一个Arduino uno才能在同一时间和同一方向上旋转两个步进电动机
- OpenCV 检测多个旋转的缩放对象
- 当先前调用Remove_All_Sinks()时,提升日志设置旋转和最大文件大小导致添加第二个接收器
- 如何找到两个不同坐标系中对应点之间的旋转和平移(变换矩阵)
- C 四个旋转不按预期工作
- C++ 快板第一个显示程序 - 平移旋转刻度
- 2个旋转物体
- sqlite3带有参数的多个插入物;仅插入一个记录
- 旋转两个球
- 如何找到由3点与3个红外LED组成的三角形的旋转和翻译
- Boost通过旋转记录多个文件
- 比较两个字符串以查看它们是否在旋转
- 我们如何计算旋转和平移两个立体相机在opencv StereoRectify(r,t自变量)中使用
- 如何在3D中围绕相同的枢轴/点旋转多个对象
- 如何用OpenCV将图像分成四个象限,并将象限1和象限4旋转180度
- Box2d旋转时两个物体碰撞时的奇怪行为