当前位置: 代码迷 >> QT开发 >> 3D有关问题 求切磋探讨
  详细解决方案

3D有关问题 求切磋探讨

热度:94   发布时间:2016-04-25 04:29:58.0
3D问题 求切磋探讨
glRotatef( dz,0.0,0.0,1.0 );
这个函数我们都知道,是实现物体转动的函数
而且一旦用过了这个函数
该函数以下所有的绘制的物体都将跟着转动。

我的绘图函数如下所示:
PaintGL()
{
 glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  glLoadIdentity();
  drawcube000(); //画一个立方体
  drawcube100(); //再画一个立方体
}

绘图里调用的函数如下所示

void magic_cube::drawcube000()
{
  int i=0;
  int j=0;
  int k=0;
  glRotatef( dx,1.0,0.0,0.0 ); //绕x轴转动dx的角度
  glRotatef( dy,0.0,1.0,0.0);
  glRotatef( dz,0.0,0.0,1.0 );
  glBegin(GL_QUADS);
  glColor3f( 1, 1, 0.0 ); //绘制正方体
  glVertex3f(-0.3+i*move_change, 0.3+j*move_change, 0.3+k*move_change);
  glVertex3f(0.3+i*move_change, 0.3+j*move_change, 0.3+k*move_change);
  glVertex3f(0.3+i*move_change, -0.3+j*move_change, 0.3+k*move_change);
  glVertex3f(-0.3+i*move_change, -0.3+j*move_change, 0.3+k*move_change);

  glColor3f( 1, 0.0, 1 );
  glVertex3f(0.3+i*move_change, 0.3+j*move_change, 0.3+k*move_change);
  glVertex3f(0.3+i*move_change, 0.3+j*move_change, -0.3+k*move_change);
  glVertex3f(0.3+i*move_change, -0.3+j*move_change, -0.3+k*move_change);
  glVertex3f(0.3+i*move_change, -0.3+j*move_change, 0.3+k*move_change);

  glColor3f( 0.0, 1, 0.0);
  glVertex3f(0.3+i*move_change, 0.3+j*move_change, -0.3+k*move_change);
  glVertex3f(-0.3+i*move_change, 0.3+j*move_change, -0.3+k*move_change);
  glVertex3f(-0.3+i*move_change, -0.3+j*move_change, -0.3+k*move_change);
  glVertex3f(0.3+i*move_change, -0.3+j*move_change, -0.3+k*move_change);

  glColor3f( 0.0, 1, 1 );
  glVertex3f(-0.3+i*move_change, 0.3+j*move_change, -0.3+k*move_change);
  glVertex3f(-0.3+i*move_change, 0.3+j*move_change, 0.3+k*move_change);
  glVertex3f(-0.3+i*move_change, -0.3+j*move_change, 0.3+k*move_change);
  glVertex3f(-0.3+i*move_change, -0.3+j*move_change, -0.3+k*move_change);

  glColor3f( 1, 0, 0 );
  glVertex3f(-0.3+i*move_change, 0.3+j*move_change, -0.3+k*move_change);
  glVertex3f(0.3+i*move_change, 0.3+j*move_change, -0.3+k*move_change);
  glVertex3f(0.3+i*move_change, 0.3+j*move_change, 0.3+k*move_change);
  glVertex3f(-0.3+i*move_change, +0.3+j*move_change, +0.3+k*move_change);

  glColor3f( 0, 0, 1 );
  glVertex3f(-0.3+i*move_change, -0.3+j*move_change, +0.3+k*move_change);
  glVertex3f(+0.3+i*move_change, -0.3+j*move_change, +0.3+k*move_change);
  glVertex3f(+0.3+i*move_change, -0.3+j*move_change, -0.3+k*move_change);
  glVertex3f(-0.3+i*move_change, -0.3+j*move_change, -0.3+k*move_change);
  glEnd();
}

void magic_cube::drawcube100()

{
  int i=1;
  int j=0;
  int k=0;
  glRotatef( dx,1.0,0.0,0.0 );
  glRotatef( dy,0.0,1.0,0.0);
  glRotatef( dz,0.0,0.0,1.0 );
  glBegin(GL_QUADS);
  glColor3f( 1, 1, 0.0 ); //绘制正方体
  glVertex3f(-0.3+i*move_change, 0.3+j*move_change, 0.3+k*move_change);
  glVertex3f(0.3+i*move_change, 0.3+j*move_change, 0.3+k*move_change);
  glVertex3f(0.3+i*move_change, -0.3+j*move_change, 0.3+k*move_change);
  glVertex3f(-0.3+i*move_change, -0.3+j*move_change, 0.3+k*move_change);

  glColor3f( 1, 0.0, 1 );
  glVertex3f(0.3+i*move_change, 0.3+j*move_change, 0.3+k*move_change);
  glVertex3f(0.3+i*move_change, 0.3+j*move_change, -0.3+k*move_change);
  glVertex3f(0.3+i*move_change, -0.3+j*move_change, -0.3+k*move_change);
  相关解决方案