PDA

نسخه کامل مشاهده نسخه کامل : نحوه استفاده و كار كردن با OpenGL



amir_dpr
19-08-2006, 19:57
سلام دوستان
اين تاپيك ايجاد شده تا هر كس OpenGl بلده و با نحوه كار با اون در دلفي آشنايي داره مطلب بده.
خودم مي خواستم اول شروع كنم مي خواستم يه فايل بزارم كه اصلا OpenGl چيه ولي بلد نيستم-اگه ممكنه بگيد چه جوري بايد آپلود كنم تا بزارم
ممنون

mahsoft
19-08-2006, 20:14
OpenGL چگونه کار ميکند :

OpenGL بیشتر از آنکه یک API گرافیکی توصیفی باشد حالت رویه ای دارد. بجای توصیف صحنه و اینکه صحنه چگونه باید ظاهر شود برنامه نویس مراحل لازم را برای دست یافتن به نمایش معین یا یک افکت را تعیین میکند. این مراحل باعث فراخوانی دستورات زیادی از OpenGL میشود. این فرامین برای رسم اشکال ابتدایی گرافیکی مانند خط و نقطه و چندضلعی در صحنه سه بعدی استفاده میشوند.
بعلاوه OpenGL نورپردازی و نگاشت بافت و آمیختگی و شفاف نمایی و انیمیشن و بسیاری دیگر از افکت های ویژه سه بعدی و قابلیت های زیاد دیگری را پشتیبانی میکند.
OpenGL شامل هیچ تابعی برای مدیریت پنجره و یا محیط بصری نمیباشد. برنامه نویسان این محیط ها را برای برطرف کردن نیازهای سطح بالایشان ایجاد میکنند و سپس با دقت آنها را با دستورات سطح پایین OpenGL برنامه نویسی میکنند.
پیاده سازی عمومی :
همانطور که قبلا عنوان شد یک پیاده سازی عمومی یک پیاده سازی نرم افزاری میباشد. پیاده سازیهای سخت افزاری برای دستگاههای سخت افزاری ویژه طراحی شده است مانند یک کارت گرافیکی یا یک مولد تصویر. یک پیاده سازی عمومی از لحاظ فنی میتواند بر روی هرکجا اجرا بشود مادامیکه سیستم بتواند تصاویر گرافیکی ساخته شده را نمایش دهد.
تصویر 1-2 مکان نمونه ای را نشان میدهد که OpenGL و یک پیاده سازی عمومی اشغال کرده اند هنگامی که یک برنامه در حال اجراست. برنامه نمونه توابع زیادی را فراخوانی کرده است. بعضی از توابعی که کاربر تولید کرده و بعضی ها که توسط سیستم عامل مهیا شده اند یا متعلق به کتابخانه زمان اجرای زبان برنامه نویسی هستند. زمانی که برنامه های ویندوز میخواهند که چیزی را بر روی صفحه خروجی رسم کنند معمولا یکی از توابع API ویندوز را که (رابط دستگاه گرافیکی) نامیده میشود صدا میزنند. GDI شامل متد هایی است که به شما اجازه نوشتن متن و ترسیم اشکال دو بعدی ساده و غیره را میدهد.
معمولا سازندگان کارت های گرافیکی یک درایور سخت افزاری با رابط های GDI تهیه میکنند که خروجی را بر روی مانیتور رسم کند. یک پیاده سازی نرم افزاری از OpenGL گرافیک های تقاضا شده توسط یک برنامه را میگیرد و از آن گرافیک سه بعدی یک تصویر دو بعدی رنگی ایجاد میکند. سپس این تصویر را به GDI میفرستد تا بر روی مانیتور نمایش دهد. در بقیه سیستم های عامل نیز وضع به همین منوال است اما شما GDI را با سرویس نمایش محلی سیستم عامل خود تعویض میکنید.
OpenGL یک جفت پیاده سازی نرم افزاری مشترک دارد. یکی پیاده سازی نرم افزاری مایکروسافت است که با هر ورژن از ویندوز مانند NT 3.5 و بالاتر و Win95 و 2000 و XP ارایه میشود.
SGI یک پیاده سازی نرم افزاری از OpenGL را برای ویندوز طراحی کرد که پیاده سازی مایکروسافت را از دور خارج میکند. این پیاده سازی دیگر به طور رسمی پشتیبانی نمیشود اما هنوز به مقدار زیادی توسط توسعه دهندگان استفاده میشود. که در انجمن های اوپن سورس از مقبولیت و پشتیبانی خوبی برخوردار است. Mesa 3D یک OpenGL مجوز دار نیست. بنابر این بیش از این که یک پیاده سازی رسمی باشد مانند یک همکار برای OpenGL است.
پیاده سازی سخت افزاری :
یک پیاده سازی سخت افزاری از OpenGL شکل یک درایور کارت گرافیکی را دارد. شکل 2-2 ارتباطش با برنامه مانند شکل 1-۲ است. توجه کنید که فراخوانی های توابع OpenGL به درایور سخت افزار پاس داده میشوند. این درایور خروجی خود را به GDI ویندوز برای نمایش پاس نمیدهد. رابط خودش مستقیما با سخت افزار نمایش گرافیکی رابطه دارد.
یک پیاده سازی سخت افزاری به عنوان یک پیاده سازی تسریع شده شناخته میشود. چون گرافیک سه بعدی با کمک سخت افزار بسیار بهتر و سریعتر از یک پیاده سازی صرفا نرم افزاری عمل میکند. چیزی که در تصویر 2-2 نشان داده نشده اینست که بخشی از قابلیتهای OpenGL هنوز به صورت نرم افزاری به صورت بخشی از درایور ایجاد میشود و بقیه قابلیتها و خصوصیات میتواند مستقیما به سخت افزار پاس داده شوند.
The Pipeline :
کلمه pipeline جهت شرح دادن پروسه ای که میتواند دو مرحله جداگانه یا بیشتر را در بر بگیرد استفاده میشود. تصویر 3-2 یک pipeline خلاصه شده OpenGL را نشان میدهد.
به عنوان برنامه ای که توابع API مربوط به OpenGL را فراخوانی میکند دستورات در محلی بنام بافر دستور یا Command Buffer ذخیره میشود. این بافر بالاخره با اطلاعات راس و تکسچر و غیره پر میشود. وقتی این بافر تا آخرین حد پر شود توسط برنامه یا توسط طراحی درایور دستورات و اطلاعات به مرحله بعدی در پروسه Pipeline پاس داده میشوند.
اطلاعات مربوط به رئوس معمولا تغییر شکل یافته هستند. در آموزشهای بعدی شما خواهید فهمید که این یعنی چه (برره ای بود). اما برای حالا همین قدر بدانید که "تغییر شکل و نورپردازی" یک مرحله شدیدا ریاضی گونه هستندکه نقاط برای تشریح مختصات هندسی اشیا استفاده میکنند.محاسبات نور پردازی به خوبی بر روی اطلاعات رئوس انجام میشوند تا نشان دهند هر راس با چه شدت رنگی و نوری باید نمایش داده شود.
هنگامی که این مرحله به پایان رسید اطلاعات به بخش بعدی Pipeline یعنی Rasterization خورانده میشود. Rasterizer در عمل یک تصویر رنگی از اطلاعات هندسی و رنگها و اطلاعات تکسچر میسازد. این تصویر سپس به بافر فریم ّFrame Buffer منتقل میشود. بافر فریم قسمتی از حافظه دستگاه نمایش گرافیکی (کارت گرافیک ) میباشد. این بدین معنی است که تصویر در صفحه نمایش داده شده است. در یک سطح بالا این نمودار صحیح میباشد اما در یک سطح پایین تر قسمتهای زیاد دیگری نیز در این پروسه وجود دارد. همچنین استثنائاتی هم وجود دارد. همانطور که در نمودار هم پیداست بعضی از اطلاعات از مرحله T&L یا همان Transform & Lighting عبور نمیکنند.
در گذشته شتاب دهنده های سخت افزاری OpenGL چیزی جز fast Rasterizer نبودند. آنها تنها بخش Rasterization را شتاب میبخشیدند و پردازشگر سیستم میزبان مرحله T&L را به صورت نرم افزاری و به عنوان بخشی از pipeline انجام میداد. شتاب دهنده های با کیفیت تر (گرانتر) خودشان قسمت T&L را انجام میدادند. به این ترتیب بیشتر مراحل Pipeline در سخت افزار گرافیکی انجام میشد و گرافیک بیشتری بدست می آمد.

