تبليغاتX
OpenGL & Computer graphics - Open GL را بهتر بشناسيم

با سلام خدمت دوستان و همراهان وبلاگ اوپن جی ال و گرافیک کامپیوتری

 

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

 

 

Open GL را بهتر بشناسيم

اين مقاله رو قبلا تو مجله عصر شبكه خونده بودم.

در اين مقاله تصميم دارم شما را با يكي از مهمترين ابزارهايي كه در اختيار برنامه نويسان بازيهاي كامپيوتري قرار دارد آشنا كنم.اين ابزار openGL نام دارد .ابزاري پيچيده و در عين حال انعطاف پذير كه به برنامه نويسان اجازه ميدهد فضاهاي سه بعدي را به كمك برنامه نويسي و سخت افزار مناسب به تصوير بكشند.

 

مقايسه open gl و direct x توسط سرپرست تيم برنامه نويسي بازيهاي دوم و quake:

دو نوع كتابخانه استاندارد 3d تحت win32 وجود دارد .

1)  direct 32 immediate mode

2) Open GL

 

من به شدت تحت تاثير سادگي و طراحي بسيار خوب api موجود در OpenGLقرار گرفتم.چندي قبل بازي quake را كاملا با OpenGL نوشتم. اين كار زمان زيادي را به خود اختصاص نداد و كد حاصل ساده و خوانا بود.OpenGL بستر مناسبي را براي آزمايش ايده هاي جديد فراهم مي آورد.سپس شروع به انتقال كد به Direct x كردم و هنوز هم اين كار را به اتمام نرساندم چون كارهاي مهم تري براي انجام دادن وجود دارد.DX يك API مخوف است و سختي زيادي را به برنامه نويس تحميل ميكند بدون اينكه مزاياي قابل توجهي داشته باشد.در بسياري از موارد تنها يك خط از كدهاي OpenGL معادل نيم صفحه كد در DX است.

OpenGL با توابع سر و كار دارد و با فراخواني يك به يك توابع ميتوان به نتيجه نهايي دست يافت.

 

GlBegin(GL_triangles)

Glvertex(0,0,0);

Glvertex(1,1,0);

Glvertex(2,0,0);

Glend();

كد معادل در D3D:

(psued code,and incomplete)

v=&buffer.vetexes[0];

v->x=0;v->y=0;v->z=0;

v++

v->x=1;v->y=1;v->z=0;

c=&buffer.commands;

.

.

.

.

و اگر كد واقعي را ارائه ميدادم شايد ميگفتيد عمدا قصد بد جلوه دادن d3d را دارم.

 

OpenGL يكي از كتابخانه هاي برنامه نويسي سه بعدي تحت ويندوز است و همچنين بر روي اكثر سيستم عامل ها مانند اپل و لينوكس و يونيكس هم كار ميكند.اين كتابخانه از تكنيك هاي گرافيك سه بعدي پيشرفته پشتيباني ميكند  كه استفاده از آنها آسان است

 

OpenGL در اوايل دهه 90 توسط silicon graphics ايجاد شد و هم اكنون توسعه و تكامل آن تحت نظر شركتهايي مثل Microsoft – sun – sgl - nvidia  و Ati است.در حال حاضر از اين كتابخانه در كارهاي پر سرعت گرافيكي و بازيهاي ويديويي استفاده ميشود. همچنين در برنامه هاي معروفي مثلmatlab mathematica و يا برنامه هايي مثل Ansys , working model3d از اين api استفاده ميشود.

مكانيزم مورد استفاده در openGL بر مبناي كتابخانه ها و هدر فايل ها ميباشد و اين كتابخانه ها داراي خاصيت بهينه سازي نرم افزاري در مواقعي كه سخت افزار از آنها پشتيباني نميكند  هستند. در واقع اين خاصيت به openGL اجازه ميدهد كه اگر سخت افزار شما قابليت پشتيباني از محيط گرافيكي را نداشت محيط را با سخت افزار شما تطبيق دهد.( به عنوان مثال در بازي دوم 3 كه با همين openGL نوشته شده شما ميتوانستيد حتي بازي را با يك كارت گرافيك 4 مگابايتي هم اجرا كنيد. گرافيك بسيار پايين مي آمد اما برنامه هنوز اجرا ميشد و اين قدرت انطباق اين موتور و Api آن را نشان ميدهد.)

 

 استاندارد OpenGLتوسط سازنده هاي گرافيك سخت افزاري در حال گسترش است.OpenGL از كتابخانه نوشته شده توسط C استفاده ميكند.به اين نوع برنامه نويسي به اصطلاح procedural( رويه اي) ميگويند.

امروزه با عرضه نسخه هاي جديد DX شايد حداقل در صنعت ساخت بازي كمتر به openGL توجه شود اما هنوز اين كتابخانه در ساخت نرم افزارهاي مهندسي كاربرد دارد.اگر بخواهيم از ديد مهندسي به openGL نگاه كنيم سه خصوصيت بارز را براي آن ميابيم.

 

OpenGL به شيوه اي طراحي شده كه دستورات در يك محل صادر ميشوند  و در محل ديگر اجرا.به اين معماري  ساختار مشتري/سرويس دهنده( client/server) گويند.خصوصيت ديگر يك محل مجتمع براي نمايش تصاوير است .اين محل ميتواند در هر جايي از حافظه ( از جمله حافظه گرافيكي) قرار گيرد.به اين حافظه بافر فريم( frame buffer) گويند . مورد آخر اينكه  OpenGL معمولا خيلي در محدوده پارامترها وسواس به خرج ميدهد  و اجازه نميدهد  مقادير خارج از محدوده صادر شوند.

OpenGL يك نوع ماشين حالت است )  statemachin) يعني اكثر خصوصيات  ان بصورت يك تابع حالت عرضه ميشوند. بدين ترتيب كه اگر مثلا خصوصيت نورپردازي را روشن كنيم تا زماني كه آن را غير فعال نكرده ايم صحنه تحت نور پردازي قرار دارد.

بر روي اينترنت منابع زيادي براي OpenGL وجود دارد كه معروف ترين آنها Open GL RED BOOK و

OpenGL BLUE BOOK هستند كه توسط شركت Sgi عرضه شده اند و حاوي تمام دستورات اين كتابخانه ميباشد.

OpenGL  به صورت پيش فرض همزمان با صادر شدن هر دستوري عمليات مربوط به آن را انجام ميدهد. يعني دستورات در جايي ذخيره نميشوند تا همه با هم اجرا شوند.اين مسئله خود از دلايل سادگي كار با ان است اما در صحنه هاي بزرگ سرعت اجرا اهميت دارد و سادگي كار تنها مهم نيست. در نتيجه به بافري احتياج داريم  كه يك سري از دستورات  و داده ها را در خود ذخيره كند  و در زمان مورد نياز همگي را با هم اجرا كند.چنين مكانيسمي در بسياري از كتابخانه ها مانند D3d هم وجود دارد. در d3d به اين مكان ذخيره گر-بافر گره يا بافر انديس گويند. در OpenGL هم مكاني از حافظه به نام ليست نمايشي به اين عمل اختصاص دارد . ازاين ليست ميتوان براي انجام اموري مانند نمايش فونت ها بافت ها انيميشن و ذخيره اطلاعات گره ها و... استفاده كرد.

در انتها چند عكس ازبازي دوم3 كه نمايش قدرت OpenGL است را با هم ميبينيم.

 

این مقاله را با فرمت PDF از این آدرس دانلود کنید :

http://www.rogepost.com/dn/ysbr/Microsoft+Word+-+OpenGL.rar

 

 

 

 

 

 

 

 

 

 

 

+ نوشته شده توسط ( ساسان و محمد ) در دوشنبه شانزدهم مرداد 1385 و ساعت |
Image and video hosting by TinyPic