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

دعوى للجميع لمناقشة كل شئ يتعلق بالتعامل مع الكاميرات لذلك اتمنى تثبيته لكى يكون مرجع للجميع

بدأه moh_mou في 16 يونيو 2010 · 12 رد · 2,448 مشاهدة · في DirectX
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

1- سؤالى الاولى ماهى عناصر الماتركس هذا وكيف اتعامل ومعها واحدد قيمها

IdentityMatrix

ProjectionMatrix

ViewMatrix

Dx.IdentityMatrix MatWorld
Device.SetTransform D3DTRANSFORMSTATE_WORLD, MatWorld

Dx.ProjectionMatrix MatProj, 1, 100, PI / 2
Device.SetTransform D3DTRANSFORMSTATE_PROJECTION, MatProj

Dx.ViewMatrix MatView, MakeVector(0, 10, 0), MakeVector(0, 0, 0), MakeVector(0, 1, 0), 0
Device.SetTransform D3DTRANSFORMSTATE_VIEW, MatView

2- وايه هو الفضاء:

90857008.jpg

Modelling Space

World Space

View Space

Screen Space

وايه علاقة الفضاء ده بعناصر الماتريكس :

35037507.jpg

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

3- وايه هو نظام اليد اليمنى واليسرى وهستخدمهم فى ايه

leftrght.gif

4- وايه هو :

Pitch

Yaw

Roll

وكذلك كيفية تحديد قيمهم

yawpitchroll.jpg

واذا يوجود اى معلومات مهمة فى هذه الصفحة ايضاhttp://www.toymaker.info/Games/html/camera.html

اتمنى ايضاحها

ياريت ياجماعة لو كان فى معلومات مخفية عيا فى استفسارى ان اعرفها

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

اتمنى من الجميع المشاركة :)

تم تعديل هذه المشاركة بواسطة moh_mou في 16 يونيو 2010 في 11:10

17.gifالحياة حقنة فصبر عليها 17.gif

Syringe.gif

#2
/index.php?showtopic=174135

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

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

#3
احمد صالح كتب:

شكر الاخ احمد لقد اطلعت على الموضوع هذا قبل ان اقوم اصلا بوضع استفساراتى

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

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

والموضوع لم اجد به شئ من استفساراتى

على العموم شكرا

17.gifالحياة حقنة فصبر عليها 17.gif

Syringe.gif

#4

لا أعلم الكثير أيضاً ، ولكن لماذا لا تأخذ الموضوع ببساطة ، يعني الأمر لايحتاج أن تدخل في yaw و roll من البداية ، قبل أن تعرف شيء عن المصفوفات مثلاً ..

في DirectX الأمور أسهل ، حيث المصفوفة View سيتم ضربها بمصفوفة World حسب ما اذكر ، لا أعرف الكثير عن DirectX ، ولكن باختصار ، لديك ثلاثة مصفوفات /

View ،

World

Projection

المصفوفتين الاخيرة تستطيع " تتجاهلها الان " .. ومصفوفة World هي مصفوفة عادية جدا لتحريك المجسمات ، وتدويرها وتحجيمها ، ولايوجد بها شيء صعب .

View هي التي تمكنك من تحريك الكاميرا ، فعندما تضربها بمصفوفة ازاحة Translation ، الى اليمين ، فان تأثيرها سينتقل إلى World ، وستتحرك المجسمات إلى اليسار . ( انتقل تأثيرها إلى المجسمات ، لأنه تم ضربها بمصفوفة World ) ,

لا اذكر كثيراً الالية التي تطبق في DirectX ، ولكن الموضوع ليس بتلك الصعوبة ، اذا كنت تعرف ماهي فوائد المصفوفات .

باختصار ، عندما تقوم برسم مكعب فان هذا ما سيحدث :

1- يتم حساب مصفوفة View المسؤولة عن " الرؤية أو الكاميرا " ، عندما نقول حساب .. فنعني به أي شيء له علاقة بجمع وضرب المصفوفات والعمليات هي : Translation و Rotation و Scaling

2- يتم حساب مصفوفة World ، أي عملية من عملية النقل تحسب هنا Transformation .

3- يتم حساب مصفوفة Projection - الاسقاط ، و في الغالب سيكون الاسقاط منظوري ، أي ثلاثي الابعاد .

4- قبل رسم المكعب .. سيتم ضرب المصفوفات الثلاث View - World - Projection مع بعض .. ثم الناتج النهائي ستكون مصفوفة تحمل قيمة ( الازاحة النهائية + الدوران النهائي + التحجيم النهائي ) ، وسيتم ضرب هذه المصفوفة النهائية برؤوس المكعب ..

5- سيتم رسم المكعب .

1

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#5

الاخ الغالى الشمرى شكرا جدا لتجاوبك ومحاولة توضيح بعض المعلومات

