Вступление
В этом руководстве мы узнаем, как использовать библиотеку PyOpenGL в Python. OpenGL - это графическая библиотека, которая поддерживается несколькими платформами, включая Windows, Linux и MacOS, а также доступна для использования на нескольких других языках; тем не менее, этот пост будет ограничен его использованием на языке программирования Python.
OpenGL, по сравнению с другими подобными графическими библиотеками, довольно прост. Мы начнем с его настройки в нашей системе, а затем напишем простой пример, демонстрирующий использование библиотеки.
Монтаж
Самый простой способ установить OpenGL с помощью Python - через диспетчер пакетов pip. Если в вашей системе установлен pip, выполните следующую команду, чтобы загрузить и установить OpenGL:
$ pip install PyOpenGL PyOpenGL_accelerate
Я бы рекомендовал скопировать приведенную выше команду, чтобы избежать опечаток.
После того, как эта команда завершит выполнение, в случае успешной установки вы должны получить в конце следующий вывод:
Successfully installed PyOpenGL-3.1.0 PyOpenGL-accelerate-3.1.0
Если это не сработает, вы также можете загрузить его вручную. Для этого перейдите по этой ссылке вниз до заголовка «загрузка и установка» и загрузите все файлы оттуда. После этого перейдите в папку, в которую вы загрузили эти файлы, и выполните следующую команду в терминале или командной строке:
$ python setup.py
Уместно отметить, что вам потребуются инструменты сборки Visual C ++ 14.0, установленные в вашей системе для работы с библиотеками OpenGL в Python.
Теперь, когда мы успешно установили OpenGL в нашей системе, давайте займемся им.
Упражнение по кодированию
Первое, что нам нужно сделать, чтобы использовать OpenGL в нашем коде, - это импортировать его. Для этого выполните следующую команду:
import OpenGL
Прежде чем мы продолжим, вам нужно импортировать еще несколько библиотек, когда вы собираетесь использовать эту библиотеку в своей программе. Ниже приведен код для этого импорта:
import OpenGL.GL
import OpenGL.GLUT
import OpenGL.GLU
print("Imports successful!") # If you see this printed to the console then installation was successful
Теперь, когда мы закончили с необходимым импортом, давайте сначала создадим окно, в котором будет отображаться наша графика. Код для этого приведен ниже вместе с объяснением в комментариях:
def showScreen():
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # Remove everything from screen (ie displays all white)
glutInit() # Initialize a glut instance which will allow us to customize our window
glutInitDisplayMode(GLUT_RGBA) # Set the display mode to be colored
glutInitWindowSize(500, 500) # Set the width and height of your window
glutInitWindowPosition(0, 0) # Set the position at which this windows should appear
wind = glutCreateWindow("OpenGL Coding Practice") # Give your window a title
glutDisplayFunc(showScreen) # Tell OpenGL to call the showScreen method continuously
glutIdleFunc(showScreen) # Draw any graphics or shapes in the showScreen function at all times
glutMainLoop() # Keeps the window created above displaying/running in a loop
Скопируйте приведенный выше импорт, а также этот код в один файл python (.py) и выполните его. Вы должны увидеть всплывающее окно с размером белого квадрата. Теперь, если мы хотим нарисовать какие-либо формы или создать любую другую графику, нам нужно сделать это в нашей функции showScreen.
Давайте теперь попробуем создать квадрат с помощью OpenGL, но перед этим нам нужно понять систему координат, которой следует OpenGL.
Точка (0,0) находится в нижнем левом углу вашего окна, если вы подниметесь оттуда, вы будете двигаться по оси Y, а если вы пойдете прямо оттуда, вы будете двигаться по оси X. Итак, верхняя левая точка вашего окна будет (0, 500), верхняя правая - (500, 500), нижняя правая - (500, 0).
Примечание . Мы говорим об окне, которое мы создали выше, которое в нашем примере имело размер 500 x 500, а не о полноэкранном режиме вашего компьютера.
Теперь, когда мы с этим разобрались, давайте закодируем квадрат. Пояснение к коду можно найти в комментариях.
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
w, h = 500,500
# ---Section 1---
def square():
# We have to declare the points in this sequence: bottom left, bottom right, top right, top left
glBegin(GL_QUADS) # Begin the sketch
glVertex2f(100, 100) # Coordinates for the bottom left point
glVertex2f(200, 100) # Coordinates for the bottom right point
glVertex2f(200, 200) # Coordinates for the top right point
glVertex2f(100, 200) # Coordinates for the top left point
glEnd() # Mark the end of drawing
# This alone isn't enough to draw our square
# ---Section 2---
def showScreen():
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # Remove everything from screen (ie displays all white)
glLoadIdentity() # Reset all graphic/shape's position
square() # Draw a square using our function
glutSwapBuffers()
#---Section 3---
glutInit()
glutInitDisplayMode(GLUT_RGBA) # Set the display mode to be colored
glutInitWindowSize(500, 500) # Set the w and h of your window
glutInitWindowPosition(0, 0) # Set the position at which this windows should appear
wind = glutCreateWindow("OpenGL Coding Practice") # Set a window title
glutDisplayFunc(showScreen)
glutIdleFunc(showScreen) # Keeps the window open
glutMainLoop() # Keeps the above created window displaying/running in a loop
Выполнение приведенного выше кода приведет к рисованию квадрата, но этот
квадрат не будет виден, поскольку его цвет будет таким же, как цвет
нашего окна, поэтому нам также нужно назначить ему другой цвет, для
этого мы внесем некоторые изменения в «Раздел 2» приведенного выше кода,
то есть функция showScreen
Добавьте следующую строку под
glLoadIdentity
и над оператором square()
:
glColor3f(1.0, 0.0, 3.0) # Set the color to pink
Однако наш код все еще не завершен. В настоящее время он рисует квадрат один раз, а затем снова очищает экран. Мы этого не хотим. На самом деле, мы даже не сможем определить момент, когда он на самом деле рисует квадрат, потому что он появится и исчезнет за доли секунды. Давайте напишем еще одну функцию, чтобы этого избежать.
# Add this function before Section 2 of the code above ie the showScreen function
def iterate():
glViewport(0, 0, 500,500)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0.0, 500, 0.0, 500, 0.0, 1.0)
glMatrixMode (GL_MODELVIEW)
glLoadIdentity()
Вызовите эту функцию итерации в «Разделе 2» приведенного выше кода.
Добавьте его ниже glLoadIdentity
и выше glColor3d
заявление в
showScreen
функции.
Давайте теперь скомпилируем все это в один файл кода, чтобы не было двусмысленностей:
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
w,h= 500,500
def square():
glBegin(GL_QUADS)
glVertex2f(100, 100)
glVertex2f(200, 100)
glVertex2f(200, 200)
glVertex2f(100, 200)
glEnd()
def iterate():
glViewport(0, 0, 500, 500)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0.0, 500, 0.0, 500, 0.0, 1.0)
glMatrixMode (GL_MODELVIEW)
glLoadIdentity()
def showScreen():
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
iterate()
glColor3f(1.0, 0.0, 3.0)
square()
glutSwapBuffers()
glutInit()
glutInitDisplayMode(GLUT_RGBA)
glutInitWindowSize(500, 500)
glutInitWindowPosition(0, 0)
wind = glutCreateWindow("OpenGL Coding Practice")
glutDisplayFunc(showScreen)
glutIdleFunc(showScreen)
glutMainLoop()
Когда вы запустите это, должно появиться окно с квадратной рамкой розового цвета.
Выход:
{.ezlazyload .img-responsive}
Заключение
В этом руководстве мы узнали об OpenGL, о том, как его загрузить и установить, а затем использовать в качестве короткого примера программы. В этом примере мы также практиковались в создании базовой формы с использованием OpenGL, что дало нам представление о некоторых сложных вызовах функций, которые необходимо выполнять всякий раз, когда нам нужно что-то нарисовать с помощью этой библиотеки. В заключение скажу, что OpenGL очень изобретателен и становится все более и более сложным по мере того, как мы погружаемся в него глубже.