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

سؤال دايركت اكس

مغلق
بدأه majnona_ في 11 مايو 2005 · 10 رد · 2,569 مشاهدة · في DirectX
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

......

انا بصراحه لدي سؤال حول انشاء مرائه بالدايركت اكس

سؤالي هو بعض الملاحظات التي لم افهمها وارجو شرحها لي ... لقد بحث بال DirectX Documentation

ولم اجد اجابه كافيه ولذلك ارجو ان تقومو بالاجابه على هذه الملاحظات

Device->SetRenderState(D3DRS STENCILENABLE,   true);
Device->SetRenderState(D3DRS_STENCILFUNC,     D3DCMP ALWAYS);
Device->SetRenderState(D3DRS_STENCILREF,      0x1);
Device->SetRenderState(D3DRS STENCILMASK,     0xffffffff);
Device->SetRenderState(D3DRS_STENCILWRITEMASK,0xffffffff);
Device->SetRenderState(D3DRS STENCILZFAIL,    D3DSTENCILOP KEEP);
Device->SetRenderState(D3DRS STENCILFAIL,     D3DSTENCILOP KEEP);
Device->SetRenderState(D3DRS_STENCILPASS,     D3DSTENCILOP_REPLACE);

Device->SetRenderState(D3DRS ZWRITEENABLE, false);
Device->SetRenderState(D3DRS ALPHABLENDENABLE, true);
Device->SetRenderState(D3DRS SRCBLEND,  D3DBLEND ZERO);
Device->SetRenderState(D3DRS DESTBLEND, D3DBLEND ONE);

Device->SetRenderState(D3DRS STENCILFUNC, D3DCMP EQUAL);
Device->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_KEEP);

Device->SetRenderState(D3DRS SRCBLEND, D3DBLEND DESTCOLOR);
Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ZERO);
Device->SetRenderState(D3DRS CULLMODE, D3DCULL CW);

Device->SetRenderState(D3DRS ALPHABLENDENABLE, false);
Device->SetRenderState( D3DRS STENCILENABLE, false);
Device->SetRenderState(D3DRS CULLMODE, D3DCULL CCW);

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

وشكرا ....

#2

هذه دالة واحدة ..

SetRenderState

تقوم بوضع بعض الخيارات للـ rendering ..

الخيارات كلها موجودة هنا ..

http://msdn.microsoft.com/library/default....erstatetype.asp

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

و الله أعلم.

#3

ممكن اعرف لما طريقتي خطا؟؟

هل علي ان لا افهم شيئا واسكت ؟؟

ام ان اقفز عن الاملاحظات التي لا افهمها... انت في كل مره تقول لي طريقتك خطا ... اذن ممكن تخبرني عن الطريقه الصحيحه لو سمحت ....

طريقتي:- انا لا اعتبرها طريقه بل تحدث بدون ما اشعر .. انا اقوم بقراءة الكتب اما الدوال والملاحظات التي لا افهمها فابحث عنها في sdk وان لم افهمها اضعها هنا ليستفيد منها البقيه واستفيد منها انا . باجاباتكم الملائمه ..

شكرا لك اخي على الموقع ولكن صدقني لقد قرات ما بداخل هذا الموقع من شرح ولكني لم افهم 100% ولا حتى 50% لانه يعتبر مرجع وليس كتاب يشرح للمبتدء .. ان sdk or msdn web مجرد مراجع وليست بكتاب

وشكرا..........

#4

لا اظن اني قلت لك ان طريقتك خطأ قبل الان ..

على كل حال, انا اصلا لااعرف طريقتك بالظبط, لكني اشعر انك تحاول اخذ مثال ثم تقرأه و تفسره سطرا سطرا .. و اذا لم تفهم سطرا ما فغنك تبحث عنه في كل مكان, و لا تتركه حتى تعرف معناه ...

اتدري لماذا لا تستطيع فهم المرجع؟ لان تلك الطريقة غلط.

انا برأيي ان الطريقة الصحيحة هي انك تحاول فهم الية عمل الدايركت اكس .. ان تفهم ماذا يعني device؟ و لماذا تم اختراع هذا المفهوم؟ و ما المقصود به؟ و ما اللذي يمكن ان نفعل به؟

و طبعا لازم هذا الفهم يكون في سياق اوسع و هو كما قلت الالية العامة لعمل الدايركت اكس.

