تبليغاتX
OpenGL & Computer graphics

با عرض سلام خدمت دوستان :

 

امروز قصد دارم تا مطلب آشنایی با کامپایلر ها و IDE ها را به اتمام برسانم.بنابر این مستقیما می رویم سر اصل مطلب. چندتا کامپایلر و IDE دیگر مانده که بنوبت معرفی میشود.

 

3. سومین کامپایلری که قصد معرفی آن را دارم کامپایلر Pelles C میباشد که کامپایلری عالی است و البته تنها از زبان C پشتیبانی میکند. این کامپایلر بسیار قدرتمند بوده و برنامه هایی با حجم کم و بهینه شده تولید میکند. این را من خودم بشخصه تجربه کرده ام بدین صورت که دو برنامه یکسان را با این کامپایلر و با MinGW کامپایل کردم البته هیچکدام از گزینه های مربوط به بهینه سازی کد را در هیچ کدام از این دو کامپایلر فعال نکردم. اما کد خروجی Pelles C حجم کمتری داشت (لازم به ذکر است که برنامه مورد ذکر برنامه ای تحت ویندوز بود). و بار دیگر در برنامه ای دیگر کد خروجی Pelles C حجم خروجی بزرگتری داشت.( و این یک برنامه تحت داس و کنسولی بود).

 

بطور خلاصه این کامپایلر واقعا برای کسانی که تنها قصد استفاده از زبان "C" را دارند بسیار مفید است ضمن اینکه برنامه هایی که ما طی دروس بعدی خواهیم نوشت تماما از "C" استفاده میکنند و بعدها که به مراحل پیشرفته کار رسیدیم از C++ نیز اسنفاده فراوان خواهیم برد. اما برای شروع یادگیری OpenGL ما هیچ اجباری در بکارگیری C++ و پیچیدگیهای برنامه نویسی شی گرا نداریم و در عوض وقتمان را به یادگیری OpenGL اختصاص میدهیم.

البته منظور این نیست که C++ سخت است و یا بدرد ما نمیخورد بلکه منظورم اینست که فعلا "C" به بهترین نحوی نیازهای ما را برآورده میکند و به ما اجازه میدهد فارق از پیچیدگی های برنامه نویسی شی گرا تمام حواسمان را وقف خود OpenGL بکنیم.

نکته دیگری که لازم است اینجا به دوستان تازه کار متذکر شوم اینست که اگر میخواهید برنامه ای بنویسید که در آن از قابلیتهای ویژه C++ استفاده نمیکنید سعی کنید از فایلهای سر آیند "C" استفاده کنید و نه از فایلهای هدر C++. برای اینکه واضحتر بگویم یک مثال می آورم. در برنامه ساده زیر من هیچ گونه استفاده ای از قابلیتهای C++ نکرده ام. یک برنامه ساده است که یک خط متن را روی صفحه چاپ میکند. خوب این برنامه را میتوان به دو صورت نوشت. با استفاده از فایل هدر "iostream.h" و یا با استفاده از فایل هدر "stdio.h" که متعلق به "C" است.

 

برنامه اول که با کمک "C" نوشته شده :

1:  #include <stdio.h>   // this way 

2: 

3:  int main()

4:  {

5:      printf("this is a test\n");

6:      return 0;

7:  }

 

برنامه دوم که با کمک "C++" نوشته شده :

 

1:   #include <iostream.h>     // this way 

2:  

3:   int main()

4:   {

5:        cout << "this is a test" << endl;

6:        return 0;

7:   }

 

با کامپایل هر کدام از این دو برنامه در محیط Dev-C++ به این نتیجه میرسیم که برنامه ای که از فایلهای هدر و کلا کتابخانه "C" استفاده کرده حجم بسیار بسیار کمتری نسبت به همتای خود که با کمک کتابخانه و فایل هدر "C++" نوشته شده برخوردار میباشد. حجم نمونه "C" برابر با 15.2 و حجم نمونه "C++" برابر با 454 میباشد( مبنا کیلو بایت میباشد).

