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

تحرريك الكاميرا

مغلق
بدأه DXProg في 20 مايو 2005 · 13 رد · 1,092 مشاهدة · في قسم برمجة الألعاب و الرسوميات العام
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سؤالي هو عن تحريك الكاميرا

وهو:-

لنفرض ان لدين جزء من لعبه وهو شارع مستقيم ونريد ان نحرك الكاميرا الى الامام والى الخلف واليمين واليسار وهكذا ....

فممكن توضيح ..

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

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

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

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

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

#2

مبادىء محاكاة الكاميرا

لتفهم معني الكاميرا ، تخيل نظرة عينكو انت انت تسير في طريق .

تعريف الكاميرا في العالم الثلاثي الابعاد :

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

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

أ ضرب اتجاهي ب = ينتجه متجه اخر - ج عمودي عليهم

A Cross B= C

من خلال هذا التعريف :

نستنتج الحركات الاساسية هذه :

1. السير ، الحركة

1.إن كنت تريد ان تسير إلي الامام سوف تزيد علي المتجه التي تنظر إليه Look At Vector بمقدار معين يعبر عن مقدار الازاحة او المسافة التي تريد السير بها .

و العكس صحيح للسير إلي الخلف ، سوف تنقص علي المتجه مقدار .

2. بعد ذلك سوف ينتج عندك متجه بعد الزيادة او النقصان - ماذا بعد ذلك ؟!

يجب ان نقوم بإيجاد مقياس هذا المتجه Normal لتفعيله . " راجع المتجهات في كتب الجبر للصف الثانوي " .

هذه القواعد تسير علي المتجهيين الاخرين - المتجه العمودي علي يمينك Right Vector و المتجهه الرأسي UP Vector .

2. الدوران

عادي جداً ، يمكن ان تدور المتجهات الثلاثة باستخدام قوانين الدوران العادية او استخدام المصفوفات .

طبعاً للدوران يجب ان تكون هناك زاوية للدوران ..

في الميكانيكا الهندسية يعرفون ثلاث زاويا للدوران

Yaw, Picth And Roll

الفا ، بيتا ، جاما .

كيف تنشأ الكاميرا ؟

نظرة كودية

1. تقوم بتعريف الثلاث متجهات و تعطي لهم القيمة الابتدائية

LookAt Vector ( 0 , 0 , 1 ) يعني متجه ينظر إلي العين - ال Z
Up Vector at  ( 0,1, 0 )  يعني ينظر إلي المحور الصادي 
Right at ( 1,0,0 ) يعني ينظر إلي السين

بعد كده تعمل ضرب اتجاهي للثلاث متجهات 
و تعمل اختبار للتعامد المتجاهات 
لانهم يجب ان يكونوا متعامدين 
.

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

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#3

الرسمه

post-40521-1116596311_thumb.jpg

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#4

تسلم اخ احمد

لقد فهمت منك بعض الشيء ولكن بصراحه هذه الاشياء كنت فاهم 50% ولكن شكرا لك حقا

ولكن قصدي يبين من وضع الكود وهو :

class Camera
{
public:
      enum CameraType { LANDOBJECT, AIRCRAFT };

      Camera();
      Camera(CameraType cameraType);
      ~Camera ();

      void strafe(float units);  // left/right
      void fly(float units);     // up/down
      void walk(float units);    // forward/backward

      void pitch(float angle);   // rotate on right vector
      void yaw(float angle);     // rotate on up vector
      void roll(float angle);    // rotate on look vector
      void getViewMatrix(D3DXMATRIX* V);
      void setCameraType(CameraType cameraType);
      void getPosition(D3DXVECTOR3* pos);
      void setPosition(D3DXVECTOR3* pos);
      void getRight(D3DXVECTOR3* right);
      void getUp(D3DXVECTOR3* up);
      void getLook(D3DXVECTOR3* look);

private:
      CameraType  _cameraType;
      D3DXVECTOR3 _right;
      D3DXVECTOR3 _up;
      D3DXVECTOR3 _look;
      D3DXVECTOR3 _pos;
};



