سلام
شعاع
XNA.Ray
مکان هندسی نقاط مشخصی در فضا است که همگی از یک نقطه مشخص در یک راستای مستقیم هستند و از یک سمت تا بینهایت امتداد دارد ...
شعاع دو مولفه دارد (خیلی شبیه خط)، یک بردار جهت و یک نقطه (بردار مکان)
یعنی با داشتن یک نقطه در فضا و یک جهت مشخص میتوان یک شعاع فرضی ترسیم کرد.
شعاع در محاسبات راستای کلیک ماوس و یا راستای شلیک یک گلوله مستقیم و... میتواند کاربرد داشته باشد.
==============
صفحه
XNA.Plane
مکان هندسی نقاط مشخصی در فضا است که بردار این نقاط با یک نقطه مشخص بر بردار نرمال صفحه عمود است ...
صفحه دو مولفه دارد، یک بردار نرمال و یک نقطه (بردار مکان)
بردار نرمال صفحه برداری است که بر صفحه عمود است ...
با داشتن یک نقطه و یک بردار نرمال صفحه میتوان صفحه در فضا تصور کرد که از چهار طرف با بینهایت امتداد یافته است.
یعنی اگر از هر نقطه ای در صفحه به سمت نقطه دیگری یک بردار رسم کنیم این بردار با بردار نرمال صفحه عمود خواهند بود.
زمین صاف و صفحه حرکت دوربین و صفحه تشکیل سایه و... میتواند از موارد کاربردش باشد.
==============
ماتریس
XNA.Matrix
به طور مشخص در کار ما یک جدولی دو بعدی و 4 در 4 شامل 16 عدد است!
ماترسی ها کاربرد بسیار بسیار وسیعی در طراحی و کنترل فضاهای سه بعدی دارند که ناشی از قدرت آنها در مبانی ریاضی میشود.
یک ماتریس به تنهایی میتواند برای اعمال مختلفی روی تک نقطه و بردار و یک شی بزرگ مفید باشد.
مثلاً یک ماتریس میتوانید حاوی اطلاعاتی در خصوص ....
- بزرگنمایی مجزا در هر سه بعد
- وضعیت چرخش یک جسم به طور مجزا برای هر سه بعد
- نقطه مرکزی چرخش و دوران جسم
- نقطه مکانی انتقالی که جسم باید بدان جا حرکت کند باشد
!!!!
و با اعمال ان به ماتریس جسم میتوانید همه تغییرات فوق را در یک لحظه اعمال کنید!
این ساختار انواع متدهای C#-Static یا VB-Shared را دارد که ماتریس را برای شرایط مختلف تولید میکند و میتوان آنها را با عمل ضرب با هم ترکیب کرد.
=====
ضرب دو ماتریس
حاصل همچنان ماتریسی خواهد بود که هر عنصر آن از ضرب سطر نظیر در ماتریس اول در ستون نظیر در ماتریس دوم حاصل میشود
این ضرب خاصیت جا به جایی ندارد بدان معنی که m1*m2 برابر نیست با m2*m1
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
=====
درک این مطلب بسیار مهم است که این ضرب خاصیصت جابه جایی ندارد.
به کد زیر دقت کنید:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
mxscale اگر به هر مجموعه بردار مکان یا شی ای اعمال شود ابعاد آن را در همه جهات سه برابر میکند.
mxtrans اگر له هر مجموعه بردار مکان یا شی ای اعمال شود آن را دو واحد در جهت محور X ها حرکت میدهد.
فرض کنید یک شی سه بعدی در محل (0,0,0) قرار دارد و ماتریس mx1 و یکبار هم mx2 را به آن اعمال میکنیم.
(در محل مناسب طرز نمایش و این عمل توضیح داده خواهد شد.)
- اگر ماتریس mx1 به شی اعمال شود اول شی سه برابر بزرگتر شده و سپس به نقطه (2,0,0) میرود (با آینطور دیده میشود)
- اگر ماتریس mx2 به شی اعمال شود، اول شی به نقطه (2,0,0) میرود و بعد بردارهای مکان شی که آن را در این محل نشان داده و به شی حجم هم میدهند سه برار میشوند که نتیجه روی مانیتور آن خواهد بود که شی در محل (6,0,0) سه برار نمایش داده میشود.
یعنی خلاصه در mx1 شی در (2,0,0) سه برابر بزرگتر دیده میشود ولی با mx2 شی در (6,0,0) سه برابر بزرگتر دیده میشود.
این فقط یک مثال بود و این رفتار در اعمال دوران و ... هم پیش می آید و باید با دقت و تامل تصمیم بگیرید که اول کدام ماتریس باید در دیگری ضرب شود تا همان نتیجه را بدهد که میخواهید.
=====
متد XNA.Vector3.Transform جهت اعمال یک ماتریس روی یک بردار یا نقطه تکی
به عنوان نمونه جهت اعمال یک ماتریس به یک بردار میتوانید از متد XNA.Vector3.Transform استفاده کنید:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد فوق بردار v1 را 45 درجه حول محور X چرخانده و حاصل را در v2 قرار میدهد.
==============
ما تقریباً چیز خاصی از مباحث ریاضی نگفتیم و فقط ساختارها را معرفی کردیم و موارد پرکاربرد ریاضی را مطرح کردیم ولی با توجه به اینکه تاپیک قصد آموزش پیشرفته ندارد، مباحث ریاضی در این پست تمام میشود.
(یعنی پستهای مخصوص رریاضی و با عنوان ریاضی تمام میشود و گرنه بحث ریاضی ادامه خواهد داشت)
شخصاً به دوستان پیشنهاد میکنم سعی کنند هندسه سه بعدی خود را قوی کنند تا در اعمال دستورات و چیزهایی که میخواهند در صحنه بازی مشکل نداشته باشند و دوربین دور سرشان نچرخد!
پست بعدی یا در خصوص نمایش طرح های دو بعدی خواهد بود و یا در ضمینه کنترلر دوربین (که طبیعتاً باز کمی ریاضیات دارد.)
==============
ghnet.xna.dll به پک معرفی شده در پست اول اضافه شد.
support.h02.ir/fwlink/?LinkId=1005808167
کسانی که خودشان ترسیم دوبعدی را بلد هستند میتوانند از تابع گفته شده (در انتهای پست 40) به همان شکل در نمایش متن فارسی استفاده کنند ولی در فایل spritefont.* باید مجموعه کاراکترهای فارسی را هم اضافه کنند:
اعداد فارسی
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حروف فارسی
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته میتوان مجموعه حروف فارسی را در spritefont.* به هم چسباند ولی این کار سرعت کامپایل را کند و حجم xnb را افزایش میدهد
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یک سمپل ساده از امکانات دو بعدی ghnet.xna هم به همراه نسخه exe به پک اضافه شد.
==============
نوشته شده توسط
test84
دوستان, آیا این کتاب دوباره یافت شد؟
در مورد کتاب مذکور متاسفانه مجدد وقت نکردم جستجویی کنم.
==============
از صبر دوستان تشکر میکنم و جمیعا موفق و پیروز باشید.