علت این است که کتابخانه های این زبانها حالت استاتیک دارند بطور کامل به برنامه ضمیمه میشوند فارق از این که شما از چه تعداد توابع این کتابخانه استفاده کرده اید.( همینجا میگویم که من این مطلب که کتابخانه های سی و سی++ بطور استاتیک به برنامه ضمیمه میشوند و بدین علت حجم برنامه خروجی را افزایش میدهند را مدتها پیش در سایت برنامه نویس در یکی از فرمها خواندم و خودم

اطمینان 100% در مورد آن ندارم. که علت افزایش حجم حتما همین باشد. اما چیزی که مسلم است اینست که تفاوت حجم کد خروجی در دو زبان بسیار چشمگیر است).

 

البته این موارد چندان ارتباطی با وبلاگ ما نداشت اما تنها به عنوان یک راهنمایی کوچک لازم دیدم آن را برای دوستان عنوان کنم.

 

این کامپایلر "Pelles C" مجهز به یک IDE سر خود نیز میباشد و از قدرت خوبی در کامپایل برنامه های "C" برخوردار است و دیگر شما لازم نیست بدنبال IDE برای آن بگردید.

 

 

4. کامپایلر دیگری که قصد معرفی آن را دارم Open Watcom میباشد که سابقه طولانی با خود به همراه دارد و بتازگی بصورت رایگان در اختیار همه قرار داده شده است. این کامپایلر یک IDE خوب به همراه یک سری کامل از ابزارهای جانبی را با خود یدک میکشد. آنقدر ابزار با خود دارد که تقریبا نیاز هر اهل فن و برنامه نویس حرفه ای را به راحتی برطرف میسازد. احتمالا بسیاری از دوستان با آن آشنا هستند. البته احتمالا حجم آن یک مقدار برای دانلود زیاد است (نزدیک به 60 مگابایت). ولی اگر کسی آرزوی استفاده از کامپایلری فوق العاده و رایگان و قابل رقابت با بزرگان این عرصه را دارد باید بگویم این همان چیزی است که بدنبالش هستید.

برای دانلود آن میتوانید به این صفحه مراجعه کنید :

http://www.openwatcom.org/index.php/Download

 

5. کامپایلر LCC-Win 32 نیز از جمله کامپایلر هایی است که IDE مخصوص به خود را بهمراه دارد و برای استفاده غیر تجاری رایگان است. در سطح اینترنت شناخته شده است و قابلیت تولید اکثر انواع برنامه ها را دارد. (همچون دیگر کامپایلر های معرفی شده قابلیت تولید برنامه های کنسولی و تحت ویندوز و کتابخانه های دینامیک و استاتیک و ... را دارد). البته استفاده از آن را چندان به مبتدیان پیشنهاد نمیکنم چون IDE آن زیاد برای مبتدیان جذاب و راحت نمیباشد.

 

برای دانلود و آشنایی با آن میتوانید به این آدرس مراجعه کنید : (لازم به ذکر است که آخرین نگارش این کامپایلر 4.0 است و در سال 2006 آماده شده است)

http://www.cs.virginia.edu/~lcc-win32

 

6. و اما به عنوان آخرین مورد قصد دارم IDE ای بنام MinGW Developer Studio را به شما معرفی کنم که توسط عده ای برای کامپایلر MinGW طراحی شده است. بد نیست و به راحتی جوابگوی برنامه نویسانی است که از آن انتظاراتی در حد IDE های حرفه ای ندارند. راحت سبک و بی دردسر است و با کامپایلر MinGW نهایت سازگاری را دارد چون صرفا برای آن طراحی شده است. بطور خلاصه محیط ساده و صمیمی دارد. برای آشنایی و تماشای Screenshot های آن و دانلودش میتوانید به این آدرس مراجعه کنید:

http://www.parinyasoft.com

 

 وبه عنوان یک نطق خارج ازدستور(چی گفتم)این کامپایلر آخری را هم معرفی میکنم. بلهDigital Mars را فراموش کردیم. البته این کامپایلر بدون IDE ارایه میشود ولی شما با داشتن یکی از دو IDE ی Relo و یا CodeBlocks میتوانید این کامپایلر را به هر کدام از آنها که بخواهید معرفی کرده و استفاده کنید یا به عبارت بهتر حالش رو ببرید (یکم شوخی هم برای رفع خستگی دوستان ضرر نداره).

البته هنوز کامپایلر ها و IDE های زیاد دیگری هستند که ما در اینجا معرفی نکردیم و شما میتوانید با مراجعه به این صفحه به لیست کاملی از آنها به همراه توضیحی مختصر دسترسی داشته باشید. البته در اینجا چیزهای مفید دیگری مانند کتابخانه های رایگان برای C++ نیز معرفی شده است:

 

http://www.freebyte.com/programming/cpp

به عنوان آخرین نکته خطاب به دوستانی که هنوز در استفاده از این کامپایلر ها و IDE ها مردد هستند و دلشان برای آسایشی که در پناه MFC داشتند تنگ میشود wxWidgets را معرفی میکنم. این کتابخانه ای است کا با تمام کامپایلر ها قابل اجتماع است و نمیگذارد دوستان دلتنگ MFC شوند حتی به جرات میتوان گفت که از MFC نیز بهتر است و هنوز هم تلاش برای بهبود آن ادامه دارد و در قالب یک پروژه در حال توسعه است.

 

به پایان این مقاله دو قسمتی رسیدیم. این کامپایلر ها و IDE هایی که در این دو قسمت به دوستان معرفی شد را خودم شخصا امتحان کرده ام. و سعی کردم تا حد امکان یک منظره کلی از آنچه با آن طرف هستید را برایتان ترسیم کنم. امیدوارم که دوستان از آن راضی باشند و اگر کمبود و کاستی در آن ملاحظه نمودند به بزرگی خود ببخشند. فراموش نکنید که بهبود و پیشرفت این وبلاگ به خود شما بستگی دارد.

 

 

 

+ نوشته شده توسط ( ساسان و محمد ) در دوشنبه بیست و نهم خرداد 1385 و ساعت |

دوستان سلام :

 

مطلبی که امروز برایتان مهیا کرده ام ارتباطی مستقیمی با OpenGL ندارد. ولی به چند دلیل لازم دیدم قبل از وارد شدن به مباحث اصلی و آموزشهای NeHe یک سری از کامپایلر ها و محیط های توسعه مجتمع را که برای زبانهای C و C++ تهیه شده اند و اکثرشان کیفیت های بالایی دارند و در ضمن رایگان نیز هستند را به شما معرفی کنم. البته در همین ابتدا باید نکته ای را روشن کنم. اصولا من از مایکروسافت بیزارم و تا جایی که مجبور نباشم از محصولات این شرکت عزیز استفاده نمیکنم. البته بحث در مورد چرایی این مورد ربطی با محتوای این وبلاگ ندارد و چندان مایل نیستم با بیان عقاید شخصی خود در این وبلاگ تجربیاتی که در سایتهای دیگر داشتم را اینجا نیز تکرار کنم و با دوستانی که عاشق سینه چاک محصولات مایکروسافت هستند به جر و بحث بر سر این مطلب بپردازم. در عوض ترجیح میدهم که وقت مفید دوستان با مطالب آموزنده پر شود.

 

