glBegin - відокремлює вертекси примітивів, або групи подібних примітивів.
C Специфікація
void glBegin (GLenum mode) ;
Параметри
mode - вказує примітив або примітиви, які будуть конструюватися з вертексів вказаних після виклику даної функції (glBegin) і перед наступним викликом функції glEnd. Доступні десять констант: GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS, GL_QUAD_STRIP і GL_POLYGON.
Опис
Функції glBegin i glEnd відокремлюють вертекси, які визначають примітив або групу подібних примітивів. Функція glBegin приймає один параметр, котрий вказує у який з відомих десяти способів інтерпретувати наступні вертекси, які вказуються за допомогою команд glVertex. Припустимо, що число n вказує цілочисельний порядковий номер вертекса (геометричної точки), який починається обраховуватись з 1; і N у якості загальної кількості вказаних вертексів. Інтерпретування констант обере наступний вигляд:
- GL_POINTS - інтерпретувати кожний вертекс як одинарну геометричну точку. Вертекс n визначає точку n, малюються N точок;
- GL_LINES - трактувати кожну пару вертексів у якості незалежної лінії. Вертекси 2n-1 s 2n визначають лінію n, відмальовуються N/2 ліній.
- GL_LINE_STRIP - кожен вертекс інтерпретується у якості точок однієї ламаної, починаючи з першого вертекса і до останнього. Вертекс n i n+1 визначають лінію n, N-1 ліній відмальовуються.
- GL_LINE_LOOP - кожен вертекс інтерпретується у якості точки на ламаній лінії, у якої остання і перша точка також об'єднюються у лінію-сегмент ламаної (кільце-подібна структура). Вертекси n i n+1 визначають лінію n. Однак остання лінія визначається вертексом N i 1. Малюються N ліній.
- GL_TRIANGLES - спричиняє інтерпретацію кожних трьох вертексів у якості геометричних точок трикутника. Вертекси 3n-2, 3n-1 i 3n визначають трикутник n. Малюється N/3 трикутників.
- GL_TRIANGLE_STRIP - спричиняє інтерпретування наступних вертексів у якості об'єднаної групи трикутників. Один трикутник визначається для кожного вертексу, який вказаний після двох вертексів. Для парних n, вертекси n, n+1 i n+2 визначають трикутник n. Для непарних n, вертекси n+1, n, n+2 визначають трикутник n. Малюються N-2 трикутників.
- GL_TRIANGLE_FAN - спричиняє інтерпретування наступних вертексів у якості точок об'єднаної групи трикутників. Один трикутник визначений для кожного вертексу, який вказаний після перших двох. Вертекси 1, n+1 i n+2 визначають трикутник n. Малюються N-2 трикутників.
- GL_QUADS - константа спричиняє інтерпретування наступних вертексів у якості точок неалежних чотирикутників. Вертекси 4n-3, 4n-2, 4n-1 i 4n визначають чотирикутник n. Відмальовуються N/4 чотирикутники.
- GL_QUAD_STRIP - спричиняє інтерпретування наступних вказаних вертексів у якості точок з'єднаної групи чотирикутників. Один чотирикутник визначається кожною парою вертексів, вказаною перед першими двома вертексами. Вертекси 2n-1, 2n, 2n+2 i 2n+1 визначають чотирикутник n. Всього малюються N/2-1 чотирикутники. Зверніть увагу на те, що порядок, за яким формуються об'єднані чотирикутники відрізняється від формування цих фігур з незалежних даних (GL_QUADS).
- GL_POLYGON - константа спричиняє інтерпретування наступних вертексів у якості точок одного випуклого многогранника. Вертекси від 1 до N визначають цей многогранник.
Тільки деяка визначена множина команд може розміщуватися між викликами glBegin i glEnd. Вони являються наступними: glVertex, glColor, glSecondaryColor, glIndex, glNormal, glFogCoord, glTexCoord, glMultiTexCoord, glVertexAttrib, glEvalCoord, glEvalPoint, glArrayElement, glMaterial і glEdgeFlag. Також допустимо використовувати команди glCallList, або glCallLists для виконання списків виконання які включають тільки визначені команди. Якщо викликається будь-яка інша команда між викликами функцій glBegin i glEnd, встановлюється прапорець помилки, а сама команда ігнорується.
Незалежно від значення переданого у якості параметра mode, немає обмеження для кількості геометричних точок (вертексів), які можуть бути визначеними між glBegin i glEnd. Лінії, трикутники, чотирикутники і багатокутники, які вказані не повністю не відмальовуються. Незавершена специфікація отримується тоді коли вказано замало вертексів для конструювання навіть одного примітиву. Незавершений примітив ігнорується, інші малюються.
Мінімальна кількість вказаних вертексів для кожного примітиву наступна:
- 1 для точки (GL_POINTS);
- 2 для лінії (GL_LINES);
- 3 для трикутника (GL_TRIANGLES);
- 4 для чотирикутника (GL_QUADS);
- 3 для багатокутника (GL_POLYGON);
Також режими інтерпретування вимагають наступний множник для кількості вертексів:
- GL_LINE - 2;
- GL_TRIANGLES - 3;
- GL_QUADS - 4;
- GL_QUAD_STRIP - 2;
Помилки
GL_INVALID_ENUM - встановлюється при передачі невідомого значення mode.
GL_INVALID_OPERATION - встановлюється при виклику функції glBegin, після виклику glBegin, перед тим, як була викликана glEnd.
GL_INVALID_OPERATION - встановлюється, коли викликається функція glEnd, які не передував виклик функції glBegin.
GL_INVALID_OPERATION - встановлюється, коли між командами glBegin i glEnd викликалася команда, яка не входить до списку даних: glVertex, glColor, glSecondaryColor, glIndex, glNormal, glFogCoord, glTexCoord, glMultiTexCoord, glVertexAttrib, glEvalCoord, glEvalPoint, glArrayElement, glMaterial, glEdgeFlag, glCallList або glCallLists.
Не дозволяється виклик команд glEnableClientState, glDisableClientState, glEdgeFlagPointer, glFogCoordPointer, glTexCoordPointer, glColorPointer, glSecondaryColorPointer, glIndexPointer, glNormalPointer, glVertexPointer, glVertexAttribPointer, glInterleavedArrays або glPixelStore після виклику функції glBegin і перед викликом glEnd.
Перегляньте також
glArrayElement, glCallList, glCallLists, glColor, glEdgeFlag, glEvalCoord, glEvalPoint, glFogCoord, glIndex, glMaterial, glMultiTexCoord, glNormal, glSecondaryColor, glTexCoord, glVertex, glVertexAttrib, Вступ до OpenGL (Open Graphics Library) - відкрита графічна бібліотека
Оригінал: https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glBegin.xml