OpenGL
Возникла такая ситуация. Есть несколько объектов. Hyжно повеpнyть некотоpые из них. Функция glRotate() повоpачивает всю сценy. Сyществyет ли функция, котоpая повоpачивает только некотоpые (не все) вершины?
Для того, чтобы пpименить pазные пpеобpазования к pазным объектам сцены, надо делать так:
glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glRotate, glScale, glTranslate // ... --- в общем, всё что нyжно...
Затем pисyешь объекты...
После того, как наpисовал, yказываешь новое пpеобpазование:
glLoadIdentity(); glRotate, glScale, glTranslate // ...
Снова pисyешь объекты. И так повтоpяешь, сколько надо.
Оставить комментарий
Комментарии
1.
4 августа 2004, 00:54:48
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslated(dx,dy,dz);
Надо писать до рисования сферы, то есть получается так:
- Сдвиг/поворот
- Рисование объекта
glLoadIdentity();
glTranslated(dx,dy,dz);
Надо писать до рисования сферы, то есть получается так:
- Сдвиг/поворот
- Рисование объекта
2.
27 июля 2004, 07:40:05
(Предыдущее ушло случайно, прошу администратора ликвидировать его.)
Не знаю, поможет ли (я сам всё делаю неправильно, методом проб и ошибок), но ниже я привожу выданный из своей (как-то) работающей программы:
for(int p=1;p<=iCardinal-2;p++)
{
...............................
glLoadIdentity(); //Hi shtock
glTranslatef(0.0f, -0.8f, -5.0f);
glRotatef(rtri,0.0f,1.0f,0.0f);
glRotatef(rtKonf, 1.0f, 0.0f, 0.0f);
glTranslatef(-a,0.0f,0.0f);
glRotatef( Mu, 0.0f,0.0f,1.0f);
glRotatef(-90.0,1.0f,0.0f,0.0f);
glLineWidth(1.0);
glColor3f(0.0f,0.0f,1.0f);
gluNewQuadric( );
quadObjC6[p-1] = gluNewQuadric ();
gluQuadricDrawStyle (quadObjC6[p-1], GLU_FILL);
gluCylinder (quadObjC6[p-1], 0.012, 0.01, Di, 10, 10);
glEnd();
glLoadIdentity(); //Hi conus
glTranslatef(0.0f, -0.8f, -5.0f);
glRotatef(rtri,0.0f,1.0f,0.0f);
glRotatef(rtKonf, 1.0f, 0.0f, 0.0f);
glTranslatef(glfKonfigVertex[0]<p>,
glfKonfigVertex[1]<p>,0.0f);
glRotatef( Mu, 0.0f,0.0f,1.0f);
glRotatef(90.0,1.0f,0.0f,0.0f);
gluNewQuadric( );
quadObjC8[p-1] = gluNewQuadric ();
gluQuadricDrawStyle (quadObjC8[p-1], GLU_FILL);
gluCylinder (quadObjC8[p-1], 0.0, 0.025, 0.12, 10, 10);
glEnd();
................................
}(Речь здесь идёт о некоторой совокупности векторов)
Что из этого обрывка следует? Все эти преобразования (повороты и сдвиги) относятся не к сцене, а к объектам, нарисованным в промежутке между glLoadIdentity() и glEnd().
У меня повороты для этих пар одинаковые только потому, что эти пары объектов вместе вращаются.
Успехов, Sergo.
Не знаю, поможет ли (я сам всё делаю неправильно, методом проб и ошибок), но ниже я привожу выданный из своей (как-то) работающей программы:
for(int p=1;p<=iCardinal-2;p++)
{
...............................
glLoadIdentity(); //Hi shtock
glTranslatef(0.0f, -0.8f, -5.0f);
glRotatef(rtri,0.0f,1.0f,0.0f);
glRotatef(rtKonf, 1.0f, 0.0f, 0.0f);
glTranslatef(-a,0.0f,0.0f);
glRotatef( Mu, 0.0f,0.0f,1.0f);
glRotatef(-90.0,1.0f,0.0f,0.0f);
glLineWidth(1.0);
glColor3f(0.0f,0.0f,1.0f);
gluNewQuadric( );
quadObjC6[p-1] = gluNewQuadric ();
gluQuadricDrawStyle (quadObjC6[p-1], GLU_FILL);
gluCylinder (quadObjC6[p-1], 0.012, 0.01, Di, 10, 10);
glEnd();
glLoadIdentity(); //Hi conus
glTranslatef(0.0f, -0.8f, -5.0f);
glRotatef(rtri,0.0f,1.0f,0.0f);
glRotatef(rtKonf, 1.0f, 0.0f, 0.0f);
glTranslatef(glfKonfigVertex[0]<p>,
glfKonfigVertex[1]<p>,0.0f);
glRotatef( Mu, 0.0f,0.0f,1.0f);
glRotatef(90.0,1.0f,0.0f,0.0f);
gluNewQuadric( );
quadObjC8[p-1] = gluNewQuadric ();
gluQuadricDrawStyle (quadObjC8[p-1], GLU_FILL);
gluCylinder (quadObjC8[p-1], 0.0, 0.025, 0.12, 10, 10);
glEnd();
................................
}(Речь здесь идёт о некоторой совокупности векторов)
Что из этого обрывка следует? Все эти преобразования (повороты и сдвиги) относятся не к сцене, а к объектам, нарисованным в промежутке между glLoadIdentity() и glEnd().
У меня повороты для этих пар одинаковые только потому, что эти пары объектов вместе вращаются.
Успехов, Sergo.
3.
24 июня 2004, 17:55:46
Я не понял где это писать???
Допустим, я хочу нарисовать сферу, и сдвинуть ее:
...
GLUquadricObj *sphere;
sphere=gluNewQuadric();
gluQuadricDrawStyle(sphere, GLU_FILL);
glColor3f(1,0,0);
gluSphere(sphere, 2,10,10);
gluDeleteQuadric(sphere);
...
Где именно я должен написать:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslated(dx,dy,dz);
Допустим, я хочу нарисовать сферу, и сдвинуть ее:
...
GLUquadricObj *sphere;
sphere=gluNewQuadric();
gluQuadricDrawStyle(sphere, GLU_FILL);
glColor3f(1,0,0);
gluSphere(sphere, 2,10,10);
gluDeleteQuadric(sphere);
...
Где именно я должен написать:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslated(dx,dy,dz);