و اما دلایل من در مورد معرفی این کامپایلر ها و IDE ها :

 

  1. همانطور که پیشتر نیز گفتم من از محصولات مایکروسافت استفاده نمیکنم مگر آنجایی که مجبور باشم. مانند سیستم عامل ویندوز و واژه پرداز Word (البته بخش مهمی و زیادی از زندگی من در دنیای شیرین و دوست داشتنی لینوکس میگذرد).
  2. در هیچ کدام از آموزش هایی که در این وبلاگ به دوستان داده میشود از محیط ویژوال استدیو به هیچ عنوان استفاده نمیشود.
  3. کار کردن با کامپایلر ها و IDE های مختلف دوستان را از این باور که تنها کامپایلر و IDE مایکروسافت در این دنیا وجود دارد دور میسازد.
  4. بسیاری از این محیط ها و کامپایلر ها در عین رایگان بودن هیچ چیز از نمونه تجاریشان (مخصوصا ویژوال استدیو) کم ندارند.
  5. دوستان با استفاده از محیط ها و کامپایلر های دیگر میتوانند توانایی ها و دانسته هایشان را بطور زیادی گسترش دهند و هیچگاه متکی به یک سیستم عامل یا محیط خاص نباشند.
  6. و در آخر این نکته که تنوع هم چیز خوبی است.

 

و اما معرفی کامپایلر ها و IDE های رایگانی که برای C و C++ تهیه شده اند :

 

  1. اولین پیشنهاد و شاید حرفه ای ترین پیشنهاد برای دوستان کامپایلر GCC میباشد. که محصولی رایگان بوده و قدرتی فراوان دارد بطوری که از آن بصورت حرفه ای در سیستم عامل های لینوکس و یونیکس استفاده میشود. اما ناراحت نباشید ورژن تحت ویندوز این کامپایلر قدرتمند بنام MinGW برای شما آماده شده است. که در حقیقت همان gcc است که کتابخانه ها و فایلهای هدر ویندوز به آن اضافه شده است. خوب برای این کامپایلر قدرتمند IDE های گوناگون و رایگان زیادی وجود دارد از جمله دو IDE به نامهای Dev-C++ و CodeBlock که شما با دانلود هر کدام از این IDE ها صاحب یک نسخه تر و تمیز از جدیدترین ورژن MinGW نیز میشوید. هر دوی این IDE ها بسیار زیبا و قوی هستند. هر چند Dev-C++ IDE یک مقدار قدیمی تر است و سابقه بیشتری دارد اما در مقابل CodeBlock نیز چیزی کم ندارد و با محیط جذاب و کارآیی خوبش آینده خوبی در پیش دارد.

 

برای دانلود IDE ی CodeBlocks به همراه کامپایلر MinGW میتوانید به این آدرس مراجعه کنید.البته لازم به ذکر است که این IDE با کامپایلر های دیگری مانند Borland C++ Builder ویا Digital Mars هم میتواند کار کند :

 

www.codeblocks.org

 

و برای دانلود IDE ی Dev-C++ به همراه کامپایلر MinGW میتوانید به این آدرس مراجعه کنید :

 

www.Bloodshed.net

 

  1. سومین IDE ای که امروز قصد معرفی آن را دارم Relo میباشد که محیط فوق العاده ساده ای دارد و شاید به خاطر این ساده و خودمانی بودن یکی از بهترین IDE ها برای برنامه نویسان تازه کار C و C++ است که از سر و کله زدن با منو ها و قابلیت های گوناگون IDE های بزرگ بیزارند. این را جدا میگویم که اگر تازه به جمع برنامه نویسان C/C++ پیوسته اید حتما این IDE را امتحان کنید. این IDE در عین سادگی بسیار قدرتمند بوده و به راحتی با کامپایلرهای Borland-gcc-DMars-VC مجتمع میشود. و این یک مزیت است.

 

برای آشنایی و دانلود آن میتوانید به این سایت مراجعه نمایید :

 

http://www.fifsoft.com/relo/

 

خوب امروز برای شما دوستان یک کامپایلر و سه IDE مختلف معرفی کردم. چند عدد دیگر هم باقی مانده که در قسمت دوم و پایانی معرفی میشود و در پایان یک مقایسه بین آنها انجام میدهیم.

 

