Зарисовка объектов рядом друг с другом

Я хочу нарисовать график ниже на экране:

             |----|    sphere
|----|
/ /
/ /
/ /         cylinder
/ /
/ / angle = 45
| |
| |
| |           cylinder
| |
| |
| |
-----------           cylinder
-----------

Мой вывод:

             / /
/ /
/ /         cylinder
/ /                        |-----|  sphere
/ / angle = 45              |-----|

Я нарисую верхнюю часть, а именно шар с цилиндром. Мой код ниже, пожалуйста, посмотрите и скажите, что не так.

Я попытался найти ошибку, почему мои примитивы не рядом друг с другом. Но я не смог найти. Я попытался изменить параметры перевода, но это не работает. Пожалуйста помоги

void object(void) {
GLUquadraticObj *t = gluNewQuadratic();

glTranslatef(-2.0f, -1.0f, 0.0f);
gluCylinder(t, 0.1f, 0.1f, 0.3f, 32,32);
gluSphere(t, 0.2f, 26, 13);

}

void display(void) {
glLoadIdentity();
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glPushMatrix();
object();
glPopMAtrix();
glPopMatrix();
glutSwapBuffers();
glFlush();
}

void reshape(int w, int h) {
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f, w/h, 1.0, 500.0f);
glLoadIdentity();
}

3

Решение

Вам нужно перевести между вызовами gluCylinder и gluSphere. В текущем коде они оба будут иметь одинаковые преобразования, то есть они будут в одной позиции / ориентации. Пытаться:

gluCylinder ( t, 0.1f, 0.1f, 0.3f, 32,32);
glTranslatef ( -2.0f, -1.0f, 0.0f );
gluSphere ( t, 0.2f, 26, 13 ) ;

Также вы вызываете PopMatrix () больше раз, чем вызываете PushMatrix ().

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector