- PVSM.RU - https://www.pvsm.ru -
Пару месяцев назад решил я таки изучить Python. Но… только сунувшись во всю эту среду, передо мной встал выбор: учить относительно новый python3 или же python2.7. Выбор пал в сторону python 3, пусть на нём работает лишь малое количество того, что уже есть под python2.7, да и просто интересно было поучаствовать в развитии языка.
Недавно встала потребность визуализации некоторых данных (именно в openGL), поэтому было решено разобраться, что и как, собрать всё воедино и рассказать об этом хабражителям.
Статья ориентирована в первую очередь на новичков в python (таких как я), и написана в стиле «установи то-то и то-то», поэтому просьба старожилам не кидаться тапками и отнестись с пониманием.
Так как нам придётся собирать библиотекии, нам нужно поставить python3-dev. python3-setuptools нам нужен для установки easy_install3.
Ставим:
sudo apt-get install python3-dev python3-setuptools
Теперь можно и библиотеки собрать.
Ставим pip для python3 через установленный easy_install3:
sudo easy_install3 pip
pip установлен, теперь можно собирать нужные нам библиотеки:
sudo pip-3.2 install numpy PyOpenGL PyOpenGL_accelerate
(на момент установки актуальной версией pip была 3.2, в прошлом, будущем или параллельной вселенной это число может отличаться).
Для работы модуля OpenGL.GLUT ставим freeglut:
sudo apt-get install freeglut3
Теперь всё готово, и можно пробовать запускать примеры.
Идём на сайт http://nehe.gamedev.net/tutorial [1], изучаем примеры, качаем код на python, проверяем работоспособность на python2.7 (если установлены библиотеки OpenGL для pytohn2.7 — всё делается аналогичным образом, pip install numpy PyOpenGL PyOpenGL_accelerate
).
Качаем, например, второй пример [2], проверяем:
пытаемся запустить его на python3, получаем ошибку:
$ python3 lesson02.py
File "lesson02.py", line 153
print "Hit ESC key to quit."
^
SyntaxError: invalid syntax
Перерабатываем его с помощью утилиты 2to3 (на первых порах это добавление скобочек к print
):
RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
RefactoringTool: Refactored test.py
--- lesson02.py (original)
+++ lesson02.py (refactored)
@@ -150,6 +150,6 @@
glutMainLoop()
# Print message to console, and kick off the main to get it rolling.
-print "Hit ESC key to quit."
+print("Hit ESC key to quit.")
main()
RefactoringTool: Files that need to be modified:
RefactoringTool: lesson02.py
, но и тут нас ждёт сюрприз:
Hit ESC key to quit.
Traceback (most recent call last):
File "lesson02.py", line 154, in <module>
main()
File "lesson02.py", line 109, in main
glutInit(())
File "/usr/local/lib/python3.2/dist-packages/OpenGL/GLUT/special.py", line 318, in glutInit
holder[i] = arg
TypeError: bytes or integer address expected instead of str instance
Что бы всё взлетело, нам нужно передать аргументы командной строки в glutInit():
glutInit(sys.argv)
Запускаем ещё раз:
Hit ESC key to quit.
Traceback (most recent call last):
File "test.py", line 154, in <module>
main()
File "test.py", line 127, in main
window = glutCreateWindow("Jeff Molofee's GL Code Tutorial ... NeHe '99")
ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type
Так-так-так, а это что ещё… После недолгого гугления обнаруживаем, что заголовок окна должен быть байтовой строкой, соответственно, добавляем «b» перед строкой:
window = glutCreateWindow(b"Ura, vzletelo!")
И о счастье!
Русские буквы, к сожалению, не поддерживает (мне было особо не нужно, поэтому я не стал разбираться).
Ну и можно порадоваться работающему OpenGL на нашей лошадке:)
Ссылка на архив с файлами:
Dropbox [3]
Спасибо за внимание, надеюсь, эта статья кому-нибудь поможет. С удовольствием приму критику и предложения.
Огромное спасибо материалам с сайта http://nehe.gamedev.net/ [4]
Автор: Ktulhy
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/30316
Ссылки в тексте:
[1] http://nehe.gamedev.net/tutorial: http://nehe.gamedev.net/tutorial
[2] второй пример: http://nehe.gamedev.net/data/lessons/python/lesson02.tar.gz
[3] Dropbox: https://dl.dropbox.com/u/56093213/test_python3_opengl_ktulhy.tar.gz
[4] http://nehe.gamedev.net/: http://nehe.gamedev.net/
[5] Источник: http://habrahabr.ru/post/174131/
Нажмите здесь для печати.