تا بعد خدانگهدار

منبع : در نوشتن این مطلب از هیچ منبعی استفاده نکردم. اینها تنها تجربیات خودم است.

 

 

+ نوشته شده توسط ( ساسان و محمد ) در دوشنبه بیست و نهم خرداد 1385 و ساعت |

با عرض سلام خدمت دوستان و همراهان وبلاگ OpenGL & Computer graphics :

 

اول از همه از آقای voldemort بابت نظرات خوبشون نهایت تشکر را دارم. دوست عزیز از این که با پیشنهادات خوبت به من کمک میکنی بسیار ازت ممنون هستم. در مورد RSS هم بروی چشم حتما پیگیرش میشم. اما در مورد مقالات وبلاگ هر زمان به سطح مطلوب و زیادی رسید حتما همشون را یا در قالب یک pdf ویا pdf های جداگانه تنظیم میکنم و روی یک سرور برای دوستان آپلود میکنم.

 

چطورید دوستان بیحال من. آقا شما چه مشکلی دارید که اینقدر بابت لودینگ صفحه منتظر میشید و مقالاتی که من با زحمت آماده کردم را میخونید (دیگه بیشتر ادامه نمیدم تا شکل منت به خودش نگیره) ولی زحمت یه نظر کوچولو را بخودتون نمیدید.

 

و اما هدف از نوشتن این مطلب :

مقالاتی که تا حالا برای شما آماده میکردم تماما از کتاب OpenGL SuperBible 3rd Edition  بودند و بیشتر جنبه مقدماتی داشتند تا دوستان یک پیش زمینه و آشنایی مختصر با OpenGL پیدا کنند. البته ناگفته نماند که در بین کتابهایی که تابحال برای OpenGL تالیف شده این کتاب همچون کیمیایی میماند.

خوب از یکی دو جلسه دیگر آموزشهایی که از این کتاب برایتان مهیا میکنم وارد قسمت های اصلی و مهم کار میشود و ما رسما وارد دنیای OpenGL میشویم. البته این کتاب OpenGL را به بهترین نحو آموزش میدهد اما در زمینه کار عملی و آشنایی با نحوه برنامه نویسی OpenGL در ویندوز تا فصل سیزدهم صحبتی به میان نمی آورد و این یک مقدار برای آن دسته از دوستانی که عجله دارند هر چه زودتر و بصورت جدی با برنامه نویسی درگیر شوند خوشایند نمیباشد. البته گفتم این کتاب OpenGL را عالی درس میدهد اما خوب ما دوست داریم هر چه زودتر روش برنامه نویسی OpenGL را در سیستم عامل زیبای ویندوز ( محصول شرکت انحصار طلب و نامرد مایکروسافت ) و با استفاده از توابع API آن بیاموزیم. و رسما برنامه هایی بنویسیم و در کامپایلر خود اجرا نماییم.

 

خوب پس چاره چیست :

اما چاره ای که من برای این مشکل اندیشیده ام ترجمه سلسله آموزشهای NeHe برای OpenGL است که الحق از بهترین Tutorial هایی هست که در سطح اینترنت برای آموزش OpenGL میتوان یافت. و در کنار آموزشهایی که از کتاب OpenGL SuperBible 3rd Edition برایتان مینویسم در پست های جداگانه در هر پست یک درس از آموزشهای NeHe را نیز ترجمه میکنم و در وبلاگ قرار میدهم.البته این دو هیچ ربطی بهم ندارند و فکر نکنید که بطور مثال آموزشهای NeHe باید در راستای آموزشهای کتاب باشد. بلکه ایندو هر کدام جداگانه مسیر خود را در آموزش OpenGL طی میکنند.

 

