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

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

مثبّت
بدأه احمد صالح في 26 أبريل 2005 · 20 رد · 15,974 مشاهدة · في DirectX
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

س. ما هو الدايركت اكس 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

__________________

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#2

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

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

3445.obj : error LNK2001: unresolved external symbol _Direct3DCreate9@4
3445.obj : error LNK2001: unresolved external symbol _D3DXMatrixPerspectiveFovLH@20
3445.obj : error LNK2001: unresolved external symbol _D3DXMatrixLookAtLH@16
3445.obj : error LNK2001: unresolved external symbol _D3DXMatrixRotationY@8
3445.obj : error LNK2001: unresolved external symbol __imp__timeGetTime@0
Debug/453.exe : fatal error LNK1120: 5 unresolved externals
Error executing link.exe.

34.obj : error LNK2001: unresolved external symbol _Direct3DCreate9@4
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 مقدار التكبير

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

D3DXMATRIX matWorld;

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

g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

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

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

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

post-40521-1114522713_thumb.jpg

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#3

تطبيق

post-40521-1114523371_thumb.jpg

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#4

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

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

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

-----

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#5

بلي ،

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

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

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#6

بارك الله فيك أخي احمد صالح

#7

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

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

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

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

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

مشكور

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

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

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

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

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#9

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

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

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

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

تم تعديل هذه المشاركة بواسطة احمد صالح في 1 مايو 2005 في 18:23

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#10

السلام عليكم

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

   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
};

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

#11
 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 .

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

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#12
majnona_ كتب:
   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

؟؟؟؟

وشكرا ...

#13

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

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

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#14
اقتباس
  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 في 8 مايو 2005 في 20:58

#15

للرفع

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#17

السلام عليكم

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

#18

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

M0oATH

اقتباس
وكم من طالب غلب أستاذه

#19

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

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

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

ikaruga02.jpg

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

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

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

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

هل directx

افضل ام

sdl

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

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

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

اقتباس

uchihailyes@hotmail.fr

#20

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

الجزائر قلبي وغزة نبضه

2522zn0.png
#21

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

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

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

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

:haha: :blush: :huh:

vr7y9y10.jpg

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