void Camera::getViewMatrix(D3DXMATRIX* V)
{
     // Keep camera's axes orthogonal to each other:
     D3DXVec3Normalize(&_look, &_look);

     D3DXVec3Cross(&_up, &_look, &_right);
     D3DXVec3Normalize(&_up, &_up);

     D3DXVec3Cross(&_right, &_up, &_look);
     D3DXVec3Normalize(&_right, &_right);

     // Build the view matrix:
     float x = -D3DXVec3Dot(&_right, &_pos);
     float y = -D3DXVec3Dot(&_up, &_pos);
     float z = -D3DXVec3Dot(&_look, &_pos);

     (*V) (0, 0) = _right.x;
     (*V) (0, 1) =  up.x;
     (*V) (0, 2) = _look.x;
     (*V) (0, 3) = 0.0f;

     (*V) (1, 0) = _right.y;
     (*V) (1, 1) = _up.y;
     (*V) (1, 2) = _look.y;
     (*V) (1, 3) = 0.0f;

     (*V) (2, 0) = _right.z;
     (*V) (2, 1) =  up.z;
     (*V) (2, 2) = _look.z;
     (*V) (2, 3) = 0.0f;

     (*V) (3, 0) = x;
     (*V) (3, 1) = y;
     (*V) (3, 2) = z;
     (*V) (3, 3) = 1.0f;
}

void Camera::pitch(float angle)
{
     D3DXMATRIX T;
     D3DXMatrixRotationAxis(&T, & right, angle);

     // rotate _up and _look around _right vector
     D3DXVec3TransformCoord(& up,& up, &T);
     D3DXVec3TransformCoord(&_look,&_look, &T);
}

void Camera::yaw(float angle)
{
     D3DXMATRIX T;

     // rotate around world y (0, 1, 0) always for land object
     if( _cameraType == LANDOBJECT )
          D3DXMatrixRotationY(&T, angle);

     // rotate around own up vector for aircraft
     if( _cameraType == AIRCRAFT )
          D3DXMatrixRotationAxis(&T, &_up, angle);

     // rotate _right and _look around _up or y-axis
     D3DXVec3TransformCoord(& right,& right, &T);
     D3DXVec3TransformCoord(&_look,&_look, &T);
}

void Camera::roll(float angle)
{
     // only roll for aircraft type
     if( _cameraType == AIRCRAFT )
     {
          D3DXMATRIX T;
          D3DXMatrixRotationAxis(&T, &look, angle);

          // rotate _up and _right around _look vector
          D3DXVec3TransformCoord(& right,& right, &T);
          D3DXVec3TransformCoord(&_up,&_up, &T);
     }
}

void Camera::walk(float units)
{
      // move only on xz plane for land object
      if(  cameraType == LANDOBJECT )
           _pos += D3DXVECTOR3(_look.x, 0.0f, _look.z) * units;

      if( _cameraType == AIRCRAFT )
           _pos +=  look * units;
}

void Camera::strafe(float units)
{
      // move only on xz plane for land object
      if(  cameraType == LANDOBJECT )
           _pos += D3DXVECTOR3(_right.x, 0.0f, _right.z) * units;

      if( _cameraType == AIRCRAFT )
           _pos += _right * units;
}
void Camera::fly(float units)
{
      if(  cameraType == AIRCRAFT )
            pos +=  up * units;

}

bool Display(float timeDelta)
{
     if( Device )
     {
          //
          // Update: Update the camera.
          //

          if( ::GetAsyncKeyState('W') & 0x8000f )
               TheCamera.walk(4.0f * timeDelta);

          if( ::GetAsyncKeyState('S') & 0x8000f )
               TheCamera.walk(-4.0f * timeDelta);

          if( ::GetAsyncKeyState('A') & 0x8000f )
               TheCamera.strafe(-4.0f * timeDelta);

          if( ::GetAsyncKeyState('D') & 0x8000f )
               TheCamera.strafe(4.0f * timeDelta);

          if( ::GetAsyncKeyState('R') & 0x8000f )
               TheCamera.fly(4.0f * timeDelta);

          if( ::GetAsyncKeyState('F') & 0x8000f )
               TheCamera.fly(-4.0f * timeDelta);

          if( ::GetAsyncKeyState(VK_UP) & 0x8000f )
               TheCamera.pitch(1.0f * timeDelta);

          if( ::GetAsyncKeyState(VK_DOWN) & 0x8000f )
               TheCamera.pitch(-1.0f * timeDelta);

          if( ::GetAsyncKeyState(VK_LEFT) & 0x8000f )
               TheCamera.yaw(-1.0f * timeDelta);

          if( ::GetAsyncKeyState(VK RIGHT) & 0x8000f )
               TheCamera.yaw(1.0f * timeDelta);

          if( ::GetAsyncKeyState('N') & 0x8000f )
               TheCamera.roll(1.0f * timeDelta);

          if( ::GetAsyncKeyState('M') & 0x8000f )
               TheCamera.roll(-1.0f * timeDelta);

          // Update the view matrix representing the cameras
          // new position/orientation.
          D3DXMATRIX V;
          TheCamera.getViewMatrix(&V);
          Device->SetTransform(D3DTS_VIEW, &V);

          //
          // Render
          //

          Device->Clear(0, 0,
               D3DCLEAR_TARGET | D3DCLEAR ZBUFFER,
               0x00000000, 1.0f, 0);
          Device->BeginScene();

          d3d::DrawBasicScene(Device, 1.0f);
          Device->EndScene();
          Device->Present(0, 0, 0, 0);
     }
     return true;
}

هذا هو الكود احمد ...

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

انا لم افهم بعض النقاط التاليه

1- ما هو _pos ؟؟ .. واذا كان هو المتجه الجديد فكيف عرف لنا كمشي للامام ام الخلف ؟؟؟ واين عرف كمتجه جديد .. ؟؟(اي لماذا اذا ضغطنا على A نسير الى الامام مثلا .. ان _pos ليس الا انه يحمل قيمه فلماذا اذا تغير _pos تتغير حركة الكاميرا * مهم جدا ارجو الاجابه عليه* )

2- كيف يتحدد نوع الكاميرا .. ؟؟؟ فاذا كانت على الارض كيف يتضح ذلك ؟؟

3- وما هي كل من :-

(*V) (0, 0) = _right.x;
     (*V) (0, 1) =  up.x;
     (*V) (0, 2) = _look.x;
     (*V) (0, 3) = 0.0f;

     (*V) (1, 0) = _right.y;
     (*V) (1, 1) = _up.y;
     (*V) (1, 2) = _look.y;
     (*V) (1, 3) = 0.0f;

     (*V) (2, 0) = _right.z;
     (*V) (2, 1) =  up.z;
     (*V) (2, 2) = _look.z;
     (*V) (2, 3) = 0.0f;

     (*V) (3, 0) = x;
     (*V) (3, 1) = y;
     (*V) (3, 2) = z;
     (*V) (3, 3) = 1.0f;

ماذا يعني (0, 0) و (0, 1) و (0, 2) و (0, 3) و البقيه ...

هذه ليست كل مشاكلي في هذا الكود ولكنها اهمها واكثرها ..

فارجو ان تشرح الكود تفصيليا وان تركز اكثر على هذه النقاط ...

ملاحظه:- انتبه لوجود _ وعدم وجوده فان الكود مليء بهذه الاخطاء الكتابيه ..

وشكرا ...

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

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

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

#5

ماذا جرى اخ احمد ....

.

.

.

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

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

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

#6

معليش يا اخ DXProg ,... المثال طويل ومعقد .. حاول تاخذ المهم فقط وهو تحريك الكميرا ..

شرح احمد صالح رائع ومفيد ... وكافي ايضا ..

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

انا اللي اعرفه في opengl انه توجد دالة واحدة للكميرا .. سطر واحد وخلاص .. وdx نفس الشي اعتقد تحريك الكميرا لاتتجاوز 4 اسطر بالكثير .. لاتحاول ان تفهم اي كود بل ابحث عن كود يسهل لك المطلوب

وسأبحث لك عن كود اسهل .. ان وجدت سارفعه هنا

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#7

للاسف ..لم اجد مثال بدون كلاس ... لكن وجدت مثال ممكن اسهل قليلا ..

