احمد صالح

مرجع اسئلة الدايركت اكس

21 ردود في هذا الموضوع

س. ما هو الدايركت اكس DirectX و OpenGL-AL ؟

دالدايركت اكس ـ OpenGL-Al هما مكتبتان لبرمجة الرسومات مثل برامج الجرافيكس " الماكس و غيره " و الالعاب .

س. اين يوجد الدايركت اكس و OpenGL ؟

الدايركت اكس يوجد مع مجموعة للمتطورين تسمي DirectX SDK تستطيع إيجادها في موقع ميكروسوفت

www.microsoft.com

OpenGL يوجد علي شكل مكتبة في موقع www.opengl.org

س. ما معني DirectX و OpenGL ؟

X تستخدمها غالباً ميكروسوفت للاشارة إلي عدد او إصدار فمثلاً في XBOX و ملفات التعاريف VxD و اخيراً DirectX .

دايركت اكس يحتوي علي العديد من المكتبات التي تفيد في :

برمجة الرسومات

برمجة الاصوات

برمجة الشبكات

برمجة التحكم الداخلي " لوحة المفاتيج ، الماوس ، العصا ..الخ "

برمجة الوسائط المتعددة " مثل برنامج winamp .

ما معني كلمة Direct ?

استخمت ميكروسوفت في البداية الاسم GameSDK مكتبة الالعاب للاشارة إلي مكتبة لبرمجة الالعاب علي نظام الويندوز و عندما ظهرت فكرة ميكروسوفت في التحفيز علي انتقال مبرمجي الدوس إلي الويندوز حيث كان "الوصول" إلي العتاد صعب جداً و يحتاج كتابة اكواد كبيرة " إن عملت علي الدوس فستعرف ذلك فكان هناك مكتبات مثل clanlib للصوتيات ...ألخ " فبالتالي سمت ميكروسوفت المكتبة GameSDK لتوضيح عملية الدايركت اكس في الوصول " مباشرة" إلي العتاد بدون عناء Direct == مباشرة .

ما معني OpenGL مكتبة الرسومات المفتوحة المصدر Open Graphics Library

س. ام معني ذلك ان مكتبة OpenGL لا تدعم الصوتيات ؟

بلي ، فهي الان تدعم الصوت بمكتبة الصوتيات المفتوحة المصدر OpenAL .

س. و ماذا عن الادخال و الشبكات ؟

غالباً Open تستعير هذه المكونات من الدايركت اكس .

ما هي البرامج المساعدة لكي ابرمج العاب ؟

بالاضافة إلي مكتبتي DirectX او OpenGL

يجب استخدام التالي

برنامج مثل الفيجول سى ++ لترجمة الاكواد

او الفيجول بيسك .

برنامج لرسم الرسومات الثلاثية ، ثنائية الابعاد .

1. الماكس ، المايا ، سوفت ايميج

2. الفوتوشوب ، كوريل درو ، بينت شوب

برامج للصوتيات

sound forge سوند فورج .

ماذا احتاجة من علوم الحاسب لبرمجة الالعاب ؟

و الله الكلام كثير في هذا السؤال فانت تحتاج إلي اتقان علوم كثيرة جداً لمعرفة هذا العلم .. سوف اذكر بالقدر الكافي .. " كل ما مكتوب هنا يمكن البحث فيه في جوجل فهو يعتبر كخطة " .

في المرحلة الاولي كبمتديء

1. تعلم مبادىء الحاسب و فهم العمليات المنطقية و نظم الاعداد و مبادىء تصميم برامج صغيرة .

http://www.math.grin.edu/~rebelsky/...ent-binary.html

2. تعلم مبادىء البرمجة الهيكلية structure programming

بتعلم لغة السي

www.cprogramming.com

3. تعلم هياكل البيانات و المعلومات و قواعد البيانات data structures

مهمة جداًً !!

http://courses.cs.vt.edu/csonline/D...ons/Lesson.html

http://www.gamedev.net/reference/list.asp?categoryid=25

مواضيع ممتازة لك .

4. تعلم لغة السى ++

www.cplusplus.com

مرحلة متوسطة

تعلم الرياضيات الثلاثية الابعاد و الفيزياء

http://www.gamedev.net/reference/list.asp?categoryid=28

جميع ما تحتاجه في الرياضة و الفيزياء في هذه المرحلة .

تعلم الدايركت اكس

http://www.gamedev.net/reference/list.asp?categoryid=24

__________________

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

لدي مشكله حول كتابة كود دايركت اكس

حيث انني عندما اكتبه تاتني الرساله التاليه

3445.obj : error LNK2001: unresolved external symbol [email protected]
3445.obj : error LNK2001: unresolved external symbol [email protected]
3445.obj : error LNK2001: unresolved external symbol [email protected]
3445.obj : error LNK2001: unresolved external symbol [email protected]
3445.obj : error LNK2001: unresolved external symbol [email protected]
Debug/453.exe : fatal error LNK1120: 5 unresolved externals
Error executing link.exe.

34.obj : error LNK2001: unresolved external symbol [email protected]
Debug/342.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

الاجابة :

هذه مشكلة في ربط مشروعك بمكتبات الدايركت اكس و التي امتدادها lib. و الموجودة في مكتبة التطوير DXSDK .

في مترجمك قم بإضافة الملفات

d3d9.lib بها دوال الوصول إلي كارت الشاشة LPD3DEVICE لاحظ استخدام كلمة الوصول إي هناك مؤشر و من ثم الكلمة LP و هي اختصار Long Pointer اي مؤشر من نوع Long   . 
d3dx9.lib  بها دوال مساعدة " دوال العمليات الرياضية + تحميل ملفات X. + التحكم في الكاميرا ... "
dinput9.lib  بها دوال الادخال
dsound9.lib بها دوال الصوتيات
winmm.lib بها دوال ملتميديا الويندوز مثلا PlayWav() و الدالة timeGetTime ..إلخ

1- ما هو matrix وما علاقته ب Rotations ؟؟؟

المصفوفات - Matrices هي من احد الابواب الرياضية للجبر الخطي Linear Algebra و هي عبارة عن مصفوفة من الارقام ليس لها ناتج علي كس المحدد Determinate الذي ينتج رقم ! " محدد المصفوفة " .

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

3×3 - اي ثلاث اعمدة و ثلاث صفوف - تسمي مصفوفة مربعة

مصفوفة الوحدة Identity Matrix - Unit Matrix و هي تشبة الرقم 1 في الرياضيات اي حاجه فيها بنفسها " تُستخدم بشدة ! "

تخيل المصفوفات كانها المصفوفات في السي Arrays و علي فكرة هذا التخيل صحيح 100% !!

 
int array[3][3]
اي مصفوفة 3 اعداد صحيحة في 3 اعداد صحيحة

عمليات المصفوفات الهندسية

1. الازاحة Translating إزاحة نقطة من نقطة " يعني زحت اللاعب إلي الامام يعني " زحت البعد ع z عدد من الوحدات " .

2. التكبير Scaling تكبير نقطة " ابعادها " . " يعني كبرت حجم الشخصية " بعد الالعاب القديمة كانت تستخدمها لتغير من الشخصيات ..

3. الدوران Rotating دوران نقطة " طبعاً انت دورت نقطة يعني دورت شخصية ، يعني دورت كاميرا لليمين .

4. الانعكاس Reflection ممكن تعكس بيها مجسم شخصيتك موجودة في D3DX .

التطبيقات من واقع الخبرة

1. برمجة الالعاب ، برمجة الجرافيكس لبرامج الرسومات

2. الالكترونيات

3. برامج الجدوال الحسابيه

معادلات إزاحة النقطة العادية

Xnew القيمة الجديدة ،  Xold القيمة القديمة ، dx مقدار الازاحة 
Xnew=Xold+dx
Ynew=Yold+dy
Znew=Znew+dz
معادلات الدوران العادية
باستخدام الاحداثات القطبية Polar Co-ordinates
x=r*cos(theta)
y=r*sin(theta)
z=z
هي theta هي الزواية التي ستدورها مقدار الدوران

معادلات تكبير نقطة
Xnew=Xold*sx
Ynew=Yold*sy
Znew=Zold*sz
sz مقدار التكبير

[COLOR=red]أ- هنا في هذا الكود استعملنا &matWorld في الداله D3DXMatrixRotationY ولكن لماذا بدأ المثلث بالدوران
ما علاقة المثلث ب &matWorld انها مجرد تعريف D3DXMATRIX
ب- ممكن شرح اول برامتر في الداله SetTransform والذي هو D3DTS_WORLD ا معناه ولماذا نحتاجه وما هو البديل له ؟؟[/COLOR]

D3DXMATRIX matWorld;

D3DXMatrixRotationY( &matWorld, timeGetTime()/500.0f );

