Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

4 вьевпорта

1.9K
04 сентября 2007 года
0xf001
96 / / 24.05.2005
У меня экран поделен на четыре равные части и в каждую я хочу рисовать отдельную часть сцены. Для этого я настраиваю вьюпорт glViewPort() на половину окна повертикали и горизонтали, отсчитывая от начала оконных координат. Рисуется нормально. Глюки начинаются с остальными тремя, когда я рисую туда сцену, она искажается, изображение сдвигается. Я пытался для каждого вьевпорта вызывать gluPerspective() но особого успеха это не принесло.
Скажите, как правильно рисовать поочередно в каждый из 4-х вьевпортов?
15K
22 сентября 2007 года
vja
85 / / 09.01.2007
это автор имеет ввиду?
15K
22 сентября 2007 года
vja
85 / / 09.01.2007
если да, то вот примерный код...
здесь в зависимости от количества игроков будет кол-во вьюпортов
писалось давно, так что возможны мелкие неточности, и тд... ^)

Код:
switch(playersCount)
    {
                case 1:
                    glViewport(0, 0, currentX, currentY);
                    glScissor(0, 0, currentX, currentY);
                    renderGame(&players[0]);
                    break;

                case 2:
                    glViewport(currentX/2, 0, currentX/2, currentY);
                    glScissor(currentX/2, 0, currentX/2, currentY);
                    renderGame(&players[0]);

                    glViewport(0, 0, currentX/2, currentY);
                    glScissor(0, 0, currentX/2, currentY);
                    renderGame(&players[1]);
                    //draw line
                    glViewport(0, 0, currentX, currentY);
                    glScissor(0, 0, currentX, currentY);
                    global::ortho();
                    glTranslatef(0,0,-1);
                    glDisable(GL_TEXTURE_2D);
                    glColor3f(1,1,1);
                    glLineWidth(2);
                    glBegin(GL_LINES);
                        glVertex2f(0, currentY/2);
                        glVertex2f(0, -currentY/2);
                    glEnd();
                    glEnable(GL_TEXTURE_2D);
                    break;
               
                case 3:
                    glViewport(0, currentY/2, currentX/2, currentY/2);
                    glScissor(0, currentY/2, currentX/2, currentY/2);
                    renderGame(&players[0]);

                    glViewport(currentX/2, currentY/2, currentX/2, currentY/2);
                    glScissor(currentX/2, currentY/2, currentX/2, currentY/2);
                    renderGame(&players[1]);

                    glViewport(currentX/4, 0, currentX/2, currentY/2);
                    glScissor(currentX/4, 0, currentX/2, currentY/2);
                    renderGame(&players[2]);

                    glViewport(0, 0, currentX, currentY);
                    glScissor(0, 0, currentX, currentY);
                    global::ortho();
                    glTranslatef(0,0,-1);
                    glDisable(GL_TEXTURE_2D);
                    glColor3f(1,1,1);
                    glLineWidth(2);
                    glBegin(GL_LINES);
                        glVertex2f(-currentX/2, 0);
                        glVertex2f(currentX/2, 0);
                       
                        glVertex2f(0, currentY/2);
                        glVertex2f(0, 0);                        

                    glEnd();
                    glEnable(GL_TEXTURE_2D);
                    break;
                   
                case 4:
                    glViewport(0, currentY/2, currentX/2, currentY/2);
                    glScissor(0, currentY/2, currentX/2, currentY/2);
                    renderGame(&players[0]);

                    glViewport(currentX/2, currentY/2, currentX/2, currentY/2);
                    glScissor(currentX/2, currentY/2, currentX/2, currentY/2);
                    renderGame(&players[1]);

                    glViewport(0, 0, currentX/2, currentY/2);
                    glScissor(0, 0, currentX/2, currentY/2);
                    renderGame(&players[2]);
                   
                    glViewport(currentX/2, 0, currentX/2, currentY/2);
                    glScissor(currentX/2, 0, currentX/2, currentY/2);
                    renderGame(&players[2]);

                    glViewport(0, 0, currentX, currentY);
                    glScissor(0, 0, currentX, currentY);
                    global::ortho();
                    glTranslatef(0,0,-1);
                    glDisable(GL_TEXTURE_2D);
                    glColor3f(1,1,1);
                    glLineWidth(2);
                    glBegin(GL_LINES);
                        glVertex2f(-currentX/2, 0);
                        glVertex2f(currentX/2, 0);
                       
                        glVertex2f(0, currentY/2);
                        glVertex2f(0, -currentY/2);                        

                    glEnd();
                    glEnable(GL_TEXTURE_2D);
                    break;
                   
    }
1.9K
25 сентября 2007 года
0xf001
96 / / 24.05.2005
спасибо большое за помощь, но я уже давно всё сделал :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог