سؤال مهم جدا
اتمنى الاجابة عليه :
الـ frame buffer
ماذا يخزن؟
واين موقعه؟
لقد قرأت موضوع: كائن الذاكرة Buffer Object درس في الأوبن جي أل
ولكن لم اجد ما اطلبه
:wacko:
سؤال مهم جدا
اتمنى الاجابة عليه :
الـ frame buffer
ماذا يخزن؟
واين موقعه؟
لقد قرأت موضوع: كائن الذاكرة Buffer Object درس في الأوبن جي أل
ولكن لم اجد ما اطلبه
:wacko:
بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته
ذاكرة الإطار أو frame buffer تعمل على تخزين بيانات الصورة التي ستظهر على الشاشة و هذه الذاكرة هي المكان النهائي الذي ستمكث فيه البيانات قبل ظهورها على الشاشة , و بصيغة أخرى :
بيانات في ذاكرة النظام ram ----> المعالج لمعالجتها ---> ذاكرة الخادم vram أو الرسوميات ---> معالج الرسوميات ---> ذاكرة الإيطار ( المكان الأخير الذي تتمركز فيه البيانات النهائية و القابلة للعرض ) ---> الشاشة ( عن طريق القلب أو الرمش )
بالطبع هذا هو الطريق العام لكي تصل البيانات إلى شاشة غير أنه يتم المرور على بعض المراحل و التي تختلف حسب نوع البيانات ( صور , مجسم محسوب , من الشاشة إلى الشاشة ... إلخ)
أما موقعه بالطبع في ذاكرة بطاقة الرسوميات VRAM
و موضوع كائن الذاكرة هو أيظا جزء لا يتجزء من ذاكرة بطاقة الرسوميات و الإختلاف بين هذا و ذاكرة الإيطار هو أنه كائن الذاكرة وجد ليحل محل ذاكرة النظام RAM ( تفاديا لزمن نقل أو تحويل البيانات )
أتمنى لك التوفيق إن شاء الله
تخيل, هل سيكون مستقبل الأوبن جي أل مع البشرية هكذا