g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

اول سؤال في المرة القادمة ... هناك اساسيات مثل المصفوفات

هنا قام بتعريف مصفوفة للعالم تحوي جميع المعلومات الرقمية به " في المرة القادمة " .

المرة القادمة نكتب اساسيات المحاكاة ..

post-40521-1114522713_thumb.jpg

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

تطبيق

post-40521-1114523371_thumb.jpg

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

رائع يا خبيرنا..

استفدت كثيرا من شرحك الواضح للتحريك والدوران والتكبير...

واعتقد نفس الفكرة تطبق على OPENGL

-----

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بلي ،

نفس الفكرة تتطبق علي OpenGL و علي البيسك و علي كله

كلها نظريات واحدة و لكن الفرق في " سرعة التنفيذ " !

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

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

http://www.math.grin.edu/~rebelsky/...ent-binary.html

ولا اعرف من اين اصل لما قلت..

فياليت تعيد كتابه الرابط.

مشكور

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

كلها نظريات واحدة و لكن الفرق في " سرعة التنفيذ " !

نعم شيء قرأته سابقا وكتبت عنه في مقالة DirectX و OpenGL السابقة , أن سرعة التنفيذ مرهونة بدعم العتاد hardware للميزة في المحرك سواء DirectX أو openGL , فمثلا ال extensions في OpenGL , لن تعمل ميزاتها في أغلب بطاقات العرض هذه الأيام ,

لكن لاأظن أن هناك فرق في الأداء في مجرى التحويل والإضاءة الأساسي , مارأيكم ؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اكون كاذب عليك إن اجبتك بان GPU هو المسئول الاول او CPU ...

لان هناك خفايا في الدايركت اكس ...

و لكن من خلال الخبرة في التعامل مع الهاردوير

استطيع ان اخمن ان مجري التحويلات و الاضاءة علي العتاد " GPU + CPU "

تم تعديل بواسطه احمد صالح
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

ممكن شرح يعض هذه الاكواد عن الضوء في الدايركت اكس

   for( DWORD i=0; i<50; i++ )
   {
       FLOAT theta = (2*D3DX_PI*i)/(50-1);
       pVertices[2*i+0].position = D3DXVECTOR3( sinf(theta),-1.0f, cosf(theta) );
       pVertices[2*i+0].normal   = D3DXVECTOR3( sinf(theta), 0.0f, cosf(theta) );
       pVertices[2*i+1].position = D3DXVECTOR3( sinf(theta), 1.0f, cosf(theta) );
       pVertices[2*i+1].normal   = D3DXVECTOR3( sinf(theta), 0.0f, cosf(theta) );
   }

و

struct CUSTOMVERTEX
{
   D3DXVECTOR3 position; // The 3D position for the vertex
   D3DXVECTOR3 normal;   // The surface normal for the vertex
};

اؤجو ان يكون شرح جيد وشكرا ..........

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

 1. for( DWORD i=0; i<50; i++ )
  {  
   2.   FLOAT theta = (2*D3DX_PI*i)/(50-1);  
     3. pVertices[2*i+0].position = D3DXVECTOR3( sinf(theta),-1.0f, cosf(theta) );
    4. pVertices[2*i+0].normal   = D3DXVECTOR3( sinf(theta), 0.0f, cosf(theta) );
      pVertices[2*i+1].position = D3DXVECTOR3( sinf(theta), 1.0f, cosf(theta) );
      pVertices[2*i+1].normal   = D3DXVECTOR3( sinf(theta), 0.0f, cosf(theta) );
  }

السطر 1. هو عبارة عن عداد من صفر إلي 50 ( 0 ، 1 ، 2 .. )

2. D3DX_PI هو ثابت في الرياضيات 3.14

3. عرف متغير اسمه زيتا يساوي ضعف الباي * العداد ( 0 مرة ، 1 مرة ، 2 مرة .. إلخ ) . مقسوماً علي 49

4. إستخدم هذه المعادلة في تغير " موضع النقط " position في وعاء النقط Vertices Buffer و تغير العمودي علي النقط normal .

ملحوظة : ذكرت من قبل ان اي نقطة تحتاج لعمود Normal لكي تفضل ثابته .. مثل المستوي ماذا يحتاج ؟ نقطة يمر بها و ماذا ثانياً و عمود علي هذه النقطة حتي لا تتحرك " علشان تفضل ثابته " .