البته من برای اینکه دوستان به راحتی بتوانند این دو را از هم تشخیص دهند در پایان هر مطلب منبع آن را ذکر میکنم همانطور که تاکنون همیشه منابع مطالبم را در پایان هر درس نوشته ام. پس به زودی منتظر اولین درس از سلسله دروس NeHe برای OpenGL باشید که تعداد این دروس نیز 49 عدد میباشد. و به مرور در مدت زمانی که در حین نوشتن مقالاتی با استفاده از کتاب هستم اینها نیز ترجمه میشود و در وبلاگ قرار میگیرد.

 

امیدوارم اینگونه توانسته باشم دوستانی که مایلند هر چه زودتر وارد کدنویسی شوند را نیز راضی کنم. هر چند که اینجا کمتر کسی از دوستان نظری میدهد و انگار این وبلاگ هنوز جای خود را پیدا نکرده است. البته من ناامید نمیشوم و همچنان ادامه میدهم.

 

موفق و موید باشید.

 

 

+ نوشته شده توسط ( ساسان و محمد ) در دوشنبه بیست و نهم خرداد 1385 و ساعت |

OpenGL یک ماشین حالت است :

 

یک ماشین حالت یک مدل انتزاعی از مجموعه ای از متغیرهای حالت است که میتوانند ارزش های گوناگونی داشته باشند. روشن بودن "on" و یا خاموش بودن "off" و الی آخر. این مقدور نیست که ما هر موقع بخواهیم چیزی را در OpenGL ترسیم کنیم تمام متغیر های حالت را تعیین و مقداردهی نماییم. در عوض OpenGL از یک مدل حالت و یا ماشین حالت استفاده میکند تا رو تمام متغیر های حالت OpenGL را پیگیری نماید. هنگامی که یک متغیر حالت مقدار دهی شد همینطور برقرار میماند تا زمانی که تابع دیگری آن را تغییر دهد. در عمل بسیاری از حالت ها روشن و یا خاموش هستند. برای مثال نورپردازی یا در حالت روشن قرار دارد و یا خاموش است. وقتی نورپردازی در حالت خاموش قرار دارد ترسیمات هندسی ما بدون هیچگونه محاسبات نورپردازی اعمال شده بر روی رنگ اشیای هندسی انجام میگیرد. اما کلیه ترسیمات هندسی پس از روشن کردن حالت نورپردازی به همراه اعمال محاسبات نورپردازی بر روی صفحه ترسیم میشود.

 

برای روشن کردن این متغیر های حالت شما باید از تابع نمونه زیر کمک بگیرید :

 

void glEnable(GLenum capability);    // this way

 

و برای خاموش کردن از تابع زیر استفاده میکنید :

 

void glDisable(GLenum capability);    // this way

اینها شکل کلی این توابع بود. اما در مورد نورپردازی برای مثال شما میتوانید حالت نورپردازی را با استفاده از این حالت روشن (فعال) کنید :

glEnable(GL_LIGHTING);      // this way
و با کمک این تابع آن را خاموش (غیر فعال) میکنید :
 
glDisable(GL_LIGHTING);     // this way
برای اینکه امتحان کنید که یک متغیر حالت فعال است یا نه OpenGL یک مکانیسم راحت را تدارک دیده
 است :
Glboolean glIsEnabled(GLenum capability); // this way
 
البته همانطور که قبلا هم گفتم در نهایت تمام متغیر های حالت یا روشن هستند و یا خاموشند. 
بسیاری از این توابع میتوانند این متغیر های حالت را ارزش دهی کنند تا وقتی که آنها عوض شوند.
شما میتوانید در هر لحظه ای که بخواهید ارزش حالت ها را چک کنید. یک مجموعه از توابع تحقیق کننده
 "query functions" به شما اجازه میدهند تا در هر لحظه که بخواهید ارزش هرکدام از متغیر های بولی یا
 صحیح یا ممیز شناور و یا ممیز شناور با دقت مضاعف را بفهمید. این چهار تابع بدین صورت نمونه سازی
 شده اند :
 
void glGetBooleanv(GLenum pname, GLboolean *params); //  this way
 