كنت قد كتبت هذا الرد قبل قراءة رد الاخ 3ds max ، ولكن لا مانع من الاضافة
بالنسبة لـ Buffer Object فهي قصة أخرى ، وتقنية جديدة نوعاً ما ، ولا أعرف عنها الكثير .
ولكن سأتكلم عن Framebuffer بمفهومه المعروف في OpenGL وليس عن الأمور الجديدة نوعاً ما مثل Frame Buffer Object .
لاأعرف ان كنت تريد شرح لـ Framebuffer اللي في بالي أو تريد شيء آخر ، بكل الأحوال كنت قد كتبت عن هذا ، وقمت الان بتنقيحه ، لعله يكون هو ما تبحث عنه ، اذا كنت تريد شيء آخر يمكن توضيح الأمر ، قد أملك مقالة عنه هنا أو هناك أيضاً :D .
في OpenGLالكلاسيكية ( النسخ التي لاتدعم المظلّلات Shaders )هناك أنبوب وهمي .. يمر من خلالها الرأس الذي سترسمه vertex .. ثم يتحول هذا الرأس وبقدرة قادر الى بكسل له لون معين .. ثم يظهر على الشاشة أمامك .
كيف حدث هذا ، لنأخذ هذا المثال البسيط :
Float x = 10 , y =10; glColor3f( 1, 0 , 0); glBegin(GL_POINTS); glVertex2f( x , y ); glEnd();
· هذا مثال بسيط جداً من المفترض ان يقوم برسم نقطة بلون أحمر على النافذة ، من هنا ستبدأ رحله هذا الرأس ( حتى الان ليس بيكسل بل هو رأس ، فلو كان الشكل المرسوم مثلاً فانه سيحوي على ثلاثة رؤوس .. ثم سيتم ملء المثلث بلون معين ليتحول الشكل الى مجموعة ضخمة من البكسلات التي تشكل المثلث ).
· يبدأ هذا الرأس vertex بالمرور على مجموعة من المصفوفات التي تتحكم بموقع الرأس ،ومجموعة من العمليات الأخرى التي هدفها النهائي أن تحدد موقع هذا الرأس Vertex ، وهل هو سيظهر على منطقة الرؤية في الشاشة أم لا ، أهم العمليات ( وليس كلها ) :
o المرور على مصفوفة Model-View : هذه المصفوفة تتكون من مصفوفتين مدمجتين وهما Model التي نستخدمها لنزيح أو ندوّر أو نحجّم هذا الرأس ، و View التي نستخدمها للتحكم في الكاميرا المستخدمة .
o المرور على المصفوفة Projection Matrix : التي تحدد طريقة الاسقاط المستخدمة ، هل هو اسقاط منظوري ،للتطبيقات الثلاثية البعد أم اسقاط عمودي للتطبيقات الثنائية البعد أم غير ذلك ..
o القيام بعملية قص أو قطع لأي راس يكون خارج منطقة الرسم – منفذ الرؤية –
o عملية mapping أو تحويل من احداثيات العالم الافتراضي الذييدور في فلكه هذا الرأس Vertex الى الاحداثيات الواقعية ، هنا تظهر أهمية تحديد View port بشكل مناسب .
o في خلال هذه المراحل ، يتم تجميع هذه الرؤوس لتشكل الأشكال النهائية ( مثلث – نقطة – مربع ..الخ ) .
· العمليات السابقة تختص بمعالجة كل رأس لوحده ، أي أنك أمام مسار يهتم بمعالجة الرؤوس .
· في النهاية وبعد عمليات هنا وهناك ، نأتي لمرحلة تحويل البيانات الى صورة تظهر على النافذة ، وهنا يأتي دور كل Buffer ، حيث هناك أربعة أنواع من Buffers وهي
Color Buffer : عبارة عن مصفوفة ( تخيل أنها مستطيلة الشكل أي مصفوفة ثنائية البعد) ، تحتوي على مجموعة من العناصر ، كل عنصر عبارة عن بكسل معين، مثلاً .. العنصر رقم ( 10 – 10 ) سيكون ذو لو أحمر
StencilBuffer : يستخدم لحجب مناطق معينة من أن يتم رسمها وتمرر مناطق أخرى ( تستخدم في تأثيرات معينة مثل الانعكاس ) .
Depth Buffer : وهو مثل Color Buffer ولكن كل عنصر يحوي على قيمة واحدة تمثل عمق هذاالعنصر ، هل سيظهر على النافذة أم لا؟ نستخدم هذا السطح في التطبيقات الثلاثيةالبعد .
Accumulationbuffer : غير مهم .. ويستخدم في تأثيرات معينة مثل Blur .
· الان كل تلك الأسطح Buffers تصب في مصب نهائي اسمه Framebuffer ، الذي يقرأ قيمة كل عنصر من كل Buffer ويقوم بعمليات معينة تحدد لون و امكانية ظهور هذا العنصر من عدمه .
السيناريو السابق مجرد مثال عام لتوضيح الفكرة . حيث لايمكن فهم Framebuffer لوحده ولا فائدة من ذلك قبل أن تعرف العمليات السابقة التي أنتجت هذا Framebuffer .
تم تعديل هذه المشاركة بواسطة الشمري في 5 فبراير 2010 في 20:23
تطبيق طمأنينة ، نسخة بيتا على أندرويد
عبدالله الشمّري - Al-Shammari
twitter @abshammeri
abshammeri AT gmail.com
github : abshammeri
جزاكم الله كل خير كفيتو ووفيتو
كما قال الاخ 3ds max .. هو المكان في ذاكرة كرت الشاشة اللذي نضع فيه الصورة اللتي نريد عرضها على الشاشة
كان عندي موضوع كتبته قبل عدة سنوات يحاول شرح بعض من الافكار المتعلقة بالموضوع، ارجو ان يكون مفيدا /index.php?showtopic=83756