Opengl простое вращение сферы

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем -, 23 ноя 2010.

Статус темы:
Закрыта.
  1. Гость

    Здравствуйте. У меня простой вопрос: Рисую в OpenGl оси координат и сферу.Затем, с помощью таймера вращаю сферу вокруг своей оси. Проблема в том что вращается и сфера и оси координат. Как мне сделать так что бы вращалась только сфера? В общем вот что я делаю:
    Код (C++):
    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);
    }
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Ну тут ты вообще бреданул. Таймер сферу вращать не может)

    Выкладывай весь код, либо смотри в сторону glPushMatrix.
     
  3. Гость

    Ну я не смог правильно объяснить потому что не силен в этом направлении. Я имел ввиду что в таймере вызываю функцию Draw() а уж там glRotated(10, 0,1,0) каждый раз поворачивает сферу. На счет glPushMatrix я согласен. Пытался не раз с их помощью исправить, но как их правильно использовать не могу понять. На сколько я правильно понимаю в том куске кода что я выложил необходимо в нужном порядке и в нужном месте вызвать glPushMatrix() и glPopMatrix(). Если можно подскажите где мне их вызвать.
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Попробуй вот так:
    Код (C++):
            ...
    static double angle = 0.0;
    ...
    glColor3d( 0.0, 0.0, 0.0 );
    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 );

    //      glMatrixMode( GL_MODELVIEW );           // если не заработает попробуй откомментировать это
    glPushMatrix();                     // заталкиваем матрицу перед поворотом
    glRotated( angle, 0, 1, 0 );
    glColor3d( 1.0, 0.0, 0.0 );
    gluSphere( quadObj, 3, 30, 30 );
    glPopMatrix();                      // восстанавливаем матрицу
    gluDeleteQuadric( quadObj );
    SwapBuffers( ghDC );
    ...
    angle += 0.5;
    ...
    При таком подходе потребуется внести переменную (угол поворота). В моем случае это angle.
     
  5. Гость

    Спасибо. Получилось.
     
  6. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Ну вот и славненько.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей