простой графический конвейер в OpenGL

Читаю наброски Шаума КОМПЬЮТЕРНАЯ ГРАФИКА. В книге говорится, что простой графический конвейер выглядит примерно так: геометрическое представление --> преобразование --> преобразование сканирования (хотя автор решил выучить главу преобразования сканирования перед главой преобразования). Я хочу изучить этот простой конвейер на примере openGL. предположим, я хочу создать линию с конечными координатами (150 400) и (700 100) в окне размером (750 500). Код ниже работает очень хорошо. Все, о чем я прошу экспертов, это объяснить «шаги в последовательности», когда происходит преобразование и когда происходит преобразование сканирования. Я знаю, это может звучать глупо, но мне действительно нужно разобраться в этом. Я просто взрослый новичок, изучающий графику самостоятельно в качестве хобби. Я предполагаю, что преобразование сканирования не происходит здесь, в программе. это делается openGL автоматически между вызовами glBegin и glEnd. Я прав?

#include <GL/glut.h>

void init(void)
{
        glClearColor (0.5, 0.2, 0.3, 0.0);
        glClear (GL_COLOR_BUFFER_BIT);      
        glColor4f(0.5,0.7,0.3,0.0);
        glLineWidth(3);
}

void display(void)
{
    glBegin(GL_LINES);
    glVertex2i(50, 400);
    glVertex2i(700, 100);
    glEnd();

    glutSwapBuffers();
}

void reshape(int w, int h)
{
    glViewport(0, 0, (GLsizei) w, (GLsizei) h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h);
}

int main (int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode (GLUT_RGBA | GLUT_DEPTH);
    glutInitWindowPosition(100,150);
    glutInitWindowSize(750,500); // aspect ratio of 3/2
    glutCreateWindow (argv[0]);
    init();
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutMainLoop();         // this is when the frame buffer is displayed on the screen
    return (0);
}

person KawaiKx    schedule 06.03.2014    source источник
comment
В каком году была написана книга?   -  person Kromster    schedule 06.03.2014
comment
@KromStern в 1986 году. код НЕ из книги   -  person KawaiKx    schedule 06.03.2014
comment
Лучше купите что-нибудь посвежее. Я имею в виду, что основы остались прежними, но словарный запас с тех пор изменился. Я предполагаю, что теперь это виртуальная геометрия -> проекция -> растеризация   -  person Kromster    schedule 06.03.2014
comment
Здесь я согласен с Кромом. Определение графического конвейера сильно изменилось за последние 28 лет.   -  person Bartek Banachewicz    schedule 06.03.2014


Ответы (1)


Все этапы выполняются в рамках реализации OpenGL (в основном аппаратно). Вы указываете состояния и данные, затем GL — если говорить в терминах старого GL 1.0 — соберет данные в вершины, пропустит каждую вершину через стадию преобразования, растрирует полученные примитивы на фрагменты, выполнит пофрагментные тесты (которые могут отбрасывать некоторые фрагменты), и обновить полученные пиксели на цели рендеринга.

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

person keltar    schedule 06.03.2014