FAQ
Як відсилати листи…
Лист на contact@opengl-tutorial.org є самий ефективний спосіб отримати підтримку. Проте, якщо у Вас є проблема, намагайтесь додати до листа як можна більше інформації. А саме:
- Операційна система : Gentoo ? Windows XP ? … (пам’ятайте, використовуйте 2.1 порт, якщо у Вас мак !)
- 32 біти чи 64 біти ?
- Графічна карта : NVIDIA ? AMD ? Intel ? S3 ? Matrox ? (пам’ятайте, використовуйте 2.1 порт, якщо у Вас інтегрована відеокарта !)
… та інша інформація, яка не є обов’язковою, проте може допомогти:
- Версія драйвера відеокарти
- Call stack (трасування стеку)
- знімок екрана
- вивід в консолі
- мінідамп…
І не забувайте читати цей FAQ - він не даремно так називається =)
Я не можу скомпілювати цей туторіал
- Переконайтесь, що Ви прочитали туторіал 1. Будь-ласка, використовуйте CMake замість створення проекту заново. Або, як мінімум прочитайте Побудова Вашої власної С програми.
- Якщо у Вас помилки, які відносяться до бібліотеки AssImp, то воно буде скоро виправлено. Та це відноситься лише до одного проекту, всі інші повинні компілюватись без проблем.
- Якщо у Вас помилки, які відносяться до бібліотеки AntTweakBar, це теж відноситься лише до одного туторіалу.
- Якщо у Вас дійсно проблеми, не бійтесь відправити нам електронного листа
Я все скомпілював, проте воно падає при старті. Що відбувається ?
Я декілька варіантів:
Несумісна відеокарта/операційна система
Будь-ласка, перевірте, чи не використовуєте Ви карту від Intel. Ви можете використати glewinfo, GPU Caps Viewer чи інший інструмент.
Карти від Intel, за виключенням HD4000 не підтримують OpenGL 3.3. Насправді, більшість з них підтримує тільки OpenGL 2.1. Ви можете використовувати версію 2.1, яку можна завантажити з сторінки Download.
Також можуть бути проблеми, якщо ви використовуєте Mac з pre-Lion версією. Що ж…
Невірна робоча папка/каталог
Є шанс, що Ви запускаєте проект з невірним робочим каталогом. Спробуйте запустити .exe з провідника.
Перегляньте перший туторіал, де описано, як налаштувати IDE для налагодження.
Зверніть увагу, що зазвичай .exe компілюється в build каталозі, але автоматично копіюється в каталог з початковим кодом, де він може знайти потрібні ресурси (зображення, 3д моделі, шейдери).
Немає VAO
Якщо Ви створюєте програму з “нуля”, переконайтесь, що Ви створили VAO:
GLuint VertexArrayID;
glGenVertexArrays(1, &VertexArrayID);
glBindVertexArray(VertexArrayID);
Баг в GLEW
GLEW містить баг, який робить неможливим використання контексту core (якщо тільки Ви не використовуєте код з цього туторіалу, де проблема була виправлена). Є три рішення:
- Попросити бібліотеку GLFW використовувати профіль сумісності :
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);
- Використовуйте
glewExperimental
; це рекомендований спосіб:
glewExperimental = true;
- Виправити glew… Дивіться цю латку.
CMake
Ви прочитали Туторіал 1, так? Ви не пробували написати Ваш власний makefile і побудувати все самостійно, так?
Чому я повинен використовувати OpenGL 3.3 якщо Intel та Mac не може їх запустити ?!
… також відоме як :
Яку версії OpenGL я повинен використовувати ?
Насправді, я не рекомендую вивчати OpenGL 3 або старше. Я використовую його в туторіалах, тому що це чистий спосіб для вивчення OpenGL без всіляких застарілих речей і як тільки ви знаєте версію 3.3, використовувати 2.1 буде легко.
Що я рекомендую:
- Вчіть OpenGL 3.3 і Ви будете знати “правильний шлях”
- Встановіть цільове обладнання для Вашої програми. Наприклад, вимагають FBO та GLSL.
- Використовуйте GLEW для завантаження всіх розширень. При старті відкидайте все обладнання (залізо), що не відповідає вимогам.
- І тепер Вим можете писати код як для версії 3.3 з деякими змінами.
- Якщо Ви дійсно хочете мати справи з старим/дешевим обладнанням, Ви все ще можете це робити, заблокував певні ефекти, які вимагають нову функціональність, наприклад FBO.
Де я можу завантажити OpenGL 3 ?
Ви не можете.
В випадку Windows, для прикладу, у Вас є тільки opengl32.dll, яка містить тільки OpenGL 1.1. Але в тут є функція wglGetProcAddress()
. яка робить можливим отримувати функції, які не реалізовані напряму в opengl32.dll, але доступні в драйвері.
GLEW використовує wglGetProcAddress
для всіх потрібних символів (функцій) і робить їх доступними для Вас. (Ви можете це зробити самостійно, але це жахливо нудно). Також GLEW містить деякі константи, які не існували 10 років тому, наприклад GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB
.
Отже, просто переконайтесь, що Ваш GPU підтримує потрібну версію, використовуйте GLEW і вперед.
Чому ви створюєте VAO в кожному туторіалі і не ніколи не використовуєте його ?
Це не так. Воно прив’язується і використовується протягом всього часу виконання програми.
VAO є обгорткою навколо VBO. Вони пам’ятають які буфери прив’язані до яких атрибутів і багато інших речей. Вони зменшують кількість OpenGL викликів перед glDrawArrays/Elements(). Починаючи з OpenGL 3 Core вони є обов’язковими, але ви можете використовувати тільки один та модифікувати (що власне й робиться в цьому підручнику).
VAO можуть здатись дещо складними для туторіалу для початківців і вони не мають еквіваленту в OpenGL 2 (Який я рекомендую для “продакшину”, дивіться відповідний FAQ) і це не очевидно, чи буде він більш кращий. Якщо Вам цікаві VAO, будь-ласка подивіться в відповідний розділ wiki OpenGL. Вони можуть дещо покращити продуктивність програми, але не завжди
У мене помилка “Unable to start program ALL_BUILD” (неможливо запустити програму ALL_BUILD)
ALL_BUILD це допоміжний проект, який генерує CMake, це не є справжньою програмою.
Як зазначено в першому туторіалі, Ви повинні обрати проект, який Ви хочете запустити, натиснувши правою кнопкою мишки на потрібному проекті (в студії) і обрати “Set up as startup project” (встановити стартовим проектом), як на цьому малюнку:
Я отримую помилку про робочий каталог і програма падає.
Ви повинні запускати програму з каталогів tutorial01_first_window/, tutorial02_red_triangle/ і так далі. Якщо Ви запускаєте з IDE (студії), Ви повинні налатувати студію/проект для цього.
Будь-ласка, прочитайте перший туторіал для деталей.