OpenGL в Python
Мене якось запитали про це, але без підготовки пояснити було важко, крім того мета була амбітна – намалювати молекулу, тому вийшло не так добре як би хотілось. Спробую написати короткий покроковий вступ в цю тему, який приблизно слідує послідовності в старих уроках Nehe (так, я чув що вони застаріли, але для нового OpenGL з шейдерами я якихось гарних послідовних уроків не бачив).
Інсталяція та перше вікно
Найперше що потрібно графічним програмам – вікно. Щоб створити вікно, нам треба якусь бібліотеку, наприклад PyQt, PySide, PyGtk, WxPython чи PyGame – їх купа. Потрібно також щоб це вікно підтримувало контекст OpenGL (тобто могло дозволити відеокарті виводити свої дані в область вікна). З цим може справитись багато бібліотек, але ми виберемо Pyglet. Тому що в ній мало зайвого, і вона ставиться традиційно:
pip install pyglet
Ну, і як годиться – почнемо з найпростішої програми:
import pyglet window = pyglet.window.Window(width=640, height=480, caption="Hello OpenGL!") pyglet.app.run()
Отримаємо вікно заданої ширини та висоти, і з заданим заголовком:
Елементарно, правда?
Фарби
Давайте ще зафарбуємо вікно в білий колір. Для цього потрібно знати що кольори задаються переважно інтенсивністю світла в моделі RGB (червоний, зелений, голубий), числами від 0 до 1. Тобто білий – це 1.0, 1.0, 1.0, сірий – 0.5, 0.5, 0.5, і т.п. Детальніше на вікіпедії.
import pyglet from pyglet.gl import * # імпортуємо всі функції OpenGL # вони починатимуться з префіксів gl або glu, тому простір імен надто не засмічуватимуть window = pyglet.window.Window(width=640, height=480, caption="Hello OpenGL!") # я не буду довго пояснювати що таке декоратор. Просто знайте, що # @window.event позначає функції що відповідають за обробку подій @window.event def on_draw(): # викликатиметься, коли операційна система вирішить що вікно треба перемалювати # наприклад, коли ми забрали вікно що було над нашим, або вперше виводимо його на екран glClearColor(1.0, 1.0, 1.0, 1.0) # Задати колір яким ми будемо очищати екран. # Четверте число - прозорість. # Я його сам не дуже розумію, але обов’язково треба чотири параметри. glClear(GL_COLOR_BUFFER_BIT) # очистити буфер кольору # (бувають і інші буфери, але про це пізніше) pyglet.app.run()
To be continued
В цьому уроці я хотів ще написати про те як намалювати трикутник, але часу мало (тобто є інші пріорітети). Зате ми створили вікно і навчились змінювати його колір. Ну й краще напевне писати менше але частіше. Якщо пілотний епізод цього курсу буде популярний – подумаю чи випускати перший сезон.
P.S. Май на увазі, якщо ти не хочеш навчити свою дівчину програмувати – вона може знайти когось хто схоче. 😛 Або взагалі сама з допомогою інтернету звикне вчитись.
Python подобається своєю простотою, і бібліотеками.
А з OpenCL працював?
Nemo
16 Липня, 2015 at 16:39
Неа, не працював, але знаю дівчину що працювала з CUDA. 🙂
bunyk
25 Липня, 2015 at 05:59
Проходив курс по CUDA на Coursera, але нажаль в мене ATI відеокарта, тож не зміг спробувати на реальному залізі…
Nemo
25 Липня, 2015 at 09:51
[…] […]
Пишемо переглядач молекул з Pyglet | Блоґ одного кібера
24 Липня, 2015 at 18:32