وهو بالمرفقات ..

ولكن اهم نقطة بالمثال السابق هي

void SetCamera()
{
     This will be used to set the view ("camera") matrix.
   D3DXMATRIXA16 View;

   // Get the input from the user so we can move the camera either foward or back.
   GetInput();

   // Eye is the position, LookAt is the point the camera is looking at, and Up
   // just tells Direct3D which way is up (positive 1 and above is...well up).

   // Now we set the camera data into the 3 D3DXVECTOR3 objects we will send to create the
   // view matrix so we can use it.  You can use the arrow keys to move the camera.
   D3DXVECTOR3 Eye(Camera.xPos, Camera.yPos, Camera.zPos);        // Position of camera.
   D3DXVECTOR3 LookAt(Camera.xView, Camera.yView, Camera.zView);  // Point camera is looking at.
   D3DXVECTOR3 Up(Camera.xUp, Camera.yUp, Camera.zUp);            // Which way is up.

   // Set all the values this matrix will need to know (position, look at point, etc).
   D3DXMatrixLookAtLH(&View, &Eye, &LookAt, &Up);

   // Move the "camera" to the position and values we set above.
   D3D_Device->SetTransform(D3DTS_VIEW, &View);
}

اعتقد تلك النقطة من اهم النفاط .. وهي تحدد احداثيات الكميرا..ونحو ذلك

واذا لم تفهم اطرح اسألتك ..

D3D_Camera.zip

تم تعديل هذه المشاركة بواسطة الشـمري في 22 مايو 2005 في 13:52

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#8

السلام

اولا شكرا لك اخي الشمري على الكود .... انه كود بسيط جدا جدا وللغايه والحمدلله فهمته ولكن لم تفهمو قصدي ... انا اريد شرح الكود الموجود في المنتدى وذلك لان الكتاب الذي اقراءه يتوجب علي ان اعرف هذا الكود كي اكمل التقدم بالكتاب ...

ارجو من الاخ احمد ان يقوم بشرحه

ومره اخرى شكرا لك اخي الشمري

ولكني عندما قرات الكود جائت ببالي فكره وهي ماذا نعني ب position الكاميرا هل احداثي x and y and z للكاميرا تعني اذا وضعنا القيمه 5 للاحداثي x ان تتجه الكاميرا 5 درجات الى اليمين ؟؟؟ .. ام ان position الكاميرا يعني فقط تقريب وتبعيد ???

ارجو شرح هذه الملاحظه وشكرا

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

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

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

#9
DXProg كتب:
...

.......

1- ما هو _pos ؟؟ .. واذا كان هو المتجه الجديد فكيف عرف لنا كمشي للامام ام الخلف ؟؟؟ واين عرف كمتجه جديد .. ؟؟(اي لماذا اذا ضغطنا على A نسير الى الامام مثلا .. ان _pos ليس الا انه يحمل قيمه فلماذا اذا تغير _pos تتغير حركة الكاميرا * مهم جدا ارجو الاجابه عليه* )

2- كيف يتحدد نوع الكاميرا .. ؟؟؟ فاذا كانت على الارض كيف يتضح ذلك ؟؟

3- وما هي كل من :-

...

.......

1- هو لتحديد موقع الكامير في العالم الثلاثي .

2- سؤال عامض .

3- قبل الاجابه على السؤال اريد توضح نقطه مهما ،

وهي كيفيه ظهور الكائن في العالم الثلاثي :

الكائن في العالم الثلاثي يحتاجي الى 4 معلومات اساسيه (شكل الكائن، بالضافه الى ثلاث مصفوفات ) ولا يمكن ان يعرض ياقل منها :

1- شكل الكائن (vertices )

2- مصفوفه لتحديد موقع الكائن وحجمه ودورانه . WorldMatrix

3- مصفوفه لتحديد شكل الاسقاط للكائن ، ProjectionMatrixاو بمعنى اخر شكل العدسه التي تنظر من خلالها للكائن (المدى،المجال،التكبير،..)

4- مصفوفه لتحديد صفات الناظر ، ViewMatrix ، هو ما يقوم بعمل الكاميرا .

نعود الى السؤال رقم 3:

(*V) (0, 0) = _right.x;
    (*V) (0, 1) =  up.x;
    (*V) (0, 2) = _look.x;
    (*V) (0, 3) = 0.0f;

    (*V) (1, 0) = _right.y;
    (*V) (1, 1) = _up.y;
    (*V) (1, 2) = _look.y;
    (*V) (1, 3) = 0.0f;

    (*V) (2, 0) = _right.z;
    (*V) (2, 1) =  up.z;
    (*V) (2, 2) = _look.z;
    (*V) (2, 3) = 0.0f;

    (*V) (3, 0) = x;
    (*V) (3, 1) = y;
    (*V) (3, 2) = z;
    (*V) (3, 3) = 1.0f;

هذا الكود يقوم ببناء المصفوفه للناظر من الملعلومات الموجوه في الكلاس ، اي كالتي

مصفوفه 4 في 4
| _right.x,	_up.x,	_look.x,	0.0f |
| _right.y,	_up.y,	_look.y,	0.0f |
| _right.z,	_up.z,	_look.z,	0.0f |
| x       ,	y    ,	z      ,	1.0f |

لا مستحيل غير الوقت

#10

انا ان شرحت سأشرح حسب ما فهمت ... يعني ابتعد عن الانغماس في التفاصيل..

لان المبرمج يجب عليه استنتاج الامور اكثر من حفظها

وذلك لاني لست خبير بالرياضيات حتى اشرح كل شي بالتفصيل .. <_<

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

هو مافهمته عن الكميرا ..

اولا : تحدد موضع الكميرا ... يعني مكان الكاميرا

d2810254ca.gif

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

792720806e.gif

كما تلاحظ نحدد النقطة التي نريد ان ننظر اليها ..

وهناك امور خرى لكن هذا المهم

OPENGL تستخدم دالة وحدة بسطر واحد نحدد بها ما نريد ..

اذا الخلاصة .

عندك موقع الكميرا X,Y,Z

عندك النقطة التي تنظر اليها الكميرا X,Y,Z

وهنا امور اخرى نذكر منها

الدوران .. ل

لتجعل الكاميرا تدور تستخدم الدوال المثلثية ..

COS SIN TAN

طبعا لابد ان تكون درستها بالمدرسة ..

الامر سهل لكن مشكلة بعض الكتب والمواقع التعقيد .. فهم يعقدون المثال ويغلفونه في فئات والكود كله يكفيه اربع اسطر ..؟.

المفروض نتعلم الهدف من الدرس .. ثم نحن بأنفسنا نضعه بكلاس .. ونتفلسف

على كيفنا ...

تم تعديل هذه المشاركة بواسطة الشـمري في 22 مايو 2005 في 22:18

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#11

شمري

الكاميرا في 2D يمكن ان تستخدمه في لعبتك ال 2D .

بنفس الاسلوب في ال3D .

post-40521-1116862460_thumb.jpg

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#12

السلام اولا ...

اخ احمد هل تريد شرح الكود ام لاا ؟؟؟

ارجو اعطائي الاجابه كي اعتمد على مصدر اخر

وشكرا

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

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

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

#13

شرح كود ؟

هم شروحه ؟

لا املك جديد لاضافته ؟؟

التحرير :

كود Frank.Luna به صعوبات للمبتدئين كما واضح، افضل لك ان تنظر للمثال الذي اعطاه الشمري فهو يستخدم الدايركت اكس و الدالة D3DXLookAT ...

لكن الكود واضح

ما به ؟

راجع شرحي ...

تم تعديل هذه المشاركة بواسطة احمد صالح في 24 مايو 2005 في 04:10

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#14

تسلم اخي احمد

ولكنك في احد ردودك ( الرد الاول والله اعلم ) قلت لي

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

ولذلك وضعت الكود وطلبت شرحه حسب ارادتك ...

فاذا لم ترغب فلا باس :D

ارجو ان لا اكون ازعجتك

تم تعديل هذه المشاركة بواسطة DXProg في 24 مايو 2005 في 14:10

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

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

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

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

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