void glGetDoublev(GLenum pname, GLdouble *params); //   this way
 
void glGetFloatv(GLenum pname, GLfloat *params); //  this way
 
void glGetIntegerv(GLenum pname, GLint *params); //  this way
 
هر تابع یک ارزش واحد و یکتا و یا آرایه ای کامل از ارزشها را برمیگرداند. نگهداری نتایج در آدرسهایی که 
شما تدارک دیده اید. شما باید ممنون سادگی و قدرت ماشین حالت OpenGL باشید.
 
ذخیره کردن و اعاده (پس دادن یا برگرداندن) حالت ها :
 
OpenGL همچنین یک مکانیزم راحت و مناسب برای ذخیره کردن محدوده کاملی از ارزشهای حالت و 
بازگرداندن مجدد آنها دارد. "پشته" یا "stack"  یک ساختمان داده ای مناسب است که اجازه میدهد داده 
ها به پشته وارد شوند (ذخیره کردن) و بعد از پشته بیرون بپرند تا بازیابی شوند. آیتم هایی که قبلا در 
پشته هل داده شده بودند (ذخیره شده بودند) با دستوری متضاد بازیافت میشوند. ما این را یک 
ساختمان داده ای بنام "بترتیب عکس ورود" و یا "Last in First Out" مینامیم. دقیقا مثل این میماند که 
ما بگوییم "هی لطفا این را ذخیره کن" و یا "push it on the stack" و مدت زمانی بعد بگوییم "چیزی که 
قبلا ذخیره کرده ام را بده" یا "pop it off the stack" .
 
در مقالات آتی شما خواهید دید که موضوع پشته "stack" نقش مهمی را در بکارگیری ماتریسها بازی 
میکند. یک ارزش حالت تنها در OpenGL یا یک محدوده کامل ار ارزشهای حالت مربوطه میتوانند در یک 
پشته صفت و با کمک دستور زیر قرار بگیرند.
 
void glPushAttrib(GLbitfield mask); //  this way
 
متقابلا ارزشها با کمک دستور زیر قابل بازیافت هستند :
 
void glPopAttrib(GLbitfield mask); //  this way
 

به پایان یکی دیگر از مقالات آموزشیمان رسیدیم. بزودی مقاله کاملی در باره کامپایلر ها و محیط های

برنامه نویسی آماده و در وبلاگ قرار میدهم که مطالعه آن را شدیدا به شما دوستان در جهت پیشبرد

اهدافمان توصیه میکنم.

 

منبع : کتاب OpenGL SuperBible 3rd Edition

     
+ نوشته شده توسط ( ساسان و محمد ) در یکشنبه بیست و هشتم خرداد 1385 و ساعت |

مشخصات API :

 

OpenGL توسط عده ای از مردم باهوش که تجربه زیادی در طراحی API های گرافیکی داشتند ایجاد شد. آنها قواعدی برای نامگذاری توابع و شیوه اعلان متغیر تعیین کردند. این API برای سازندگان سخت افزار گرافیکی به راحتی قابل توسعه است و به همین دلیل OpenGL سعی میکند از هرگونه سیاست جداگانه ای احتراز کند.

 

انواع داده در OpenGL :

 

برای اینکه انتقال کدهای نوشته شده در OpenGL به راحتی از یک پلتفرم به پلتفرم دیگر قابل انتقال باشند OpenGL انواع داده مخصوص به خودش را تعریف کرده است. هر محیط برنامه نویسی یا کامپایلری بهر حال قواعد خاصی برای اندازه و نوع حافظه متغیر های مختلف سی "C" دارد. اما با استفاده از انواع داده های OpenGL یعنی OpenGL Data Types شما میتوانید کد خودتان را در برابر این نوع تغییرات عایق کاری کنید.

 

 

جدول 1-2 انواع داده OpenGL را لیست کرده است و همچنین انواع داده متناظر آنها در C تحت محیط ویندوز 32 بیتی را نشان داده است.

 