ولكن ارى انه الموضوع مزال محتاج توضيح اكثر عن استفساراتى التى قد تسالت عنها فانا لا اعرف اصلا شئ yaw و roll فكيف ساكون اعرف المصوفات :wacko:

لذلك اتمنى من باقى الاعضاء المشاركة حتى نستفيد جميعا

اقتباس
باختصار ، عندما تقوم برسم مكعب فان هذا ما سيحدث :

1- يتم حساب مصفوفة View المسؤولة عن " الرؤية أو الكاميرا " ، عندما نقول حساب .. فنعني به أي شيء له علاقة بجمع وضرب المصفوفات والعمليات هي : Translation و Rotation و Scaling

2- يتم حساب مصفوفة World ، أي عملية من عملية النقل تحسب هنا Transformation .

3- يتم حساب مصفوفة Projection - الاسقاط ، و في الغالب سيكون الاسقاط منظوري ، أي ثلاثي الابعاد .

4- قبل رسم المكعب .. سيتم ضرب المصفوفات الثلاث View - World - Projection مع بعض .. ثم الناتج النهائي ستكون مصفوفة تحمل قيمة ( الازاحة النهائية + الدوران النهائي + التحجيم النهائي ) ، وسيتم ضرب هذه المصفوفة النهائية برؤوس المكعب ..

5- سيتم رسم المكعب .

الا تعتقد انه الامر زاد صعوبة بالنسبة لى :blink:

17.gifالحياة حقنة فصبر عليها 17.gif

Syringe.gif

#6

:)

اقتباس
ولكن ارى انه الموضوع مزال محتاج توضيح اكثر عن استفساراتى التى قد تسالت عنها فانا لا اعرف اصلا شئ yaw و roll فكيف ساكون اعرف المصوفات

من المفروض أن تعرف أولاً المصفوفات ثم تقرأ عن yaw و roll .. ( عموماً roll وأخواتها .. مجرد مصطلحات .. وليست شيء أصلاً ) .

طيب أخي ـ حتى نفهم مع بعض ( فأنا مثلك ، لا اذكر الكثير عن DirectX ) ، اكتب برنامج بسيط لرسم مكعب وضعه في منتصف النافذة .. حتى نبدأ مع بعض تحليله حتى نصل لمرادك . على الأقل نفهم مع بعض مصفوفة World واذا فهمتها يمكنك فهم بقية أنواع المصفوفات ..

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#7

السلام عليكم

yaw هو زاوية دوران الشكل (الراس مثلا) على ال axe y كان شخص مثلا يقول "لا" براسه

tilt هو زاوية دوران الشكل على جهة x بالنسبة للراس كان الشخص يقول "نعم"

roll هو زاوية الدوران بالنسبة للz كانه مثلا شخص يضع اذنه على الكتف

(لقد اعطيتك امثلة عن الراس لانها تبدو عملية اكثر)

اما عن كيفية الحصول على هذه الزوايا

فبصراحة انا ايضا ابحث عن هذا المشكل

#8

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

شكرا لك اخى الشمرى واخى hbate_allah

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

51670415.jpg

كل اللى استنتجته وفهمته /

1- اللى فهمته من كلامكم انه الدوران حول المحورY يسمى Yaw

2- وان MatWorld به جميع العناصر التى بداخله فلو اردنا دوران هذا العناصر فلابد من دوران ماتريكس العالم

3- لدوران ماتركس العالم بطريقة Yaw لابد من استخدام RotateYMatrix

وسيصبح الكود

Dx.RotateYMatrix MatWorld, R * (Rad)

هل الكلام ده سليم ؟؟ وهل لمصفوفات دور فهذا فان لم استخدمها فما فائدة تعملها ؟

يتبقى الان MatProj

Dx.ProjectionMatrix MatProj, 1, 100, PI / 2

فالحقيقة لا اعم عنها شئ فاستخدمها كما هى اللى اعرفه انه الكود بيوازى العنصر مع الارض :wacko: ولا اعرف اصلا ما فائدة MatProj

وMatView

Dx.ViewMatrix MatView, MakeVector(7, 7, 0), MakeVector(0, 0, 0), MakeVector(0, 1, 0), 0

هى ايضا احتاج لمزيد من الايضاح :blink:

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

سوف تجدون فى شبكة حداثيات انه Z فى الصورة التى قمت باعددها انه عندما يتجه الى داخل الشاشة يكون بالسالب فهل هذا هو المقصود بنظام اليد اليسرى

وعندما يكون Z متجه لخارج الشاشة موجب فهل هذا يعنى نظام اليد اليمينى وهل هذا هو فقط فائدتهم

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

