Краткое введение в OpenGL в Python с PyOpenGL

Введение В этом руководстве мы узнаем, как использовать библиотеку PyOpenGL [http://pyopengl.sourceforge.net] в Python. OpenGL - это графическая библиотека, которая поддерживается несколькими платформами, включая Windows, Linux и MacOS, а также доступна для использования на нескольких других языках; тем не менее, этот пост будет ограничен его использованием на языке программирования Python. OpenGL, по сравнению с другими подобными графическими библиотеками, довольно прост. Начнем с настройки o

Вступление

В этом руководстве мы узнаем, как использовать библиотеку 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 очень изобретателен и становится все более и более сложным по мере того, как мы погружаемся в него глубже.

comments powered by Disqus