در این نوشتار راه اندازی OpenGL در Visual Studio 2008 (تحت Visual C++) درون محیط ویندوز را شرح میدهیم. این روند در سایر نسخههای Visual Studio نیز با کمی تغییر قابل انجام است. دقت فرمایید که فقط محیط VC++ را بکار میگیریم و نیازی به یادگیری زبان VC++ نخواهیم داشت.
فایلهای لازم برای راه اندازی OpenGL تحت VC++ را میتوانید از اینجا دانلود نمایید .
هر یک از فایلهای درون پوشۀ Glut را در مسیرهای زیر کپی نمایید:
C:\ Windows\ System 32\ glut32.dll
*این فایل از خطای زمان اجرا پیشگیری میکند. اگر هنوز هنگام اجرای برنامهها خطای Cannot find glnt32.dll را دریافت میکنید، این فایل را درون پوشه C:\ Windows\ System نیز کپی نمایید.
C:\ Program Files\ Microsoft Visual Studio 9.0\ vc\ include\ GL\glut.h
*این فایل از خطای زمان کامپایل پیشگیری میکند. اگر پوشۀ GL موجود نیست، خودتان آن را بسازید زیرا برنامههای ما به آن رجوع خواهند کرد.
C:\ Program Files\ Microsoft Visual Studio 9.0\ vc\lib\ glut32.lib
*این فایل از خطای زمان پیوند پیشگیری میکند. اگر هنوز خطای Cannot open glut 32.lib را دریافت میکنید، با کلیک راست روی پوشه پروژۀ خود در بخش Explorer Solution و طی کردن مسیر زیر، فایلهای کتابخانهای OpenGL را به پیونددهنده[1] معرفی نمایید:
Solution Explorer\ Project Name \ right click\ Properties\ Configuration Properties \ Linker \ Input\ opengl32.lib glu32.lib glut32.lib
دقت داشته باشید که جداکننده نام فایلها یک فاصله[2] " " است و از کاما "," یا سمی کالن";" برای جدا کردن نامها استفاده نکنید و گرنه باز هم پیغام خطای عدم یافتن فایل را دریافت خواهید نمود.
همچنین میتوانید بجای روش فوق، در ابتدای برنامه بصورت زیر مکان فایل کتابخانهای glut را به پیوند دهنده اعلام نمایید.
pragma comment ( lib , "glut32.lib")#
ساخت پروژه[3]
برای ساخت پروژه مسیرهای زیر را طی کنید:
ctrl+shift+n ) File\New\Project )
2) Project types\ Visual C++
3) Templates\ Win32 Console Application
۴) نامگذاری پروژه
اگر گزینه Create directory for solution انتخاب شده باشد، فایلهای راه حل[4] را درون پوشه جدیدی به همین نام میریزد، ولی نیازی به انتخاب این گزینه نیست. راه حل در واقع فایل کد به همراه فایلهای کمکی لازم برای اجرای پروژه شما است.
اکنون یک روند جادویی[5] آغاز میشود که باید انتخابهای زیر را در آن انجام دهیم:
5) Win32 Application Wizard\ Next\Empty project
اگر گزینۀ Precompiled header را تیک بزنیم یک فایل منبع میسازد که از قبل درون آن کد پیش کامپایل قرار دارد و ما باید کد برنامۀ خود را پس از "#include "stdatx.h درج کنیم. امّا برای اینکه کامپایلر چیزی به کد ما نیفزاید، میتوانیم گزینۀ Empty project را برگزینیم (اگر پروژه خالی[6] بسازیم انتقال آن به سیستمهای دیگر راحتتر است).
سپس خودمان بصورت زیر فایل منبع را نیز ایجاد مینماییم:
Ctrl+n) File\ New\ File )
2) Categories\ Visual C++
3) Templates\ C++ File (.cpp)
اکنون فایل منبع را با نام پیش فرض آن (source1.cpp) یا با نام مورد نظرتان، درون پوشۀ پروژه خود ذخیره کنید. توجه داشته باشید که پروژهها بصورت پیش فرض در مسیر زیر ایجاد و ذخیره میشوند:
C:\My Documents\ Visual Studio 2008\ Projects
ذخیره فایل منبع با نام دلخواه شما با طی مسیر زیر انجام میشود:
File\ Save source1.cpp As \
اکنون از قسمت Solution Explorer در پنجره اصلی، فایل منبع را بصورت زیر به پروژه بیفزایید:
Solution Explorer\ Source Files\ right click\ Add\ Existing Item
بدین ترتیب از ظهور پیغام خطای زیر در هنگام کامپایل جلوگیری میکنید:
Intermediate. manifest: general error c1010070 : failed to load and parse the manifest. The system cannot find the file specified.
اکنون زمان کامپایل و پیوند پروژه و اصطلاحاً ایجاد راه حل است:
Build/ Build solutio( یا کلید F7)
اگر در برنامهای، در این مرحله خطای پیوند زیر را دریافت نمودید:
Fatal error LNK 1104. Cannot open file "libc.lib"
آنگاه در مسیر زیر نام این فایل را بنویسید تا این فایل نادیده گرفته شود.
Solution Explorer\ Project Name \ right click\ Properties\ Configuration Properties\ Linker \ Input\ Ignore Specific Library/…
اگر فایل با موفقیت کامپایل و پیوند شده است (Build: 1 succeeded, 0 failed ) آنگاه میتوانید فایل اجرایی را بصورت زیر اجرا کنید:
( یا کلید F5) Debug\ Start Debugging
نکته1
در ویژوال استودیو NET . در برنامههایی که دارای این دو فایل سرآیند هستند : stdlib.h و glut.h
باید ابتدا < stdlib.h > و سپس < glut.h > را بنویسیم و گرنه خطای زیر را دریافت میکنیم:
Error c2381: 'exit': redefinition; -declspec (no return) differs
C: \ program files\ Microsoft visual studio 9.0 \ vc\ include\ stdlib.h (371): see declaration of 'exit
ولی VC6.0 و 2003 تا 2005 این اشکال پیش نمیآید.
نکته 2
اگر برنامهای در حال اجرا باشد و شما کد آنرا تغییر دهید، هنگام کامپایل و پیوند مجدد، خطای پیوند زیر را دریافت میکنید. برای اجتناب از این خطا، ابتدا اجرای برنامه را ببندید و سپس آنرا مجددا کامپایل کنید.
LINK : fatal error LNK1104: cannot open file "Debug/YourProgram.exe"
نکته 3
تمام آنچه شرح دادیم در نسخههای مختلف Visual Studio با قدری تغییر قابل انجام است. البته کار با VC++6 کاملا متفاوت است و بسیار سادهتر میباشد. همچنین دقت کنید که در VC6 پروژهها در مسیر زیر ایجاد میشوند:
C:\Program Files\Microsoft Visual Studio\MyProjects
نکته 4 برای ویندوز 7
در این ویندوز نصب سه فایل glut باید در مسیرهای زیر صورت گیرد:
| glut32.dll | C:\Windows\SysWOW64 |
| glut32.lib | C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib |
| glut.h | C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include |
اگر در ویندوز 7 پیغام وقوع نقص[7] در ساخت پروژه دریافت میکنید، برنامه ویژوال استودیو را ببندید و دوباره آنرا با کلیک راست روی شمایل آن و انتخاب گزینه Run as Administrator اجرا کنید. سپس پروژه خود را بسازید.
نکته 5
برای آموزش تصویری می توانیداینجا را برای ویژوال استودیوی ورژن 6 (98) ، اینجا را برای ویژوال استودیوی 2005 و اینم آموزش فارسی برای ویژوال استودیوی 2008 این فایل و این یکی و برای ویژوال استودیوی 2010 اینجا را ببینید. برای اجرا در لینوکس و مکینتاش هم اینجا. اینم آموزش فارسی برای نصب تحت لینوکس
موفق باشید تا پست بعدی که سر فصل درس ها رو می ذارم ![]()
جونم براتون بگه که:
شرکت مایکروسافت مجموعهای از واسطهای برنامه نویسی کاربردی[1] (API ها) به نام DirectX را برای ارائه دسترسی «مستقیم[2]» به سخت افزار در محیط سیستم عامل ویندوز فراهم نموده است. میدانیم در ویندوز برخلاف داس[3]، کاربر دسترسی مستقیم به سخت افزار ندارد؛ بنابراین DirectX قابلیت بسیار خوبی برای ایجاد کنترل شده این دسترسی مستقیم میباشد. این توابع شامل پشتیبانی از گرافیک دو بعدی و سه بعدی، کنترل هزاران وسیله ورودی، توابع مخلوطسازی و نمونهبرداری صدا و موسیقی خروجی، کنترل بازیهای شبکهای و چندکاربری و کنترل قالبهای گوناگون جریان چند رسانهای میباشند. مؤلفههایی که راه اندازی این کارکردها را بر عهده دارند، عبارتند از :
Direct Draw
Direct 3D
Direct Input
Direct Audio (شامل sound و music )
Direct play
Direct show
هدف مایکروسافت از ارائه DirectX ، ارائه یک راه حل چند رسانهای سریع، مستقل از وسایل و سرشار از قابلیتهای گوناگون برای سیستم عامل ویندوز بوده است که از فناوری [4]COM به عنوان واسط استفاده میکند. لازم به ذکر است که اکثر بازیهای تحت ویندوز نیز امروزه با کمک این ابزار ساخته میشوند [OpenGL Game programming] . امّا در کنار تمامی این محاسن، نکتههایی وجود دارند که در ادامه به آنها اشاره مینماییم و همین نکات، آموزش درس گرافیک رایانهای را در دانشگاههای معتبر دنیا به سوی بکارگیری ابزار دیگری سوق دادهاند که OpenGL نام دارد.
OpenGL یک واسط نرمافزاری برای سختافزار گرافیکی است. به عبارت دیگر، OpenGL یک کتابخانه گرافیکی باز سه بعدی و مدلسازی است که کاملاً قابل حمل و بسیار سریع میباشد. این واسط، توسط شرکت سیلیکون گرافیک[5] (SGI) ابداع شده است. باید دقت داشته باشیم که OpenGL زبان برنامه نویسی نیست بلکه یک API شامل مجموعهای در حدود 700 تابع پیش ساخته است که میتوانیم با فراخوانی آنها تحت اکثر زبانها[6] (از جمله C++/C،Visual C++ ، C#، Visual Basic، Delphi، Java وحتی Assembly ) و اکثر سیستم عاملها[Mac OS, Widows، Linux [7 اشیای گرافیکی را تولید کنیم، اعمال گرافیکی را انجام دهیم و برنامههای کاربردی سه بعدی و محاورهای بسازیم. [redbook و superbible].
به همین دلیل OpenGL در اکثر ابزارهای طراحی به کمک کامپیوتر، ابزارهای مرتبط با معماری ساختمان و مدلسازی هیولاهای ساخته کامپیوتر برای فیلمها بکار میرود [red book]. نرمافزارهای ریاضی Mathematica ، Matlab ، برنامههای صنعتی Working Model 3D ، ANSYS و دایناسورهای فیلم پارک ژوراسیک[8] و بسیاری از محافظهای صفحه نمایش[9] کاربردهای OpenGL هستند [نصیری].
بکارگیری OpenGL بر مبنای کتابخانهها و فایلهای سرآیند است، بنابراین الزامی برای تغییر شیوه برنامهنویسی یا آموختن مدل برنامهنویسی تحت یک سیستمعامل خاص (مثلاً Windows Programming) نخواهیم داشت. از آنجایی که کتابخانه اصلی OpenGLکه GL نام دارد فقط به گرافیک پایه یعنی نقطه، خط و چندضلعی میپردازد؛ بنابراین کتابخانههای دیگری نیز در کنار آن توسعه یافتهاند تا قابلیتهای آنرا گسترش دهند؛ این کتابخانهها را در زیر معرفی میکنیم:
· کتابخانه سودمند[OpenGL (GLU) [10
علاوه بر قابلیتهای GL شامل توابع سطح بالاتر برای پشتیبانی از فنون پرداخت پیشرفته میباشد. ویژگیهایی که این کتابخانه پشتیبانی میکند عبارتند از :
-مقیاسدهی تصاویر دو بعدی
- پرداخت اشیای سه بعدی دارای معادلات درجه چهارم[11] شامل کره، استوانه، دیسک و تکه دیسک
- تولید خودکار mipmap از یک تصویر
- پشتیبانی از منحنیها و سطوح NURBS
- مفروش سازی[12] چند ضلعیهای غیر محدب
- تبدیلات و ماتریسهای خاص
اگر برخی از این مفاهیم را نمیدانید، نگران نباشید بزودی با هم آنها را میآموزیم [OpenGL game prog].
· جعبه ابزار سودمند[OpenGL (GLUT)[13
از آنجایی که OpenGL مستقیماً از پنجره سازی، منوها و ورودی (صفحه کلید، ماوس و دسته فرمان بازی[14]) پشتیبانی نمیکند؛ بنابراین جعبه ابزار سودمند OpenGL یعنی GLUT توسعه یافته است که علاوه بر قابلیتهای GL و GLU از این موارد نیز بصورت مستقل از بستر[15] پیادهسازی پشتیبانی میکند. بنابراین فقط کافی است برنامههای ما شامل فایل سرآیند این کتابخانه باشند.
ویژگیهای این کتابخانه عبارتند از:
- مقداردهی اولیه اجرای GLUT و تنظیم مد نمایشی درون پنجره
- مدیریت پنجرهها (اندازه و مکان پنجره نسبت به صفحه مانیتور)
- پس فراخوانی[16] تابع نمایش صحنه و اجرای برنامه
- اداره رخدادهای ورودی (تغییر اندازه پنجره، فشردن کلیدهای صفحه کلید و ماوس و حرکت ماوس)
- مدیریت یک فرایند پس زمینهای
- ترسیم اشیای سه بعدی (شامل کره، مخروط، چندوجهیهای معروف، چنبره[17] یا تیوب و قوری)
یادگیری و بکارگیری GLUT آسان است و گرچه تمام کارکردهای سیستم عامل را برای ما فراهم نمیکند ولی برای برنامههای کاربردی ساده مناسب است [ OpenGL Game prog].
علاوه بر کتابخانههای فوق، گسترشهای[18] OpenGL دائماً در حال توسعه میباشند. همچنین نسخههای جدید OpenGL دائماً درون کارتهای گرافیک تعبیه میگردند (آخرین نسخه OpenGL در ابتدای سال 2011 نسخۀ 4.1 بوده است).
با توجه به مباحث فوق، احتمالاً تاکنون دریافتهاید که از دیدگاه دانشگاهی که هدف آن بکارگیری ابزار با هدف آموختن روش طراحی و مهندسی آن برای توسعه علم و دانش است، OpenGL نسبت بهDirectX دارای مزایای زیر است :
- باز و رایگان میباشد (توسعۀ آن انحصاری نیست و فاقد کپی رایت است).
- مستقل از بستر است (تحت سیستم عاملها و زبانهای مختلف برنامهنویسی قابل بکارگیری میباشد).
- نمونه کدها و منابع یادگیری گستردهتری از آن در دسترس است (که بسیاری از آنها نیز رایگان است).
- به سخت افزار نزدیکتر است (دید مهندسی بهتری به ما میدهد).
- یادگیری آن و برنامهنویسی با آن آسان است (فقط شامل فراخوانی توابعی با اسامی مناسب میباشد و اطلاعات پیش نیاز لازم ندارد).
منصفانه است بگوییم معایب OpenGL نسبت به DirectX عبارتند از:
- هسته اصلی آن یعنی GL فاقد امکانات ورودی/خروجی است (البته این نقیصه با بکارگیری GLUT برطرف میگردد).
- صرفاً گرافیکی است و از صوت پشتیبانی نمیکند (برای بکارگیری صوت باید از کتابخانههای کمکی همچون fmod یا OpenAL استفاده کنیم).
- گسترشهای آن متفاوت است و کارتهای گرافیکی مختلف گسترشهای مختلفی را پشتیبانی میکنند. بنابراین کارت گرافیکی یک شرکت ممکن است فاقد گسترشهای شرکتهای دیگر باشد و بنابراین برخی امکانات OpenGL را پشتیبانی نکند (این نقص اخیرا با اتحاد میان شرکتها در حال برطرف شدن است)
دفعه بعد به روش راهاندازی OpenGL و بکارگیری آن میپردازیم.
[1] Application Programming Interface
[2] direct
[3] DOS
[4] Component Object Model
[5] Silicon Graphics Incorporation
[6]و7 سایت http://nehe.gamedev.net را ببینید.
[8] Jurassic Park
[9] screen saver
[10] openGL Utility
[11] quadrics
[12] tessellation
[13] open GL Utility Toolkit
[14] joystick
[15] platform
[16] callback
[17] torus
[18] extensions
