Форум программистов, компьютерный форум, киберфорум
Наши страницы
OpenGL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Darkos
8 / 8 / 12
Регистрация: 16.05.2014
Сообщений: 112
Завершенные тесты: 1
#1

Некорректная отрисовка полигона

21.09.2017, 17:42. Просмотров 764. Ответов 1

Здравствуйте. Недавно начал с OpenGL работать. Рисую куб из шести полигонов. Последний полигон некорректно отображался(в виде треугольника, т.е. пол полигона не было). Я заменил в коде отрисовку полигона на два треугольника но проблема осталась. Теперь не отображается четверть полигона.

Код отрисовки:
Кликните здесь для просмотра всего текста

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
glBegin(GL_POLYGON);        //1
        glColor4f(1,0,0, 1);
 
        glVertex3f(-100, 100, 0);
        glVertex3f(100, 100, 0);
        glVertex3f(100, -100, 0);
        glVertex3f(-100, -100, 0);
    glEnd();
 
    glBegin(GL_POLYGON);        //2
        glColor4f(0,1,0, 1);
 
        glVertex3f(-100, 100, 100);
        glVertex3f(100, 100, 100);
        glVertex3f(100, -100, 100);
        glVertex3f(-100, -100, 100);
    glEnd();
 
    glBegin(GL_POLYGON);        //3
        glColor4f(0,0,1, 1);
 
        glVertex3f(-100, 100, 0);
        glVertex3f(-100, 100, 100);
        glVertex3f(-100, -100, 100);
        glVertex3f(-100, -100, 0);
    glEnd();
 
    glBegin(GL_POLYGON);        //4
        glColor4f(1,1,0, 1);
 
        glVertex3f(100, 100, 0);
        glVertex3f(100, 100, 100);
        glVertex3f(100, -100, 100);
        glVertex3f(100, -100, 0);
    glEnd();
 
    glBegin(GL_POLYGON);        //5
        glColor4f(1,0,1, 1);
 
        glVertex3f(-100, 100, 0);
        glVertex3f(100, 100, 0);
        glVertex3f(100, 100, 100);
        glVertex3f(-100, 100, 100);
    glEnd();
 
    glBegin(GL_TRIANGLES);        //6
        glColor4f(0,1,1, 1);
 
        glVertex3f(-100,-100, 0);
        glVertex3f(-100, -100, 100);
        glVertex3f(100, -100, 0);
 
        glVertex3f(100,-100, 100);
        glVertex3f(100, -100, 0);
        glVertex3f(-100, -100, 0);
    glEnd();


Настройки вывода:
Кликните здесь для просмотра всего текста

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void GLScene::resizeGL(int nWidth, int nHeight)
{
    w=nWidth;
    h=nHeight;
 
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    float aspectRatio = (GLfloat)w / (GLfloat)h;
    gluPerspective(45,aspectRatio,1,800);
    glViewport(0, 0, (GLint)nWidth, (GLint)nHeight);
    glTranslatef(0,0,-700);
 
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_COLOR_MATERIAL);
    glDepthFunc ( GL_LEQUAL );
}


Скриншот окна:
Некорректная отрисовка полигона


Подскажите, что я неправильно делаю?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2017, 17:42
Ответы с готовыми решениями:

Вращение полигона
glLoadIdentity(); //glTranslatef(0.0,0.0,0.0); Что нужно сделать тут ...

Пересечение линии и полигона
Подскажите пожалуйста, как реализовать функцию пересечения линии и полигона в...

Геометрия. Оболочка полигона
Дан произвольный полигон число точек весьма большое - несколько сот тысяч....

Виды заливки полигона
Строю всякие многоугольники в с# с помощью opengl. Вот заинтересовало, как...

Вращение выбранного полигона
Когда использую glRotate у меня начинают вращаться все ректенглы в сцене. Как...

1
snake32
1643 / 1097 / 191
Регистрация: 26.02.2009
Сообщений: 4,063
Записей в блоге: 5
21.09.2017, 18:03 #2
Лучший ответ Сообщение было отмечено Darkos как решение

Решение

Пробуте так:
C++
1
2
3
4
5
6
7
8
9
10
11
  glBegin(GL_TRIANGLES);        //6
        glColor4f(0,1,1, 1);
 
        glVertex3f(-100,-100, 0);
        glVertex3f(-100, -100, 100);
        glVertex3f(100, -100, 0);
 
        glVertex3f(100,-100, 100);
        glVertex3f(100, -100, 0);
        glVertex3f(-100, -100, 100); // z был 0
    glEnd();
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2017, 18:03

Деформация изгиба полигона
Я, в принципе, понимаю, что такое деформация изгиба. Но не понимаю, какой...

Определение полигона под мышью
Есть полигон на экране. Нужно определить, когда курсор мыши наведен на него....

Битые пикселы по краям полигона
Положил текстуру на квадратный полигон, сделал, чтобы полигон медленно двигался...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru