از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
معرفی مختصر OpenGL در پایتون با PyOpenGL
سرفصلهای مطلب
معرفی
در این آموزش قصد داریم روش استفاده را یاد بگیریم PyOpenGL کتابخانه در پایتون OpenGL یک کتابخانه گرافیکی است که توسط چندین پلتفرم از جمله ویندوز، لینوکس و MacOS پشتیبانی می شود و برای استفاده در چندین زبان دیگر نیز موجود است. با این حال، دامنه این پست به استفاده از آن در زبان برنامه نویسی پایتون محدود خواهد شد.
OpenGL در مقایسه با سایر کتابخانه های گرافیکی مشابه، نسبتاً ساده است. ما با تنظیم آن شروع می کنیم روی سیستم ما، به دنبال نوشتن یک مثال ساده که استفاده از کتابخانه را نشان می دهد.
نصب و راه اندازی
ساده ترین راه برای نصب OpenGL با استفاده از پایتون از طریق این است pip مدیر بسته اگر تو داری pip برای دانلود و نصب OpenGL که در سیستم شما نصب شده است، دستور زیر را اجرا کنید:
$ pip install PyOpenGL PyOpenGL_accelerate
توصیه می کنم برای جلوگیری از اشتباهات تایپی دستور بالا را کپی کنید.
پس از اتمام اجرای این دستور، در صورت موفقیت آمیز بودن نصب، باید خروجی زیر را در پایان دریافت کنید:
Successfully installed PyOpenGL-3.1.0 PyOpenGL-accelerate-3.1.0
اگر این کار نکرد، می توانید آن را به صورت دستی نیز دانلود کنید. برای آن، این لینک، به عنوان “دانلود و نصب” به پایین بروید و همه فایل ها را از آنجا دانلود کنید. پس از آن، به پوشه ای که آن فایل ها را دانلود کرده اید بروید و دستور زیر را در آن اجرا کنید terminal یا خط فرمان:
$ python setup.py
لازم به ذکر است که شما نیاز به نصب ابزارهای ساخت ویژوال C++ 14.0 دارید روی سیستم شما به منظور کار با کتابخانه های OpenGL در پایتون.
اکنون که OpenGL را با موفقیت نصب کردیم روی سیستم ما، بیایید دستمان را با آن کثیف کنیم.
تمرین کدنویسی
اولین کاری که برای استفاده از OpenGL در کد خود باید انجام دهیم این است که import آی تی. برای انجام این کار، دستور زیر را اجرا کنید:
import OpenGL
قبل از اینکه ادامه دهیم، چند کتابخانه دیگر وجود دارد که به آنها نیاز دارید import هر زمان که قصد استفاده از این کتابخانه را در برنامه خود داشته باشید. در زیر کد این واردات آمده است:
import OpenGL.GL
import OpenGL.GLUT
import OpenGL.GLU
print("Imports successful!")
حالا که وارد کردن های لازم را انجام دادیم، ابتدا یک پنجره ایجاد می کنیم که در آن گرافیک ما نشان داده می شود. کد آن به همراه توضیحات آن در نظرات در زیر آمده است:
def showScreen():
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glutInit()
glutInitDisplayMode(GLUT_RGBA)
glutInitWindowSize(500, 500)
glutInitWindowPosition(0, 0)
wind = glutCreateWindow("OpenGL Coding Practice")
glutDisplayFunc(showScreen)
glutIdleFunc(showScreen)
glutMainLoop()
واردات بالا و همچنین این کد را به صورت تکی کپی کنید python (.py) را فایل کنید و اجرا کنید. باید یک صفحه با ابعاد مربع سفید ظاهر شود. حال، اگر بخواهیم هر شکلی بکشیم یا هر نوع گرافیک دیگری بسازیم، باید این کار را در تابع “showScreen” خود انجام دهیم.
حالا بیایید سعی کنیم با استفاده از OpenGL یک مربع بسازیم، اما قبل از این کار باید سیستم مختصاتی را که OpenGL دنبال می کند، درک کنیم.
نقطه (0,0) پایین سمت چپ پنجره شما است، اگر از آنجا بالا بروید، در امتداد محور y حرکت می کنید و اگر از آنجا به سمت راست بروید، در امتداد محور x حرکت می کنید. بنابراین، نقطه بالا سمت چپ پنجره شما (0، 500)، بالا سمت راست (500، 500)، پایین سمت راست (500، 0) خواهد بود.
توجه داشته باشید: ما در مورد پنجره ای که در بالا ایجاد کردیم صحبت می کنیم که در مثال ما ابعاد آن 500*500 بود و نه تمام صفحه کامپیوتر شما.
حالا که آن را از سر راه برداشتیم، بیایید یک مربع را کد کنیم. توضیح کد را می توانید در نظرات پیدا کنید.
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 showScreen():
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
square()
glutSwapBuffers()
glutInit()
glutInitDisplayMode(GLUT_RGBA)
glutInitWindowSize(500, 500)
glutInitWindowPosition(0, 0)
wind = glutCreateWindow("OpenGL Coding Practice")
glutDisplayFunc(showScreen)
glutIdleFunc(showScreen)
glutMainLoop()
اجرای کد بالا یک مربع رسم می کند، اما آن مربع قابل مشاهده نخواهد بود زیرا رنگ آن با رنگ پنجره ما یکسان است، بنابراین باید رنگ دیگری را نیز به آن اختصاص دهیم، برای این کار تغییراتی در آن ایجاد می کنیم. “بخش 2” از کد بالا یعنی showScreen
تابع. خط زیر را در زیر اضافه کنید glLoadIdentity
بیانیه و بالاتر از square()
بیانیه:
glColor3f(1.0, 0.0, 3.0)
با این حال، کد ما هنوز کامل نیست. کاری که در حال حاضر انجام می دهد این است که یک بار مربع را ترسیم می کند و سپس دوباره صفحه را پاک می کند. ما این را نمی خواهیم. در واقع، ما حتی نمیتوانیم لحظهای را که واقعاً مربع را ترسیم میکند، تشخیص دهیم، زیرا در کسری از ثانیه ظاهر میشود و ناپدید میشود. بیایید یک تابع دیگر برای جلوگیری از این بنویسیم.
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()
وقتی این را اجرا می کنید، یک پنجره باید با یک کادر مربع صورتی رنگ در آن ظاهر شود.
خروجی:
نتیجه
در این آموزش با OpenGL، روش دانلود و نصب آن آشنا شدیم و سپس از آن به عنوان یک برنامه نمونه کوتاه استفاده کردیم. در این مثال ما همچنین ساختن یک شکل پایه را با استفاده از OpenGL تمرین کردیم، که به ما دیدی در مورد برخی از فراخوانیهای تابع پیچیده داد که باید هر زمان که نیاز به ترسیم چیزی با استفاده از این کتابخانه داشتیم، انجام شوند. برای نتیجه گیری، OpenGL بسیار مدبر است و هر چه عمیق تر در آن غوطه ور می شویم، پیچیده تر و پیچیده تر می شود.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-22 20:57:03