آموزش گرافیک کامپیوتری – استفاده از توابع گرافیکی در پایتون
اوپن جی ال، یک رابط کاربری برنامه نویسی است که شامل کتابخانهها و توابعی برای طراحی گرافیکی است.
در اوپن جی ال، عملکرد تمامی توابع و این که خروجی نهایی چیست به خوبی مشخص شده است. اوپن جی ال برای تعامل با سخت افزار گرافیکی کامپیوتر یعنی همان کارت گرافیک طراحی شده است. این رابط برنامه نویسی شامل بیش از ۲۵۰ تابع است که برای ساخت صحنههای پیچیده دو بعدی و سه بعدی استفاده میشود.
ساخت اشکال دو بعدی یا سه بعدی به کمک مفاهیم ساده هندسی مانند نقطه، خط و چند ضلعیها انجام میشود. همچنین ابزارهایی برای پردازش نور صحنه و مشخص کردن جزئیات اشیا در اوپن جی ال فراهم شده است.
کتابخانههای اوپن جی ال را میتوان در بسیاری از زبانهای برنامه نویسی فراخوانی و استفاده کرد. مدیریت پنجرهها در نسخههای ابتدایی اوپن جی ال پشتیبانی نمیشود، اما کتابخانههایی برای این کار نیز توسعه داده شده است.
اوپن جی ال به برنامه نویسها اجازه میدهد تا با کارت گرافیک تعامل برقرار کنند. این ابزار، مجموعه دستوراتی را فراهم کرده است که به کمک آنها میتوان گرافیک را در اپلیکیشنها و پلتفرمهای مختلف مدیریت کرد. برنامه نویس به کمک اوپن جی ال میتواند کدهای یکسانی را روی پلتفرمهای PC، مک و دستگاههای موبایل اجرا کند.
تقریباً تمامی سیستم عاملها و سخت افزارهای مدرن از اوپن جی ال پشتیبانی میکنند، بنابراین اوپن جی ال یک ابزار ایده آل برای مدیریت گرافیک محسوب میشود. سخت افزارهای گرافیکی میتوانند دستورات اوپن جی ال را به صورت بهینه پردازش و اجرا کنند.
دستورات اوپن جی ال شامل کشیدن اشکال، تخصیص رنگ به اشکال، ایجاد بافت در چند ضلعیها، زوم کردن، تبدیل چند ضلعیها، چرخاندن اشکال، مدیریت منابع روشنایی و سایهها میشود.
همچنین میتوان افکتهایی مانند مه را در صحنههای گرافیکی به کمک اوپن جی ال مدیریت کرد. از آنجایی که از اوپن جی ال به طور گسترده برای گرافیک سه بعدی استفاده میشود، اوپن جی ال کاربرد زیادی در بازیهای کامپیوتری نیز دارد. به کمک اوپن جی ال میتوان بازیها را برای پلتفرمهای مختلف ساخت و یا آنها را از یک پلتفرم به پلتفرمهای دیگر پورت کرد.
اوپن جی ال همچنین کاربردهای زیادی در نرم افزارهایی مانند اتوکد دارد. حتی اپل نیز از اوپن جی ال به عنوان هسته نمایش انیمیشنها، تصاویر و کتابخانههای گرافیکی سیستم عامل مک او اس استفاده کرده است.
در این مطلب قصد داریم به آموزش گرافیک کامپیوتری در پایتون با استفاده از کتابخانههای اوپن جی ال بپردازیم.
در ضمن شما میتوانید مجموعه آموزش طراحی و گرافیک کامپیوتری را در فرادرس مشاهده کنید تا آشنایی بیشتری با مفاهیم پایهای گرافیک کامپیوتری پیدا کنید.
پیش نیازهای آموزش گرافیک کامپیوتری در اوپن جی ال
آشنایی با برنامه نویسی برای یادگیری مطالبی که در ادامه این مطلب گفته خواهد شد کفایت میکند. از آنجایی که میخواهیم از کتابخانههای اوپن جی ال در زبان برنامه نویسی پایتون استفاده کنیم، بهتر است از قبل با زبان پایتون آشنایی کافی را داشته باشید.
دستورات گفته شده در این مطلب را میتوانید روی هر یک از پلتفرمهای ویندوز، لینوکس یا مک اجرا کنید. زبان برنامه نویسی پایتون زبانی قدرتمند است که میلیونها توسعه دهنده در دنیا از آن برای توسعه اپلیکیشن، برنامه نویسی وب، پیاده سازی الگوریتمهای هوش مصنوعی و غیره استفاده میکنند.
کتابخانههای قدرتمندی برای پیاده سازی گرافیک کامیپوتری در اپلیکیشنهای نوشته شده با پایتون وجود دارد. در ادامه این آموزش به معرفی کتابخانه PyOpenGL خواهیم پرداخت.
معرفی کتابخانه PyOpenGL
در این مطلب قصد داریم به آموزش گرافیک کامپیوتری در کتابخانه PyOpenGL بپردازیم. همانطور که قبلاً گفتیم، میتوان از کتابخانههای اوپن جی ال در زبانهای برنامه نویسی مختلفی استفاده کرد. در این مطلب تنها روی زبان برنامه نویسی پایتون تمرکز خواهیم کرد.
پای اوپن جی ال، کتابخانهای قدرتمند از پایتون است که بیشتر توابع اوپن جی ال را در اختیار شما قرار میدهد.
نصب PyOpenGL
راحتترین راه نصب این کتابخانه، استفاده از ابزار مدیریت پکیج pip است. اگر pip را روی سیستم خود نصب دارید، میتوانید برای نصب کتابخانه پای اوپن جی ال دستور زیر را در خط فرمان تایپ و اجرا کنید:
pip install PyOpenGL PyOpenGL_accelerate $
زمانی که اجرای این فرمان به پایان رسید، در صورت موفقیت آمیز بودن نصب، با پیغام زیر در خط فرمان مواجه خواهید شد:
Successfully installed PyOpenGL-3.1.0 PyOpenGL-accelerate-3.1.0
اگر نصب کتابخانه از این طریق برای شما میسر نیست، باید PyOpenGL را به صورت دستی دانلود و نصب کنید. برای این کار به لینک زیر مراجعه کنید:
باید تمامی فایلهای لازم را دانلود کنید. پس از آن خط فرمان را در محل دانلود فایلها اجرا کرده و دستور زیر را تایپ و اجرا کنید:
python setup.py $
لازم به ذکر است که برای استفاده از کتابخانههای اوپن جی ال در پایتون، باید Visual C++ build tools را روی سیستم خود نصب داشته باشید. برای این کار میتوانید به لینک زیر مراجعه کنید:
پس از نصب موفق پیشنیازها، نوبت نوشتن کد فرا رسیده است! دقت کنید که برای کار با کتابخانه PyOpenGL باید با جزئیات عملکرد اوپن جی ال و گرافیک کامپیوتری در اوپن جی ال آشنا باشید. به همین علت توصیه میکنیم آموزش گرافیک کامپیوتری در اوپن جی ال را با مراجعه به صفحه زیر مشاهده کنید.
آموزش گرافیک کامپیوتری در اوپن جی ال – مثال عملی استفاده از اوپن جی ال در پایتون
اولین کاری که باید انجام دهید، import کردن کتابخانه OpenGL است. برای این کار، باید دستور زیر را در ویرایشگر کد خود تایپ کنید:
import OpenGL
قبل از ادامه کار، تعدادی کتابخانه دیگر را نیز باید import کنید. این کتابخانهها را در قطعه کد زیر مشاهده کنید:
import OpenGL.GL
import OpenGL.GLUT
import OpenGL.GLU
print(“Imports successful!”) # If you see this printed to the console then installation was successful
اگر پیغام Imports successful را در خروجی مشاهده کردید، یعنی تمامی کتابخانهها به درستی import شدهاند.
ایجاد پنجره
برای استفاده از مفاهیم پایهای گرافیک کامپیوتری مانند کشیدن خط یا چند ضلعی، ابتدا باید یک پنجره ایجاد کنیم. در پنجره ایجاد شده خواهیم توانست تا اشکال و گرافیکهای مختلف را رسم کنیم. برای ایجاد پنجره، کدهایی که باید بنویسید را خط به خط توضیح خواهیم داد:
:()def showScreen
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
قطعه کد بالا را برای پاک کردن صفحه بنویسید.
()glutInit
با نوشتن این کد، یک نمونه از کلاس glut ایجاد خواهد شد. از این شی برای ساخت پنجره استفاده خواهیم کرد.
glutInitDisplayMode(GLUT_RGBA)
کد بالا، نمایش رنگی پنجره را برای ما ممکن خواهد کرد.
glutInitWindowSize(500, 500)
کد بالا نیز ابعاد پنجره را مشخص خواهد کرد. شما میتوانید ابعاد پنجره را به دلخواه خود تغییر دهید.
glutInitWindowPosition(0, 0)
این خط کد نیز محل قرار گرفتن پنجره را مشخص خواهد کرد. این بخش به کمی توضیح نیاز دارد. به صفحه نمایش خود نگاه کنید. گوشه بالا سمت چپ صفحه نمایش شما، مبدا مختصات در نظر گرفته میشود. اگر از آن نقطه به سمت راست حرکت کنید، در واقع در محور x ها حرکت کردهاید. همچنین اگر از آن نقطه به سمت پایین حرکت کنید، در واقع در محور yها حرکت کردهاید.
(0, 0) در این خط کد به معنای این است که شما ترجیح دادهاید مبدأ پنجره با مبدأ صفحه نمایش شما یکسان باشد (یعنی پنجره در گوشه بالا سمت چپ صفحه نمایش تشکیل شود).
wind = glutCreateWindow(“OpenGL Coding Practice”)
با نوشتن کد بالا، میتوانید عنوان اصلی پنجره خود را مشخص کنید. میتوانید به جای عبارت OpenGL Coding Practice، هر عنوان دلخواه دیگری را قرار دهید.
glutDisplayFunc(showScreen)
کد بالا، متود نمایش پنجره را به صورت ادامه دار فراخوانی خواهد کرد.
glutIdleFunc(showScreen)
این کد نیز، تمامی اشکال و گرافیکهای رسم شده در پنجره را به صورت ادامه دار نمایش خواهد داد.
()glutMainLoop
و در نهایت نوشتن کد بالا به اجرای همیشگی پنجره منجر خواهد شد (یعنی تا زمانی که خودتان پنجره را نبندید، پنجره بسته نخواهد شد).
کدهای ایجاد پنجره به صورت یکجا:
:()def showScreen
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
()glutInitc
glutInitDisplayMode(GLUT_RGBA)
glutInitWindowSize(500, 500)
glutInitWindowPosition(0, 0)
wind = glutCreateWindow(“OpenGL Coding Practice”)
glutDisplayFunc(showScreen)
glutIdleFunc(showScreen)
glutMainLoop()
با نوشتن کتابخانههای گفته شده در مرحله قبل و کپی کردن کدهای بالا در یک فایل با فرمت .py میتوانید پنجره ساخته شده را مشاهده کنید.
حال که پنجره خود را ایجاد کردید، بیاید در ادامه آموزش گرافیک کامپیوتری در اوپن جی ال، رسم یک مربع را تمرین کنیم.
رسم مربع با استفاده از گرافیک کامپیوتری در اوپن جی ال و زبان پایتون
برای رسم مربع، تابعی به نام sqare() ایجاد میکنیم. بدنه این تابع شامل قطعه کد زیر است:
:()def square
glBegin(GL_QUADS)
کد بالا برای شروع رسم مربع نوشته شده است.
glVertex2f(100, 100)
این کد، مختصات گوشه پایین سمت چپ مربع را مشخص میکند.
glVertex2f(200, 100)
این کد، مختصات گوشه پایین سمت راست مربع را مشخص میکند.
glVertex2f(200, 200)
این کد، مختصات گوشه بالا سمت راست مربع را مشخص میکند.
glVertex2f(100, 200)
این کد، مختصات گوشه بالا سمت چپ مربع را مشخص میکند.
()glEnd
کد بالا نیز برای مشخص کردن پایان رسم مربع نوشته شده است.
اما این تابع به تنهایی برای رسم مربع کافی نیست. باید کدهای زیر را نیز به برنامه خود اضافه کنید:
()def showScreen
تعریف تابع showScreen()
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
پاک کردن هرچه در پنجره موجود است.
()glLoadIdentity
ریست کردن موقعیت مکانی تمامی اشکال و گرافیکها
()square
فراخوانی تابع square() که در قسمت قبل تعریف کردیم.
()glutSwapBuffers
قطعه کد زیر نیز برای رسم پنجره است که قبلاً آن را توضیح دادیم.
()glutInit
glutInitDisplayMode(GLUT_RGBA)
glutInitWindowSize(500, 500)
glutInitWindowPosition(0, 0)
wind = glutCreateWindow(“OpenGL Coding Practice”)
glutDisplayFunc(showScreen)
glutIdleFunc(showScreen)
()glutMainLoop
کد نهایی شما برای رسم مربع در یک پنجره به صورت زیر خواهد بود:
* from OpenGL.GL import
* from OpenGL.GLUT import
* from OpenGL.GLU import
w, h = 500,500
—Section 1—#
:()def square
glBegin(GL_QUADS)
glVertex2f(100, 100)
glVertex2f(200, 100)
glVertex2f(200, 200)
glVertex2f(100, 200)
()glEnd
—Section 2—#
()def showScreen
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
()glLoadIdentity
()square
()glutSwapBuffers
—Section 3—#
()glutInit
glutInitDisplayMode(GLUT_RGBA)
glutInitWindowSize(500, 500)
glutInitWindowPosition(0, 0)
wind = glutCreateWindow(“OpenGL Coding Practice”)
glutDisplayFunc(showScreen)
glutIdleFunc(showScreen)
()glutMainLoop
اجرای کدهای بالا، مربع را برای شما رسم خواهد کرد. اما شما قادر به مشاهده مربع نخواهید بود! علت آن است که هنوز رنگی را برای مربع خود در نظر نگرفتهاید و مربع همرنگ پنجره شما است.
در قسمت section 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
این تابع را قبل از تابع showScreen بنویسید. سپس تابع را در تابع showScreen و قبل از دستور مربوط به تعیین رنگ، فراخوانی کنید.
حال کد شما تکمیل شده است و با اجرای فایل پایتون خود، میتوانید خروجی را مشاهده کنید:
رسم سایر اشکال هندسی با استفاده از آموزش گرافیک کامپیوتری در پایتون
شما میتوانید با استفاده از کدهای گفته شده در آموزش گرافیک کامپیوتری با استفاده از زبان پایتون، سایر اشکال هندسی را نیز با استفاده از کتابخانه PyOpenGL رسم کنید.
مثلاً قطعه کد زیر، مربوط به رسم یک نقطه سبز رنگ در پنجره است:
:()def clearScreen
glClearColor(0.0, 0.0, 0.0, 1.0)
gluOrtho2D(-1.0, 1.0,-1.0,1.0)
:()def plot_points
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(0.0,1.0,0.0)
glPointSize(5.0)
glBegin(GL_POINTS)
glVertex2f(0.0, 0.0)
()glEnd
()glFlush
()glutInit
glutInitDisplayMode(GLUT_RGB)
glutCreateWindow(“Point”)
glutInitWindowSize(500, 500)
glutInitWindowPosition(50, 50)
glutDisplayFunc(plot_points)
()clearScreen
خروجی به صورت زیر خواهد بود:
قطعه کد زیر نیز مربوط به رسم یک خط سبز رنگ در پنجره است:
:()def clearScreen
glClearColor(0.0, 0.0, 0.0, 1.0)
gluOrtho2D(-1.0, 1.0,-1.0,1.0)
:()def plot_points
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(0.0,1.0,0.0)
glPointSize(5.0)
glBegin(GL_LINES) # GL_POINTS -> GL_LINES
glVertex2f(0.0, 0.0)
glVertex2f(1.0, 1.0) # Added another Vertex specifying end coordinates of line
()glEnd
()glFlush
()glutInit
glutInitDisplayMode(GLUT_RGB)
glutCreateWindow(“Point”)
glutInitWindowSize(500, 500)
glutInitWindowPosition(50, 50)
glutDisplayFunc(plot_points)
()clearScreen
()glutMainLoop
خروجی به صورت زیر خواهد بود:
کلام پایانی درباره آموزش گرافیک کامپیوتری در پایتون
در این مطلب سعی کردیم با استفاده از کتابخانههای اوپن جی ال، گرافیک کامپیوتری را در زبان پایتون آموزش دهیم. سعی کنید کدهای گفته شده در این آموزش را دستکاری کنید تا با مشاهده تغییرات انجام شده در خروجی، با دستورات و توابع اوپن جی ال به خوبی آشنا شوید.
میتوانید با رسم چند خط، چند ضعلیهای مختلف را خلق کنید. اگر میخواهید با گرافیک کامپیوتری و استفاده از توابع گرافیکی در زبانهای برنامه نویسی مختلف آشنا شوید، به شما توصیه میکنیم از آموزشهای فرادرس استفاده کنید.
فرادرس، یک منبع جامع و کامل آموزش آنلاین در ایران است که میتوانید دورههای آموزشی مناسبی را در زمینه گرافیک کامپیوتری، برنامه نویسی و سایر مباحث مرتبط در آن پیدا کنید.