ورود

View Full Version : سوال: شیدر چیست؟



1485159
شنبه 10 بهمن 1388, 21:20 عصر
شیدر چیست؟
چگونه باید استفاده بشه؟
باید چه ورژنی از opengl رو داشته باشیم؟
----------------------------------------------
وقتی من دارم با یک زبان برنامه نویسی برنامه ای تحت opengl مینویسم، در واقع از کدام ورژن opengl استفاده میکنم؟
چطوری میتونم ارتقائش بدم؟ منظورم ورژنشه!
آیا من که دارم با opengl کار میکنم آیا برنامم روی کامپیوتر مقصد بدون هیچ چون و چرایی اجرا خواهد شد؟ چه محدودیت هایی داره؟
فعلا همینا...:خجالت:
ممنون.

pswin.pooya
شنبه 10 بهمن 1388, 22:00 عصر
شیدر:
برنامه ای هستش که به وسیله gpu اجرا میشه. (تقریبا همه جای نت پر از توضیحات مربوطه شده).

ورژنهای OpenGLای که برای کار با شیدرها نیاز داری:
۱. شیدرهای ARB:‌ و OpenGL 1.5
۲. شیدرهای GLSL ویرایش ۱.۰ :‌ OpenGL 1.5 به بالا همراه با الحاقی
۳. شیدرهای GLSL ویرایش ۱.۱ ( ویرایش استاندارد و مورد تایید بورد ARB‌) :‌ حداقل OpenGL2
4. شیدرهای GLSL ویرایش ۱.۳ُ‌ به بالا : OpenGL 3.x به بالا

تقریبا تمام نیازها رو ویرایش 1.1 جوابگوست به جزء‌ شیدرهای Geomtry که اونها هم تحت الحاقی کار میکنن. اما توی ویرایش 1.3 اونها جزء هسته OpenGL به شمار میرن و یه ساپورت تمام عیار ازشون میشه.

---------------------------------------------------------------------------------------------------
ویرایش OpenGL بستگی به درایور سخت افزار داره. اگر درایور رو نصب نکنین ویرایش پیش فرض OpenGL 1.2 هستش. که منسوخ شده. برای اینکه بتونین با ویرایشهای بالاتر OpenGL داخل cpp کار کنین بهتره از کتابخونه هایی نظیر glew استفاده کنین. glew رو میتونین از آدرس زیر دریافت کنید.
http://www.opengl.org/sdk/libs/GLEW/

و با استفاده از کد زیر تمام الحاقی های و ویرایش OpenGL شناسایی و نصب میشه.(شاید به جای نصب بهتره باشه بگیم آدرس اونها به توابه داده میشه ):

glewInit();

ویرایش کنونی OpenGL رو میتونین به کمک دستور زیر بگیرید:

cout << glGetString(GL_VERSION)<< endl;

---------------------------------------------------------------------------------------------------
برای اینکه بدونید از چه امکاناتی داخل شیدرها میتونید استفاده بکنید باید بدونید که شیدر مدل سخت افزار گرافیکی چیه و یا اینکه ویرایش GLSL چیه

گرفتن شیدر مدل:
http://www.opengl.org/wiki/Shading_languages:_How_to_detect_shader_model%3F

تشخیص ویرایش GLSL (فقط OpenGL 2.0+ ):

cout << glGetString(GL_SHADING_LANGUAGE_VERSION) << endl;

---------------------------------------------------------------------------------------------------
OpenGL از زبونهای شیدینگ زیر پشتیبانی میکنه:

۱. ARB (‌اسمبلی)
۲. GLSL (‌ استاندارد OpenGL برای کار با شیدرهاست)
۳. CG ( یه زبون تمام عیار که مادر GLSL و HLSL و زبونهای high level به شمار میره).

اما بین اینها داخل OpenGL از GLSL ساپورت بهتری میشه اما مزیت CG به اینه که میتونه هم برای دایرکت ایکس و هم OpenGL استفاده بشه. اما ظاهرا کامپایلر ریل تایم اون برای OpenGL داخل کارتهای گرافیکی ATI کار نمی کنه که GLSL این مشکل رو نداره و حتی اگر اون رو یاد بگیری میتونی ازش داخل سیستم های مثل iPhoneو سری جدید نوکیا استفاده کنی.