بعدين تصير التفاصيل سهلة, لانك تعرف الصورة العامة, فتستطيع بسهولة فهم التفاصيل لان كل شيء سيكون متصل ببعضه.

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

في البداية لا بد انك تهمل بعض التفاصيل, لانك لا تملك معلومات كافية لفهمها بعد ..

اظن كلنا عندما بدأنا البرمجة لم نكن نفهم كل شي .. لم نكن نعرف لماذا يجب ان نضع

#include <iostream>
using namespace std;

لكنا كنا نكتبها و خلص ..

و لم نكن نعرف لماذا يجب ان نكتب

int main()
{


    return 0;
}

لكننا كنا نكتبها ..

و لو حاولنا ان نفهمها لما فهمنا .. لماذا؟ لاننا لا نملك معلومات كافية .. لا توجد لدينا صورة عامة.

يعني, لماذا نحط هذا الكود؟ لأن البرنامج يبدأ من الـ main function.

هذا هو الجواب .. تمام؟

و لكن, نحن مبتدئين و لا نعرف ما معنى الـ function بعد, لذلك لن نفهم شيئا من ذلك الجواب.

و كذلك, ما هذه الاقواس؟ و لماذا return 0؟؟؟؟ الا يستطيعون ان يبسطوا الموضوع؟

طبعا نحن لا نعرف الفنكشنز .. لهذا لا نعرف ما الفائدة من وضع اقواس فارغة .. او ما الفائدة من كلمة int .. الخ الخ.

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

مثل قطعة puzzle, لو نظرت الى كل قطعة على حدة فلن تفهم شيئا .. و لكن اذا نظرت الى الصورة ككل, ثم قمت ببعثرة القطع, فتستطيع تمييز القطع المختلفة, لانك تعرف الصورة العامة, و تستطيع الربط بين المفاهيم العامة و التفاصيل.

اقتباس
شكرا لك اخي على الموقع ولكن صدقني لقد قرات ما بداخل هذا الموقع من شرح ولكني لم افهم 100% ولا حتى 50% لانه يعتبر مرجع وليس كتاب يشرح للمبتدء .. ان sdk or msdn web مجرد مراجع وليست بكتاب

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

لهذا هذه الطريقة لا تنفع, طريقة ان تقرأ الدوال كلها و تحاول معرفة ما تفعله كل واحدة بالظبط.

يعني انت يا اخي تسأل عن بعض الدوال, و الحقيقة لا اعرف اي نوع من الاجابة تنتظر؟ الاجابة الوحيدة اللتي يمكن ان نقدمها لك هي الاجابة الموجودة في الـ msdn, لانه فعلا هو الاجابة على سؤالك.

ما هو وظيفة الدالة؟ وظيفتها هي ما يقوله الـ msdn.

و هذا الجواب طبعا لن يفيدك ..

و لكن هذا هو الجواب الوحيد!

فإذا, السؤال نفسه لا يفيدك ..

انت لا تحتاج معرفة عمل الدالة, انت تحتاج معرفة السياق العام لعمل الدالة, و لماذا احتجنا اليها في هذا السياق ..

انا اعتقد انك اذا احتجت الى ان تسأل اسئلة مثل هذه, فهذا يعني ان الكتاب اللذي بين يديك لا يقدم شرحا كافيا يجعلك تفهم الية العمل دون الحاجة لمعرفة كل التفاصيل.

لذلك خليني اسالك, ما هو الكتاب اللذي تقرأه الان؟

و انا بانتظار اجابتك.

#5

اخي لقد قرات حتى الان هذا الاقتباس من ردك

hasan_aljudy كتب:
لا اظن اني قلت لك ان طريقتك خطأ قبل الان ..

على كل حال, انا اصلا لااعرف طريقتك بالظبط, لكني اشعر انك تحاول اخذ مثال ثم تقرأه و تفسره سطرا سطرا .. و اذا لم تفهم سطرا ما فغنك تبحث عنه في كل مكان, و لا تتركه حتى تعرف معناه ...

اتدري لماذا لا تستطيع فهم المرجع؟ لان تلك الطريقة غلط.