موفق باشی

soldier
19-08-2006, 23:32
سلام
من توي يكي از تاپيك ها آموزش اپن جي ال گذاشته بودم
كه 100 تا نمونه داشت! بريد به اون تاپيك دانلودش كنيد
اسم تاپيك هم دلفي سه بعدي هست!
ممنون

Mahmood_N
29-08-2006, 17:13
سلام ...
من يه خورده OpenGL بلیدم ...
حتما باهاتون توی این تاپیک همکاری می کنم ...
منتظر باشید ...
فعلا ...

مرد مباح
30-08-2006, 09:12
ما منتظريم.
هم آموزشتو اينجا بزار و هم اگه شد لينك فايل خودآموزتو.
ممنون

soldier
30-08-2006, 12:33
سلام
من هم دوست دارم ياد بگيرم اما اصلآ چيز جالبي نيست
علتش هم اينه كه OpenGl فقط یه پروژه هست
یعنی مثل دلفی ایکس نیست که در پروژه ات بکارش ببری
در ضمن کار باهاش سخته!
بهتره به جای OpenGL به فکر یه سیستمی باشیم مثل DelphiX
فقط دو بعدی! و برای رسم کردن object ها هم سریع عمل کنه
چون دلفی ایکس قدرت زیادی نداره! باید روی این بحث بشه
که یه کار جالبی انجام بدیم!
موفق باشید