فالحقيقة رسم مربع عن طريق تحديد 24 نقظة ياخد كثير من الوقت فى تحديد مكان النقاط فمابلكم اذا حبينا نعمل شكل أكثر تعقيدأ هل يوجد برنامج جرافيكس يسهل ذلك انا استخدمت 3s Max ولكن وجدته مختلف فى تحديد احداثيات الرسم

اعتذر عن الاطالة :wub:

تم تعديل هذه المشاركة بواسطة moh_mou في 20 يونيو 2010 في 11:02

17.gifالحياة حقنة فصبر عليها 17.gif

Syringe.gif

#9

Transforming Vertices

قد تجد كل ما تحتاج اليه في هدا الرابط

#10
fouad2008 كتب:

Transforming Vertices

قد تجد كل ما تحتاج اليه في هدا الرابط

ِشكرا اخى الغالى فؤااد الموقع فعلا ممتاز بس الاجانب كل حاجة عندهم بفلوس موضيع كثيرة هامة بتطلب Premium Membership :wacko:

علشان كده بقول لازم يكون لينا مراجع عربية نعتمد عليها :blush:

17.gifالحياة حقنة فصبر عليها 17.gif

Syringe.gif

#11

يا بشر صحوا النوم :lol:

ايه الصحرا دى :wacko:

17.gifالحياة حقنة فصبر عليها 17.gif

Syringe.gif

#12

نعود ،

  • تموضع المكعب داخل العالم الثلاثي الأبعاد جيد ، حبّذا لو كانت نقطة الأصل تقع في قلب المكعب ، لكان هذا أفضل .
  • لايجب رسم " مجسمات معقدة " من خلال DirectX ، فهذا جنون ، إلا إن دعت الحاجة لهذا .
  • أول خطوة ، يجب أن تفكر فيها ، هي بأن تضع المكعب في مكانه الذي تريد ، وهيئته التي تريد ، هل تريده في منتصف النافذة ، أم على يمينها أم تريده " مستديراً " بزاوية قدرها 45 درجة على محور Z . هنا يأتي دور المصفوفة World . و تستطيع قراءة وثائق DirectX لمعرفة كيف تقوم بهذا . مثال لتحريك المجسم إلى اليمين بعشرة وحدات - لا أعرف بالظبط نسخة DirectX التي تستخدمها ولا اللغة التي تكتب بها ، ولكن المثال عام وهو يوضح الفكرة فقط - :
Dx.TranslateX MatWorld , 10


  • لايوجد شيء صعب كما ترى . قم بعمل " أي عملية نقل " تريدها .. Direct3d هي من ستقوم بضرب المصفوفات بدلاً منك .

الخطوة التالية ، هي بتموضع الكاميرا . أول مشكلة ستواجهك ، هو أن المكعب " قد يغطّي الشاشة " بأكملها بشكل يجعلك تريده أن " يبتعد " عن النافذة إلى عمقها . الحل ؟ هناك حلّين :

  • أن تستخدم مصفوفة world matrix ، بحيث تزيح المكعّب ، إلى قلب النافذة ، ومعلوم أنه وفي Direct3d ، محور Z يتزايد كلما ذهبت إلى عمق النافذة ، فالحل سيكون بكتابة شيء كهذا :
Dx.TranslateZ MatWorld , 7


  • الحل الاخر ، هو بأن تغيّر في " موقع الكاميرا " وإلى أين تنظر الكاميرا . أي بدلاً من أن تزيح المكعب إلى عمق النافذة ، تقوم بتقديم الكاميرا قليلاً على محور Z ، وتكتب شيء كهذا ( من أجل أن تغير موقع الكاميرا + إلى أين تنظر الكاميرا ) :

 Dx.ViewMatrix MatView, MakeVector(0, 0, -7), MakeVector(0, 0, 0),  MakeVector(0, 1, 0), 0

المشكلة أني لا أعرف شيء عن هذه الدالة ولا عن البارمترات التي تستقبلها - ترتيب البارمترات - ، ولكن الأمر بسيط .. حرّك الكاميرا ثم غير مكان الرؤية التي تنظر لها الكاميرا ، حتى يمكن أن يظهر المكعب .

في النهاية وبعد عملية ضرب View matric بـ World Matrix .. سيبدو الأمر وكأن الكاميرا ابتعدت عن المكعب بحيث أصبح حجمه صغير .

الـ Projection Matrix ، في الغالب القيم الافتراضية تكفي - بما أنك تريد عالم ثلاثي البعد ، فاستخدم الاسقاط المنظوري Perspective

1

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

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

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#13

اعتذر عن التاخير فاعتقدت انه الموضع توفى :lol:

وضحت الفكرة الحمد لله بعد تجارب كثيرة فى نقل الكميرا واتجاه الرؤية وخلافه والفضل لك ولكل الاخوة :P

الف شكر لك اخى الشمرى ولكل من حاول المساعدة :)

17.gifالحياة حقنة فصبر عليها 17.gif

Syringe.gif

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…