1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

Тема в разделе "С и С++", создана пользователем -, 23 ноя 2010.

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

    Репутация:
    0
    Здравствуйте. У меня простой вопрос: Рисую в 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);
    }
     
  2. lazybiz

    lazybiz Well-Known Member

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

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

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

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    Попробуй вот так:
    Код:
    		...
    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. Гость

    Репутация:
    0
    Спасибо. Получилось.
     
  6. lazybiz

    lazybiz Well-Known Member

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

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