انا برأيي ان الطريقة الصحيحة هي انك تحاول فهم الية عمل الدايركت اكس .. ان تفهم ماذا يعني device؟ و لماذا تم اختراع هذا المفهوم؟ و ما المقصود به؟ و ما اللذي يمكن ان نفعل به؟

و طبعا لازم هذا الفهم يكون في سياق اوسع و هو كما قلت الالية العامة لعمل الدايركت اكس.

انا اتبع الطريقه الاولى بعد الطريقه الثانيه اي عندما افهم ماذا يعني device و color و vertex وووو(افهم هذه الاشياء من الكتب وليس الامثله) اذهب الى sdk وابحث عن بعض الامثله التي مضمونها عن المواضيع التي قراتها بالكتاب واقوم بفهم الكود سطر سطر وان لم افهم اي داله اقوم بالبحث عنها .....

هذه هي طريقتي ولا اظن ان بها اي خطا

وشكرا لك جزيل الشكر على هذه الملاحظه فبردك اثبت لي ان طريقتي صحيحه وذلك لاني استعمل الطريقتين وواحده منهن هي الافضل فماذا لو استعملت الاثنتين ( اكيد سيكون الافضل)

ملاحظه:- لو كنت ساعتمد على الامثله فلن افهم شيئا ابدا ابدا .. ولذلك اعتمد على الطريقتين

وشكرا

#6

بالنسبه للكتاب فهو يشرح عمل الداله وسياقها .. ولكن انت لم تفهم قصدي

يا اخي عندما وضعت الدوال لم اقل انني لم افهمها بل اعرف انها تحدد حالة الريندير ... ولكني اردت معرفة الحالات التي استخدمنها ...

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

وشكرا....

#7

السلام عليكم .....

بالنسبه لهذه الداله فهي عباره عن داله تحدد حالة Render وهنا اردنا ان نقوم بانشاء مراءه ومن اجل انشاء المراءه نحن بحاجه لهذه الحالات .. تستطيع مراجعة الحالات في DirectX Documentation

اي استفسار انا جاهز ....

وشكرا .

* لا مستحيل في برمجة الالعاب *

** بالنسبه لدروس الرياضيات والفيزياء والسي++ والدايركت اكس فقد قمت في موقعنا بالبدأ من الصفر وحتى اتقان الاساسيات ( يعني اساسيات كل من سي++ ودايركت اكس وفيزياء ورياضيات) فمن يريد البدأ معنا فلينضم **

** الموقع الخاص للطريق حول برمجة الالعاب www.gamedev4arab.44w.com **

#8

زين انا كيف اعرف ما اللذي تعرفه و ما اللذي لا تعرفه؟ في هذه الحالة طبيعي اني اعطيك جواب لا يريحك .. لاني لست متأكدا بالظبط ما اللذي تريده.

اقتباس
انا افهم 100% الداله اما بالنسبه للحالات فلا افهمها كلها... اخي انا وضعت اليوم ما يقارب 10 حالات ولكني فاهم الفكره العامه .. والدليل هو انني فاهم حالات اخرى فهذا يدل ان المشكله في هذه الحالات ولذلك طلبت شرحها كي افهمها.....

اذا كان هذا هو الوضع, فالـ msdn يجب ان يكون كافيا لهذا الغرض ..

مثلا, D3DRS_STENCILENABLE, الـ msdn يقول:

TRUE to enable stenciling, or FALSE to disable stenciling. The default value is FALSE. For more information, see Stencil Buffer Techniques.

طبعا انا لا اعرف معنى stenciling, و لكن ما تقوله الجملة ان البارامتر الثاني اما ان يكون true لتفعيل هذه الشغلة, او false لابطالها.

بالنسبة لمعنى الكلمة, فالقاموس يقول:

"‏(الاسم) صفيحه مخرمه للطبع أو الرسم (فعل) يستنسخ‏ "

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

و اذا شعرت انك لم تفهم المصطلح, فكما قلت لك, تستطيع ان تهمله لانك ربما لا تملك المعلومات الكافية لتفهم معناه في هذه اللحظة.

انا اقللك من تجربتي الشخصية, عندما تستخدم مكتبة معينة, لا داعي ان تعرف كل شيء عنها, صدقني.

و لكن كلما احتجت شيء معين, ابحث عنه.

يعني انت الان فاهم الدالة زين, لكن اللي مو فاهمه هو البارامترات اللي تروحلها ..