تصویر 1-2

 

تمام انواع داده با یک GL شروع میشوند برای ایمکه مشخص باشد از انواع داده OpenGL میباشد و خیلی از آنها از انواع متناظرشان در زبان C منتج شده اند. مانند float , int , short , byte , … .بعضی در ابتدایشان یک حرف u دارند که بیانگر اینست که از نوع بدون علامت "unsigned" میباشد. مانند ubyte که نماینده unsigned byte است.

برای بعضی از مصارف روشن ترین و مشخص ترین نام تعیین شده است مانند نوع size که مشخص کننده مقدار طول یا عمق میباشد. بطور مثال GLsizei یکی از توابع OpenGL است که نشان دهنده این است که این تابع یک متغیر از نوع صحیح را به عنوان آرگومان میگیرد.

نقش Clamp یک تذکر جزیی است که نشان دهد مقدار باید در محدوده 0.0 – 1.0 باشد. متغیر های GLboolean بدین منظور استفاده میشوند تا مقادیر صحیح یا غلط را نشان دهند.

اشاره گرها و آرایه هاهیچگونه معادل خاصی در OpenGL ندارند. یک آرایه از ده عنصر GLshort بطور ساده به این صورت تعریف میشود :

GLshort shorts[10];   // this way

 

و آرایه ای از ده اشاره گر به متغیر های GLdouble بدین صورت تعریف میشود :

GLdouble *doubles[10];   //this way

 

بعضی از انواع شی اشاره گر دیگر برای NURBS و چهاگوش ها استفاده میشوند که به توضیحات بیشتری احتیاج دارند و در مقالات بعدی پوشش داده خواهند شد.

 

قواعد نامگذاری توابع در OpenGL :

 

بسیاری از توابع OpenGL از یک قرارداد تبعیت میکنند تا به شما بفهمانند این تابع از کدام کتابخانه میباشد و در بعضی مواقع اینکه این توابع چه تعداد و چه نوعی از داده ها را به عنوان آرگومان میپذیرد. تمام توابع ریشه ای دارند که دستور متناظر OpenGL آنها را نشان میدهد. برای مثال تابع glColor3f  ریشه اش color است و پیشوند gl نشان دهنده کتابخانه gl میباشد. پسوند 3f نشان دهنده این است که این تابع سه عدد آرگومان از نوع ممیز شناور (floating – point) میگیرد. تمام توابع OpenGL قالب زیر را دارند :

 

<Library prefix><Root command><Optional argument count><Optional argument type> 
 
تصویر 2-4 قسمتهای سازنده یک تابع را در openGL نشان میدهد. این تابع نمونه با پسوند 3f سه عدد 
آرگومان ممیز شناور میگیرد. نوع دیگر این تابع glColor3i  سه عدد صحیح را به عنوان آرگومان میپذیرد. و
 نوع glColor3d سه عدد از نوع double را به عنوان آرگومان میگیرد و همینطور الی آخر.
 

این شیوه اضافه کردن تعداد و نوع آرگومانها به انتهای توابع OpenGL به خاطر آوردن لیست آرگومانهای تابع

را آسانتر میکند. بعضی از نسخه های تابع glColor چهار آرگومان میگیرد که آرگومان چهارم مربوط به

تعیین مولفه آلفا (شفافیت) می باشد.

 

بسیاری از کامپایلر های C/C++ که برای محیط windows ساخته شده اند اینگونه تصور میکنند که هر

لیترال ممیز شناور از نوع double است مگر آنکه بطور صریح توسط مکانیسم پسوند به کامپایلر اعلام

شود. هنگامی که از لیترال ها (همان حروف اختصاری) برای اعلان آرگومان ممیز شناور استفاده میکنید

اگر شما مشخص نکنید که این آرگومانها از نوع float هستند و نه از نوع double کامپایلر در زمان کامپایل

یک اخ