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

  • Автор темы -
  • Дата начала
Статус
Закрыто для дальнейших ответов.

Гость
#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);
}
 

Гость
#3
Ну тут ты вообще бреданул. Таймер сферу вращать не может)

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

lazybiz

Well-Known Member
03.11.2010
1 339
0
#4
Попробуй вот так:
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.
 
Статус
Закрыто для дальнейших ответов.