الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الضباب في OpenGL.. موضوع خفيف

مغلق
بدأه Abdullah.Alshammeri في 8 فبراير 2006 · 1 رد · 3,693 مشاهدة · في OpenGL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم :

الضباب .

كيف نسوي ضباب في OPENGL ..

المسألة سهلة جدا .. وبما أنها سهلة فسأكتب هذا الموضوع :P ان شاء الله .

نحتاج الى ثلاث معلومات ..

لون الضباب .. هل تريده ابيض كالمعتاد .. او... حسب احداث لعبتك طيبة الذكر .

كثافة الضباب ..

مدى الضباب ..

نوع الضباب ..ويوجد عدة انواع يقدمها لك OPENGL على طبق من ذهب .

تخيل مدى سهولة OPENGL ... تخيل ..

هاه تخيلت ...

اذا كنت تتوقع ان الكود ستمية وسبع طعش سطر .. لاننا نتحدث عن ضباب ..

فانت غلطان .. لان الكود .. كله ربع سطر .

glFogf

اذا كنت تريد تمرير قيمة لها ,,

glFogfv

اذا كنت تريد تمرير مصفوفة لها مثل مصفوفة ألوان ...

خلونا نشوف الكود على طول

/*1*/	float  fog_colour[] = {0.6f,0.58f,0.79f,0.0f};

/*2*/	void Init()
/*3*/	{
/*4*/	glClearColor(0.6f,0.58f,0.79f,0.0f);  

/*5*/	glFogf (GL_FOG_START,  0.3f);
/*6*/	glFogf (GL_FOG_END,    200);
/*7*/	glFogfv(GL_FOG_COLOR,  fog_colour);      
/*8*/	glFogi (GL_FOG_MODE,   GL_EXP);
/*9*/	glFogf (GL_FOG_DENSITY,0.05f);
/*10*/	// enable the fog
/*11*/	glEnable(GL_FOG);

/*12*/	glEnable(GL_DEPTH_TEST);
/*13*/	glEnable(GL_LIGHT0);
/*14*/	glEnable(GL_LIGHTING);
/*15*/	}

في السطر الاول أعلنا عن مصفوفة .. ستحمل لون الضباب ..

اخترنا لون ابيض مائل الى البنفسجي .. ( ليس انا من اختار هذا اللون انما لقيته في احد الاكواد :) )

في السطر الرابع جعلنا لون الخلفية ل opengl هي نفسها لون الضباب وهذا مهم جدا ..حتى نعطي للمشهد واقعية .

في السطر الخامس والسادس حددنا مدى الضباب.

في السطر السابع استدعينا الدالة glFogfv .. لاحظ حرف v وهذا يعني اننا سنمرر لها مصفوفة ..

في البارمتر الاول مررنا لها الثابث : GL_FOG_COLOR . يعني لون الضباب

وفي البامتر الثاني مررنا له اللون الذي نريده .. وهو عنوان المصفوفة السابقة ,

حقيقة .. تحتاج الى تغيير في القيم لتجد الفرق ولتفهم ..

جرب ان تجعل المدى البعيد 30 ...

والمدى القريب .. 1 .. فهذا جيد . . . أو على حسب رغبتك .

في السطر الثامن نوع الضباب .. GL_FOG_MODE ..

ويأخذ

GL_EXP او GL_EXP2 او GL_LINEAR

الان اخترنا الاولى , , , وسنفصل لاحقا ..

في السطر التاسع حددنا كثافة الضباب .. GL_FOG_DENSITY ..

طبعا قللها قدر الامكان .. لانك اذا زودتها ما راح تشوف شيء . . .

الا اذا كانت لعبتك طيبة الذكر تتطلب ضباب كثيف :D

وفي السطر 11 فعلنا الضباب .. والسلام ..

وهذه بعض الملاحظات :

1- حاولت استخدم Blending مع الضباب .. لكن النتائج غير مرضية .. .. ..

سأبحث في هذه المشكلة .. إذا احد من الااخوان يعرف شيء عن هذه النقطة يخبرنا ..

2- GL_LINEAR هو افضل انواع الضباب .. فهو يعطيك عمق رائع ..

يعني .. اذا كنت تشاهد مجسم من بعيد .. يكون كله ضباب ..

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

بعكس .. الضباب .. GL_EXP .. فهو يملأ الشاشة بالكامل بالضباب .. ولايعطيك ذلك التصور الجذاااااااااب .

3-

glHint (GL_FOG_HINT, GL_DONT_CARE);

السطر السابق وجدته في NeHe بعد ان قمت بمراجعة درسه عن الضباب ..

هو قال لا اهتم بالFOG HINT ..

تستطيع تمرير قيم اخرى :

GL_NICEST - GL_FASTEST

لكن اذا كنت مهتما فابحث عن التفاصيل في الكتاب الاحمر ... اخوك متعاجز : ) ,,

ولكن حسب ما قرأت اليك التالي :

GL_DONT_CARE : تعني لا اهتم بنوعية الضباب .. هل هو per vertex او per pixel

per vertex

تعني لكل رأس .. يجعل OPENGL الضباب لكل رأس من الشكل .. . .

per pixel

الضباب لكل نقطة ..

GL_NICEST : الضباب لكل نقطة per pixel .. وهذا افضل .

GL_FASTEST : الضباب لكل رأس .. هذا اسرع وليس افضل .

تذكر دائما .. السرعة ستكون على حساب النتيجة الافضل .. والعكس صحيح .

5- يوجد ضباب جديد ... تلقاه في امتدادات OPENGL الجديدة ..

وهو مدعوم من اغلب كروت العرض ..

لدرجة انه مدعوم في كرت الشاشة عندي ... تخيل !!!

ابحث في Google عن

glFogCoordf

Volumetric Fog

او مباشرة اذهب الى الدرس رقم 41 من دروس Nehe

والتطبيق الصغير بالمرفقات .

والتحريك بالاسهم .. و Home - END لتحريك الكاميرا .

لكن فقط باستخدام المكتبة GLUT . . هجرنا الWIN APIs : ) ,,

fog.zip

تم تعديل هذه المشاركة بواسطة الشمري في 8 فبراير 2006 في 04:37

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#2

السلام عليكم

اخي و استاذي الفاضل ..

بصراحة انا توني مبتدي بهذا المجال ، بس اني حبيت اشكرك على جهدك و نشاطك الواضح في هذا المنتدى و الله اني ادعو لك عن ظهر غيب بكل خير .. جزاك لله خير الجزاء و كثر الله من امثالك

و من يوم و جاي سوف اكون اول المتابعين لمواضيعك .

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

هذا الموضوع مغلق.

مواضيع مشابهة