Завдання розміру точки в opengl

Коли ви малюєте одну точку, її розмір за замовчуванням дорівнює одному пікселю. Змінити величину точки можна за допомогою функції glPointSize.void glPointSize (GLfloat size);

Функція glPointSize приймає один параметр, що задає приблизний діаметр в пікселях рисуемой точки. Підтримуються не всі розміри, тому слід перевіряти, чи доступний розмір, який ви задаєте для точки. Щоб визначити спектр розмірів і найменший інтервал між ними, застосовується наступний код:

Завдання розміру точки в opengl

Тут масив розмірів буде містити два елементи - найменше та найбільше можливе значення glPointsize. Крім того, крок змінної буде дорівнює найменшому кроці, можливого між розмірами точок. Специфікація OpenGL вимагає підтримки тільки одного розміру точок - 1,0. Програмна реалізація OpenGL від Microsoft, наприклад, дозволяє змінювати розмір точок від 0,5 до 10,0 з мінімальним розміром кроку 0,125. Завдання розміру, що не входить в діапазон, не тлумачиться як помилка. Замість цього використовується найбільший або найменший підтримуваний розмір, найближчий до заданого значення. Точки, на відміну від інших геометричних об'єктів, не змінюються при розподілі на коефіцієнт перспективи. Тобто вони не стають менше при видаленні від точки спостереження, і не стають більше при наближенні до спостерігача. Точки завжди є квадратними. Навіть використовуючи glPointsize для збільшення розміру точок, ви просто отримаєте великі квадрати! Щоб побачити круглі точки, потрібно використовувати техніку захисту від накладення (див. Наступний розділ).

OpenGL зберігає стан безлічі своїх змінних і налаштувань. Такий набір налаштувань називається кінцевим автоматом OpenGL. Ви можете направити кінцевому автомату запит, щоб визначити стан будь-якої змінної або настройки. Використовуючи безліч варіацій glGet, можна запитувати будь-яку особливість або можливість, яку ви активізували або деактивизировать за допомогою glEnable / glDisable. Це відноситься і до чисельних установкам, заданим за допомогою glSet. Розглянемо приклад, в якому використовується кілька таких функцій. Код, наведений у лістингу 3.3, дає ту ж спіральну форму, що і перший приклад, але на цей раз розмір точок поступово збільшується від найменшого можливого розміру до максимального. Цей приклад взятий їх про- грами POINTSZ, наведеної на компакт-диску в папці, яка відповідає цьому розділі. Результат виконання програми POINTSZ, показаний на рис. 3.4, отриманий за допомогою програмної реалізації Microsoft. На рис. 3.5 показана та ж програма, запущена на апаратній прискорювачі, що підтримує великі точки.

Завдання розміру точки в opengl

Задавши розмір точки, більший того, що повертає змінна розміру, ви також зможете спостерігати (це залежить від апаратного забезпечення), що OpenGL використовує найбільший доступний розмір точки, але не збільшує її на зображенні. Цей момент є загальним для всіх параметрів функцій OpenGL, що мають діапазон прийнятних значень. Значення, які не потрапляють в цей діапазон, примусово вводяться в нього. Занадто малі значення перетворюються в найменше прийнятне значення, а надто великі - в найбільшу.

Найбільш очевидним моментом, який ви, можливо, відзначили при запуску про- грами POINTSZ, є те, що точки більшого розміру представляються просто великими кубиками. Це поведінка за умовчанням, але зазвичай в багатьох додатках воно небажано. Крім того, у вас може виникнути питання, що станеться, якщо збільшити розмір точки на значення, більше одиниці. Якщо величина 1.0 представляє один піксель, то як намалювати менше одного пікселя або, скажімо, 2,5 пікселя?