---------------------------------------------------------------------------------------------------

اگر داری یه کار تجاری میکنی در مزحله اول برو سراغ GLSL 1.1 که ساپورت بالایی رو داره فکر کنم به طور کامل از کارتهای گرافیکی سری ۶ nvidia به بالا ساپورت میشه اما اگر نه میخوای رنج محدوده ساپورت کارت گرافیکیت رو بالاتر ببری برو سراغ ARB Assembly که حتی روی ۵۲۰۰ قدیمی هم ساپورت میشه. اما هیچ وقت خودت رو محدودت به امکانات سخت افزاری یوزر نکن و همیشه یه حد حداقل رو در نظر بگیر مثلا همین GLSL 1.1 الان یه گزینه مناسب هستش و اکثر کارتهای گرافیکی (تمام کارتهای گرافیکی جدید)‌ مشتریان ساپورتش میکنن.

1485159
شنبه 10 بهمن 1388, 23:17 عصر
نسخه opengl من 1.2 هست. در حالی که من کارت گرافیک رو نصب نکردم، چون ویندوز 7 خودش کارت گرافیک رو میشناسه....
اگه من برنامه ای با این بنویسم و یوزر از ویندوز xp استفاده کنه و کارت گرافیک رو نصب نکنه(یعنی ورژن1.1) برنامه من کار نمیکنه؟

اگر داری یه کار تجاری میکنی در مزحله اول برو سراغ GLSL 1.1 که ساپورت بالایی رو داره فکر کنم به طور کامل از کارتهای گرافیکی سری ۶ nvidia به بالا ساپورت میشه اما اگر نه میخوای رنج محدوده ساپورت کارت گرافیکیت رو بالاتر ببری برو سراغ ARB Assembly که حتی روی ۵۲۰۰ قدیمی هم ساپورت میشه. اما هیچ وقت خودت رو محدودت به امکانات سخت افزاری یوزر نکن و همیشه یه حد حداقل رو در نظر بگیر مثلا همین GLSL 1.1 الان یه گزینه مناسب هستش و اکثر کارتهای گرافیکی (تمام کارتهای گرافیکی جدید)‌ مشتریان ساپورتش میکنن.
نه!!!!
من فقط میخوام یه بازی در حد gta1 ,2 بسازم که بدون هیچ چون و چرایی روی همه سیستم ها کار کنه!!
تکلیفم چیه؟
ممنون از توضیحات قشنگتون.

pswin.pooya
شنبه 10 بهمن 1388, 23:42 عصر
من فقط میخوام یه بازی در حد gta1 ,2 بسازم که بدون هیچ چون و چرایی روی همه سیستم ها کار کنه!!
تکلیفم چیه؟



تا اونجا که من میدونم بازی GTA ۱ و دو از شیدر استفاده نکرده. شما اگه از OpenGL 1.2 استفاده کنین میتونین یه بازی مثل اون بسازین.


اگر بخوای از شیدر استفاده کنی باید دور خیلی از سیستمهای قدیمی رو خط بکشی. حداقل فکر کنم باید دور کارتهای گرافیکی زیر سری ۴ و ۵ نویدیا رو باید خط بکشی و این مربوط به OpenGL و یا DirectX نیستش و توی هر دوی اونها مشترکه.
------------------------------------------------------------------------------------

حتی اگر ویندوز کارت گرافیکی شما رو بشناسه بازم باید درایور رو بگیرید و نصب کنید. البته اینم بگم تا زمانی که شما از دستور glewInit استفاده نکردین ویرایش OpenGL 1.2 برای شما برگردونده میشه و بعد از استفاده از این دستور ویرایش درست نشون داده میشه.

نصب درایور کارت گرافیکی جزء ملزومات بازیهای کامپیوتری هستش.

--------------------------------------------------------------------------------------
به تازگی یکسری از بازیهای کامپیوتری مخصوصا بازیهای دو بعدی که با XNA ساخته میشن از شیدرها استفاده میکنن!
استفاده اونها از شیدرها تنها برای یکسری از افکتهای ساده (گرافیکی) هستش که به کمک ARB ASSEMBLY هم میشه اونها رو پیاده سازی کردش. به عنوان مثال توی یه بازی من دیدم برای یه تفنگ که رعد و برق تولید می کرد از شیدر استفاده شده بود ( تولید رعدو برق) و یا با انفجار بمب داخل بازی یه موج انفجار تولید میشدش. اینها مواردی هستن که به کمک مولتی روشهای قبلی هم میشه تولیدشون کرد اما به کمک شیدرها این موردها خیلی زیبا تر میشن. مثلا به جای موج انفجار که باعث جابجایی پیکسلهای داخل موج بشه میشه از یه تکسچر استفاده کرد که مربع اون مرتبا بزرگتر میشه و یا به همین شکل میشه رعدو برق رو تولید کردش.

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

1485159
شنبه 10 بهمن 1388, 23:57 عصر
حتی اگر ویندوز کارت گرافیکی شما رو بشناسه بازم باید درایور رو بگیرید و نصب کنید. البته اینم بگم تا زمانی که شما از دستور glewInit استفاده نکردین ویرایش OpenGL 1.2 برای شما برگردونده میشه و بعد از استفاده از این دستور ویرایش درست نشون داده میشه.
من از دلفی استفاده میکنم. دلفی این تابع رو نمیشناسه! بتید کتابخونه ای رو اضافه کنم؟

1485159
یک شنبه 11 بهمن 1388, 00:15 صبح
من از دلفی استفاده میکنم. دلفی این تابع رو نمیشناسه! بتید کتابخونه ای رو اضافه کنم؟
فهمیدم.:لبخند:

seyedof
یک شنبه 11 بهمن 1388, 11:43 صبح
سلام

دلفی زبان مناسبی برای بازی نویسی نیست. ضمنا برای استفاده از شیدرها شما به یک کارت گرافیک که از خانواده Geforce3 با بالا است نیاز دارید.

ممنون علی

1485159
یک شنبه 11 بهمن 1388, 11:50 صبح
سلام

دلفی زبان مناسبی برای بازی نویسی نیست. ضمنا برای استفاده از شیدرها شما به یک کارت گرافیک که از خانواده Geforce3 با بالا است نیاز دارید.

ممنون علی
میخوام برم تو خط c++
من فقط یه چیز رو نمیفهمم!!! مثل کنه چسبیده بهم و از کلم نمیره بیرون!!!
من با opengl1.2 برنامه ای بنویسم و یوزر opengl1.1 رو داشته باشه! حالا برنامه من کار میکنه یا نه!! چرا؟
و یا بر عکس این!
ممنون.

pswin.pooya
یک شنبه 11 بهمن 1388, 13:28 عصر
میخوام برم تو خط C++‎
من فقط یه چیز رو نمیفهمم!!! مثل کنه چسبیده بهم و از کلم نمیره بیرون!!!
من با opengl1.2 برنامه ای بنویسم و یوزر opengl1.1 رو داشته باشه! حالا برنامه من کار میکنه یا نه!! چرا؟
و یا بر عکس این!
ممنون.

سلام
نه کار نمی کنه. این یه امر مسلم هستش.

شما با هر ورژنی که برنامه متون رو بنویسید (نه ورژنی که سخت افزارتون ساپورت میکنه) . یوزر باید حداقل اون ورژن رو داشته باشه.

ویندوز حداقل از OpenGL 1.2 ساپورت میکنه.

1485159
یک شنبه 11 بهمن 1388, 17:48 عصر
سلام
نه کار نمی کنه. این یه امر مسلم هستش.

شما با هر ورژنی که برنامه متون رو بنویسید (نه ورژنی که سخت افزارتون ساپورت میکنه) . یوزر باید حداقل اون ورژن رو داشته باشه.

ویندوز حداقل از OpenGL 1.2 ساپورت میکنه.
یعنی من اگه با 1.2 بنویسم روی همهی ویندوز ها کار میکنه؟
ممنون.