مرد مباح
30-08-2006, 13:55
سولجر جان.
يك الگوريتم جديد پيدا كرديم كه سرعت نمايش رو بالا ميبره و بعد از تست خبرشو بهت ميدم.
از طرف ديگه OpenGL هم يك دانشه كه شايد بعدا به دردمون بخوره.
اميدوارم زودتر آموزشت رو شروع كني.

Mahmood_N
30-08-2006, 15:00
سلام ...

سلام
من هم دوست دارم ياد بگيرم اما اصلآ چيز جالبي نيست
علتش هم اينه كه OpenGl فقط یه پروژه هست
یعنی مثل دلفی ایکس نیست که در پروژه ات بکارش ببری
در ضمن کار باهاش سخته!
بهتره به جای OpenGL به فکر یه سیستمی باشیم مثل DelphiX
فقط دو بعدی! و برای رسم کردن object ها هم سریع عمل کنه
چون دلفی ایکس قدرت زیادی نداره! باید روی این بحث بشه
که یه کار جالبی انجام بدیم!
اين ها رو از كي شنيدي ... ؟
همش غلطه !!!!
OpenGL هم قدرتمنده و هم از DirectX راحت تره و هم خوانا تره ( البته نه واسه کسائی که با کامپوننت کار می کنن ) !!
DelphiX هم همون DirectX هستش ...
DirectX که فقط دوبعدی نیست !!!!
اصل کار اون روی 3D هستش ...
اکثر برنامه های 3D ساز قدیمی توشون از OpenGL استفاده شده ... ( به نظر من که فوق العادست )
دلیلی اینکه در حال حاضر تعداد زیادی برای ساخت بازی از اون استفاده نمی کنند اینه که دیگه مایکروسافت اون رو گسترش نمی ده !! و بیشتر تمرکز مایکروسافت برای گسترش DirectX هستش ...
اگه کدهای DirectX رو با OpenGL مقایسه کنی می بینی که هم خیلی کمتره و هم خیلی خوانا تره ...
البته به شرطی که برای هر دو از توابع استفاده بشه ( نه کامپوننت !! )
یکی دیگه از خوبیهای OpenGL اینه که می تونی اون رو فارسی بکنی !!!

اميدوارم زودتر آموزشت رو شروع كني.
چشم ، به زودی شروع می کنم ...
پیغامم بهت رسید ؟
فعلا ...
موفق باشید ...

amin a.^2
30-08-2006, 16:00
سلام منم خیلی خوشم میاد بدونم حالا چه فقط یه پروژه باشه چه یه کامپوننت بزرگ

soldier
30-08-2006, 16:10
سلام
اول چرا اين همه قاتي نوشتي
دوم اين رو خودم تست كردم!
به جاي اپن جي ال اگر مي توني يه آموزش ديركت ايكس بزار
در ضمن من گفتم دو بعدي باشه راحت تره! چون ما دو بعد رو نياز داريم!
پس نياز داريم كه از قسمت هاي دو بعدي استفاده كنيم!
اگر بخواهيد از سيستم سه بعد استفاده كنيم ! (كه نياز نداريم) ! كارمون رو سخت كرديم
چون ما فعلآ فقط دو بعدي نياز داريم!

ام بدم نمياد چيز جديدي ياد بگيرم!
پس يعني منتظر آموزش هستيم!

Mahmood_N
30-08-2006, 16:16
سلام
از امشب شروع مي كنم ...
توي يه تاپيك جديد ..
موفق باشيد ...

soldier
30-08-2006, 21:18
سلام
خيلي ممنون! محمود جان

ehsan_vesal
11-03-2009, 09:32
سلام
من چطوری می تونم openGl رو فارسی کنم من به glut دسترسی ندارم جون در سیستم عامل ubuntu کار میکنم .

digizack
12-11-2009, 17:12
سلام دوستان
هر کی میاد اینجا لطفا هر طوری که می تونه جوابمو بده .مهم نیست چقدر درست بگید فقط اگه سایتی چیزی بلدید یا نمی دونم خلاصه هر راهنمایی که می تونید بکنید.مشکل من اینه که دارم با OpenGL برنامه می نویسم ولی نمی دونم چطور باید ی استیکو بهش ربط بدم.در واقع می خوام و مجبورم هر طور شده تو اپن جی ال با جوی استیک کار کنم.کمک کنید لطفا !!!:37: