Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > простое вращение в OpenGL


Автор: Yuran89 23.11.2010, 19:06
Здравствуйте. У меня простой вопрос: Рисую в C++ Builder 6 (OpenGl) оси координат и сферу.Затем, с помощью таймера вращаю сферу вокруг своей оси. Проблема в том что вращается и сфера и оси координат. Как мне сделать так что бы вращалась только сфера? В общем вот что я делаю:
Код

void TForm1::Draw()
      {
      int vid;
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
        glEnable(GL_POINT_SMOOTH);        
 
  glColor3d(0.0,0.0,0.0);
//  glPushMatrix();
  glBegin(GL_LINES);  
     glVertex2d(-7,-5); 
     glVertex2d(-7,8);
     glVertex2d(-7,-5); 
     glVertex2d(8,-5); 
  glEnd();              
 
        GLUquadricObj *quadObj;
        quadObj=gluNewQuadric();
        if (RadioButton2->Checked==true)        vid=GLU_LINE;
           else if(RadioButton3->Checked==true)       vid=GLU_POINT;
              else vid=GLU_FILL;
        gluQuadricDrawStyle(quadObj, vid);
        glRotated(10, 0,1,0);
        glColor3d(1.0,0.0,0.0);
        gluSphere(quadObj, 3,30,30);  
 // glPopMatrix();
        gluDeleteQuadric(quadObj);
        SwapBuffers(ghDC);
      }

Автор: Yuran89 24.11.2010, 00:36
В каком порядке мне вызывать glPushMatrix() и glPopMatrix(), и в каком месте?

Автор: Alexeis 24.11.2010, 10:13
Цитата(Yuran89 @  24.11.2010,  01:36 Найти цитируемый пост)
В каком порядке мне вызывать glPushMatrix() и glPopMatrix(), и в каком месте? 

  Чтобы выводить модель без поворота следует сбросить матрицу до единичной glLoadIdentity() . Если предыдущая матрица нужна, то перед сбросом следует сделать glPushMatrix(), а для того чтобы снова использовать ее для вращения, то восстановить glPopMatrix()
  Но вообще, сначала следует задать тип матрицы, для которой осуществляется операция при помощи glMatrixMode()

Автор: Yuran89 24.11.2010, 11:56
Код

        glPushMatrix();                        
            glRotated( angle, 0, 1, 0 );
            glColor3d( 1.0, 0.0, 0.0 );
            gluSphere( quadObj, 3, 30, 30 );  
        glPopMatrix(); 


решение найдено, но боюсь что скоро появятся другие вопросы... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)