5. جعل موضوع النقطة في المصفوفة هو المتجه التي مركباته تساوي " جا الزاوية " علي المحور س ، و 1- علي المحور ص و علي المحور الثالث ع هي جتا الزاوية . بالطبع كل هذا الكلام هي عبارة عن دوران النقط باستخدام الاحداثيات القطبية Polar Co-ordinates .. و استخدام الاحداثات الكروية Spherical و الاسطوانية Cylindrical .

كرر هذا الكلام مع السطر الاخر ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
   for( DWORD i=0; i<50; i++ )
   {
       FLOAT theta = (2*D3DX_PI*i)/(50-1);
       pVertices[2*i+0].position = D3DXVECTOR3( sinf(theta),-1.0f, cosf(theta) );
       pVertices[2*i+0].normal   = D3DXVECTOR3( sinf(theta), 0.0f, cosf(theta) );
       pVertices[2*i+1].position = D3DXVECTOR3( sinf(theta), 1.0f, cosf(theta) );
       pVertices[2*i+1].normal   = D3DXVECTOR3( sinf(theta), 0.0f, cosf(theta) );
   }

و

struct CUSTOMVERTEX
{
   D3DXVECTOR3 position; // The 3D position for the vertex
   D3DXVECTOR3 normal;   // The surface normal for the vertex
};

هذه احدى الملاحظات التي لم افهمها عن الضوء

لما نحتاج الى normal

ولما عندما نقل المعلومات الى position and normal وضعنا المصفوفات

pVertices[2*i+0].

و

pVertices[2*i+1].

لماذا في كل مره في كلتا الحالتين ( position and normal) وضعنا حالتين لكل واحده ...

الاول +0 والثانيه +1

؟؟؟؟

وشكرا ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

راجع مبادىء السي ، المؤشرات و المصفوفات ..

ما هو Normal ، راجع ردي السابق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  for( DWORD i=0; i<50; i++ )

   {

       FLOAT theta = (2*D3DX_PI*i)/(50-1);

       pVertices[2*i+0].position = D3DXVECTOR3( sinf(theta),-1.0f, cosf(theta) );

       pVertices[2*i+0].normal   = D3DXVECTOR3( sinf(theta), 0.0f, cosf(theta) );

       pVertices[2*i+1].position = D3DXVECTOR3( sinf(theta), 1.0f, cosf(theta) );

       pVertices[2*i+1].normal   = D3DXVECTOR3( sinf(theta), 0.0f, cosf(theta) );

   }

for( DWORD i=0; i<50; i++ )

هي الحلقات التكرار تجد دروسا لها في معظم الكتب السي++

pVertices[2*i+0].position = D3DXVECTOR3( sinf(theta),-1.0f, cosf(theta) );
      pVertices[2*i+0].normal   = D3DXVECTOR3( sinf(theta), 0.0f, cosf(theta) );
      pVertices[2*i+1].position = D3DXVECTOR3( sinf(theta), 1.0f, cosf(theta) );
      pVertices[2*i+1].normal   = D3DXVECTOR3( sinf(theta), 0.0f, cosf(theta) );

هو شكل أسطوني قم بتغير الأرقام و ستلاحظ تغير الشكل الأسطواني

Sin هي الجب

Cos هي التجب

أضنك قد قرأتها في الرياضيات

تم تعديل بواسطه GameDev4Arab
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

للرفع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكراً لك , معلومات و روابط مفيدة :lol:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

والله مشكور على الشرح الحلو يا أستاذ أحمد :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الف شكر على هذا الشرح والتوضيح.. وفي انتظار الاسئلة القادمة ان شاء الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم و رحمة الله و بركاته

جماعة انا محتاج بعض النصائح انا اريد برمجة لعبة shoot'em up

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

ikaruga02.jpg

و هذه فيديوهات للعبة

http://nl.youtube.com/results?search_query=ikaruga

سألت جماعة فنصحوني بالsdl

لكن ان محتار فهل استظيع ان

هل directx

افضل ام

sdl

ارجوا ان تشرحوا لي الى ماذا احتاج هل احتاج الى directx او sdl او محركمثلirrlicht

لم افهم تخلطت علي الامور فعلا

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أخي ضع لنا رابط تحميل المكتبة Directx + Sdk

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أخي أنا مبتدئ << أكره إني أعترف

كيف أسوي مشروع بالدوت نت SDK

لإني مالقيته ضمن المشاريع

ماعرف إلا أسوي مشروع XNA

:haha: :blush: :huh:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .