Попередні поняття
Добре, так що я зібрав поки що це:
- не використовуйте фіксований трубопровід (застарілий або буде застарілий)
- vbos зберігає "об'єктні моделі" (здебільшого n вершинних даних)
- vaos описує, як складаються дані, щоб малювати дзвінки знали, яка частина кожної Vbo є для того, яка інформація про вершину (один vao може посилатися на кілька vbos, навпаки - це щось важко)
- кожен дзвінок дзвінка також надсилає вершинні дані в шейдери
Як я бачу 3D (необов’язково)
З огляду на ці відомості, я бачу, як малювати складні об'єкти 3D дуже добре із сучасним OpenGL. Ви в основному завантажуєте купу моделей об'єктів (можливо, з Blender або іншого подібного програмного забезпечення) у VBO з локальними координатами, а потім просто надаєте для кожного примірника об'єкта інший параметр шейдера (зміщення) для виведення у світовий простір.
Проблема / питання
Однак у 2D проблеми та пріоритети зовсім інші. Ви не малюєте багато складних об'єктів, вам не потрібні складні матриці проекцій, а що-небудь і шейдери набагато простіші.
Який був би найкращий спосіб малювати часто (насправді часто, в основному кожен кадр) змінюючи геометрію за допомогою сучасного OpenGL?
У наступному параграфі ви можете побачити деякі ідеї проблем (проблема кола та прямокутника), які краще визначити вид змін, які мене цікавлять.
Мої спроби (необов’язково)
Отже, я почав думати, як би я мав справу з малюванням основної 2D геометрії на екрані:
- квадрат: завантажте
[(1, 0), (1, 1), (0, 1), (0, 0)]
VBO для геометрії квадрата в локальному просторі, а потім надайте шейдеру фактичну ширину квадрата та світові координати та кольорову інформацію
охолоджується, виглядає легко. Перейдемо до кола:
- коло: вентилятор трикутника з ... е. скільки точності (кількість вершин)? для малих кіл точність повинна бути невеликою, а для кіл помилок - точність. Очевидно, що завантаження 1 VBO не може відповідати всім випадкам. Що робити, якщо мені потрібно додати точність, оскільки розмір кола має бути більшим?
Менш круто. Перейдемо до чогось легшого, прямокутника:
- прямокутник: е. немає "загальної геометрії прямокутника". У вас просто пропорція ширини / висоти, і все, але, мабуть, кожен прямокутник відрізняється, якщо розмір змінюється.
Як бачите, звідти справи йдуть під гору. Особливо зі складними багатокутниками та ще.
Ніякої політики коду: P
Мені просто потрібен огляд ідеї, ніякий код не потрібен, особливо код C або C ++. Просто скажіть такі речі, як: "зробіть VBO з даними вершин, а потім зв’яжіть його, ...".