طيب, مش لازم تعرف كل البارامترات,

عموما انا لا اعرف, ربما البارامترات الخاصة بهذه الدالة مهمة, لكني من وجهة نظري ان الواحد لا يقف عندها, بل يكمل, لانك لو وقفت عند كل نقطة, فستتأخر كثيرا.

#9

صحيح ان msdn تعطي شرح ممتاز للحالات ولكن المكله هنا انها تقول اذا كان true فافعل كذا كذا اما اذا كانت الحاله false فلا تفعل كذا وكذا

ولكن مشكلة المبتدأ وحتى المحترف انه لا يريد معرفة هذه المعلومات بل يريد ان يعرف ما هو " كذا وكذا " ...

اظن انني وضحت لك اخي حسن ماذا يريد صاحب الموضوع وانت بدورك قم بالاجابه ان اردت

وشكرا

* لا مستحيل في برمجة الالعاب *

** بالنسبه لدروس الرياضيات والفيزياء والسي++ والدايركت اكس فقد قمت في موقعنا بالبدأ من الصفر وحتى اتقان الاساسيات ( يعني اساسيات كل من سي++ ودايركت اكس وفيزياء ورياضيات) فمن يريد البدأ معنا فلينضم **

** الموقع الخاص للطريق حول برمجة الالعاب www.gamedev4arab.44w.com **

#10

كما قلت انا لا اعرف معنى النمصطلح المستخدم .. و اعتقد ان هذا المصطلح ليس خاصا فقط بالـ direct x بل هو مصطلح متعلق بالثريدي ...

#11

بشكل سريع فقط سأوضح بعض إستخدامات هذه الدوال :

Device->SetRenderState(D3DRS STENCILENABLE,   true);

ال stencil هو نوع من أنواع ال stack buffer يستخدم لإنشاء تأثيرات إضافية على المشاهد ,

Device->SetRenderState(D3DRS ZWRITEENABLE, false);

من معناها عدم الكتابة في مكدس العمق Z Buffer وجعلها False ,

عليك أن تعرف معلومات إضافية عن مكدس العمق ,

Device->SetRenderState(D3DRS ALPHABLENDENABLE, true);
Device->SetRenderState(D3DRS SRCBLEND,  D3DBLEND ZERO);
Device->SetRenderState(D3DRS DESTBLEND, D3DBLEND ONE);

الأولى , تتيح عمليات مزج ألفا , وعنصر ألفا هو عامل الشفافية حيث الألوان 32 بت تكون RGBA red green blue Alpha , ويحدد الفا مستوى الشفافية ,

D3DRS SRCBLEND : تعني جعل لون شفافية السورس صفر , والتي تليها تحدد الهدف بشفافية كاملة ,

Device->SetRenderState(D3DRS CULLMODE, D3DCULL CW);

تحدد عامل الغربلة Culling , وهي عملية رسم وتلوين الأوجه الخلفية لكل السموت vertcies , فإما أن ترسم أو لا ,

تقريبا الباقي مكرر ,

لكن صدقني لن تفهم أي حرف مالم تبدأ واحدة واحدة , عليك بأمثلة DirectX وإقرأ أمثلة Direct3d واحدة واحدة , وحاول إقتناء كتاب عربي وإقرأه في المنزل في وقت الفراغ , أنا هنا لدي كتاب واحد فقط عربي ل Direct3d 7 !! لكن قرأته حوالي 100 مرة على الأقل وحجمه يمكن 500 صفحة , وللأسف وقتها السيدي الخا ص به ضاع مني ,

المهم ماإستفدته أنني أصبحت أعرف ماذا تعني كل هذه المصطلحات , وماتأكدت منه أكثر أن برمجة Direct3D هي معرفة كيف تبرمج كل تقنية منفصلة , وليس كيف تبرمج بشكل عام ,

يعني لو أردت تحريك جسم فقط , ماذا تفعل , 1-2-3 ,

لو أردت أن تنشيء تأثير لنار مثلا , إستخدم vertex shader مع فثءفعقث 1-2-3-4

وبهذه الطريقة في مدة طويلة من القراءة وفقط القراءة والمثابرة ليس أقل من 6 أشهر متواصلة , ستنطلق بشكل أفضل بإذن الله ,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

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

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