تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 4 از 10 اولاول 12345678 ... آخرآخر
نمايش نتايج 31 به 40 از 100

نام تاپيک: آموزش مقدماتی و فشرده شروع برنامه نویسی گرافیکی سه بعدی تحت XNA و زبان های VB.Net و C#.Net

  1. #31
    حـــــرفـه ای dogtag's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    مرز غربی تهران بزرگ! ایمیل: goodboy.php@gmail.com اسپم ها: 2,200!!! :دی
    پست ها
    2,277

    پيش فرض

    ممنون از توضیحات مبسوط.

    فقط امیدوارم اون قضیه ی فارسی نویسی رو، سورسش رو هم بهمون نشون بدید.
    آخه اگر قضیه بازی سازی بود، می رفتیم موتور Dunya رو می خریدیم و با کیفیت خدا بازی می ساختیم که همه چیز داشته باشه.

    اومدیم پیش شما که XNA یاد بگیریم و کم کم با A* و سایر مخلفات مربوط به منطق بازی آشنا شیم.

    ممنون می شم اگر بسورسید!

  2. #32
    اگه نباشه جاش خالی می مونه L u K e !'s Avatar
    تاريخ عضويت
    Mar 2009
    محل سكونت
    Qazvin
    پست ها
    441

    پيش فرض

    ... خان شروع کنید دیگه شما خیلی وارد چیزای تخصصی شدید
    می گم یه قسمت بزنید واسه ی منابع اموزشی و کامپوننت ها ی اماده
    با استفاده از Bitmap Font ?
    Last edited by L u K e !; 11-08-2009 at 17:37.

  3. این کاربر از L u K e ! بخاطر این مطلب مفید تشکر کرده است


  4. #33
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

    11

    سلام به همگی و داش حسن عزیز....ضمن تشکر از آموزشاتون یه چندتا سوالی برام پیش اومده....

    من هنوز تو کف پست شماره 26 شما هستم.واقعاً عالی بوود...


    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اگه میشه یه خورده بیشتر برامون توضیح بدید...حقیقتش من کمی احساس میکنم این مساله خیلی مهمی تو کد نویسیه با توجه به اینکه XNA فقط کد نویسیه...
    من میتونم این کدها رو برای برنامه های Win App هم امتحان کنم؟


    به کد زیر نگاه کن کدمشون درسته؟

    string Str_Main = "Hello, How Are You? I Have A Hard Disc";
    Str_Main = Str_Main.ToLower().Remove(0, 3).Substring(0, 23).Remove(2, 19);
    MessageBox.Show(Str_Main);
    string Str_Main = "Hello, How Are You? I Have A Hard Disc";
    Str_Main = Str_Main.ToLower();
    Str_Main = Str_Main.Remove(0, 3);
    Str_Main = Str_Main.Substring(0, 23);
    Str_Main = Str_Main.Remove(2, 19);
    MessageBox.Show(Str_Main);
    یا کد زیر:

    decimal A = 1380, B = 2, C = 1;
    DateTime Q = new DateTime(Convert.ToInt32(A), Convert.ToInt32(B), Convert.ToInt32(C));
    decimal A = 1380, B = 2, C = 1;
    int A1, B1, C1;
    A1 = Convert.ToInt32(A);
    B1 = Convert.ToInt32(B);
    C1 = Convert.ToInt32(C);
    DateTime Q = new DateTime(A1, B1, C1);
    یه خورده درمورد این حلقه هایی که اضافی اجرا میشن و سرعت برنامه رو میگیرن بیشتر توضیح بدید....

    و در مورد Using هم اگه میشه بیشتر توضیح و مسال بزنید...واقعاً ممنونم....
    .

    من اصلاً نمیدونم باید این XNA رو از کجا شروع کنم.....بعد از دانلود برنامه....با اینکه زبان سی شارپه ولی یه خط هم نمیتونم بنویسم...شما چه راهی پیشنهاد میکنید برای یادگیری بهتر؟
    جالبه که XNA خیلی فرق میکنه، و به احتمال خیلی زیاد من با توابع و کلاس های اون آشنا نیستم...
    واقعاً از همه شما به خاطر همکاری ممنونم....
    موفق باشید و سربلند.

  5. #34
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    1 پاسخ به پیشنهادات و سوالان

    سلام
    سیاست من در این تاپیک آن بوده که برای جواب سوالات و پیشنهادات مطرح شده تا حد امکان پست جدیدی نزنم و این مطالب را در انتهای پستهای اصلی آموزشی با دوستان حل و فصل کنم.
    ولی برای دومین بار حجم سوال و پیشنهادات مطرح شده (و نتیجتاً جوابیه) زیاد شده که نیاز است در پستی مجزا کلیه آنها یکجا جواب داده شوند.

    نقل قول نوشته شده توسط dogtag
    آخه اگر قضیه بازی سازی بود، می رفتیم موتور Dunya رو می خریدیم و با کیفیت خدا بازی می ساختیم که همه چیز داشته باشه.
    اومدیم پیش شما که XNA یاد بگیریم ...
    پیش خودمان باشد، به کسی نگویید(!)، نمیدانم چرا یک لحظه فکر کردم، من مسئول سازمان وزین حمایت از منافع مایکروسافت در خاورمیایه و آسیا شرقی هستم!

    نقل قول نوشته شده توسط L u K e !
    می گم یه قسمت بزنید واسه ی منابع اموزشی و کامپوننت ها ی اماده
    در حین بیان مطالب اگر کامپونت معتبری باشد که جایش در آن پست باشد، معرفی خواهند شد.

    نقل قول نوشته شده توسط hamishebahar
    به کد زیر نگاه کن کدمشون درسته؟
    فرقی ندارند!
    جایی که من گفتم باید تعریف متغیر انجام شود برای مواردی بود که شما یک نتیجه را بیش از یک بار نیاز داشته باشید.
    مثلاً این دو کد تفاوت بازدهی و سرعت زیادی ندارد و یکی هستند:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    ولی این دو کد با هم متفاوت هستند و کد دوم صحیح تر و بهتر است:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    تفاوت آنجا است که در بخش اول ما یکبار به عدد int موجود در string نیاز داشتیم و کد اول و دوم فرقی نداشت.
    ولی در بخش دوم ما دو بار به عدد int موجود در string نیاز داشتیم و کد اول به صورت مجزا دو بار این تبدیل را تحمیل کرده ولی کد دوم یکبار تبدیل را انجام داده و حاصل را دوبار استفاده کرده.

    نتیجتاً چون در کدهای شما هیچ بخش تکراری وجود ندارد، تفاوتی بین کدهای اول و دوم نیست.
    البته اگر به فرض مقادیر ورودی ثابت باشند (مثل Str_Main) و بخواهید چند بار این کار را انجام دهید میتوانید یک بار محاسبه کنید و آن را در متغییر محلی ذخیره کنید و دیگر هر کجچا نیاز شد فقط دستور MessageBox.Show را بدهید ولی باز هم کد اول و دومتان فرقی ندارند.

    ضمناً در خصوص ان محاسبه string که نوشته بودید، کار وحشتناکی بود!
    ولی برای نمایش در MessageBox.Show مشکلی ندارد، چون کاربر چیزی نمیفهمد ولی در یک برنامه عملی اگر خواستید همچین ویرایش های سنگین ترکیبی متدهای مختلف String را انجام دهید، پیشنهاد میکنم یک حلقه for یا foreach برای همه کاراکترهالی string تان بگذارید و خودتان در حلقه مذکور پردازش متنی انجام دهید و نتیجه را در یک StringBuilder ذخیره کنید.

    نقل قول نوشته شده توسط hamishebahar
    و در مورد Using هم اگه میشه بیشتر توضیح و مسال بزنید...واقعاً ممنونم....
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    نقل قول نوشته شده توسط hamishebahar
    من اصلاً نمیدونم باید این XNA رو از کجا شروع کنم.....بعد از دانلود برنامه....با اینکه زبان سی شارپه ولی یه خط هم نمیتونم بنویسم...شما چه راهی پیشنهاد میکنید برای یادگیری بهتر؟
    بله، شما احتمالاً ساختارها و کلاسها را نمیشناسید.
    متاسفانه من نمیتوانم سرعتم را افزایش دهم و در عین حال باید مطالب ریاضی و هندسی را هم بیان کنم. (که دلایلش را خواهم گفت)
    پیشنهاد میکنم از pdf های معرفی شده استفاده کنید و برای نمونه فعلاً از همان platformer خود VS استفاده کنید که دوبعدی و ساده است.

    ==============

    نقل قول نوشته شده توسط L u K e !
    با استفاده از Bitmap Font ?
    آن کد فارسی سازی کاملاً از کدهای استاندارد XNA استفاده میکند و در هر سه محیط Win و XBox و Zune قابل استفاده است.
    طبق روال عادی فایل spritefont.* تعریف میکنید...
    همانطور که احتمالاً میدانید، برای نمایش عادی متون انگلیسی همچین دستوری مینویسید:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    و برای نمایش متون مخلوط فارسی و انگلیسی به صورت RightToLeft با کمک تابع مذکور همچین دستوری مینویسید:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    همانطور که میبینید فقط یک تابع این بین افزوده میشود و دقیقاً مثل همینجا 114 اول فارسی و 114 دوم انگلیسی نمایش داده خواهد شد.

    در طراحی تابع مذکور دقت بسیار شده و روی الگوریتم مورد نظر برای شرایط متون فارسی و انگلیسی و عدد و فاصله و... بسیار فکر شده.
    ضمن اینکه از کدهای خاص unsafe با دقت فراوان استفاده شده که به این درجه اطمینان رسیده ام که هیچ طور دیگری این تابع قابل پرسرعت تر و پر بازده تر شدن نیست.
    تابع مذکور همه کاراکتر های یونیکیدی فارسی را تشخیص میدهد.
    (18 نوع "الف" یا 25 نوع "ی" و... نتیجتاً در هر محیط و ویندوزی که کد کامپایل شود، قدیم و جدید و عربی و فارسی و... تضمین کارکرد صحیح برای فارسی دارد.)

    نقل قول نوشته شده توسط dogtag
    ممنون می شم اگر بسورسید!
    الگوریتم را توضیح میدهم، خوبه؟ نه سیخ بسوزه و نه کباب!
    گمانم توضیح دادن الگوریتم نیمی از کد است.

    1- جدولی sort شده و بسیار کوچک به صورت آرایه ای خام تهیه شده که حاوی همه کاراکترهای معنادار در زبان فارسی است که در استاندارد unicode وجود دارد و امکان دارد در هر سیستم و فارسی ساز ویندوز و... استفاده شود.
    با روش جستجوی باینری و نصف کردن در کمتر از 8 مقایسه میتوان جایگاه یک کاراکتر را متوجه شد و فهمید فارسی است یا نه و چندمین حرف فارسی است.

    2- در یک حلقه پردازش for داریم که کاراکتر به کاراکتر مقدار string ورودی را پردازش میکند.

    3- برنامه کلیه کاراکترهای فارسی را با کارکتر مناسب همان حرف (اول و وسط و آخر و تنها) تعویض و جمع میکند تا برسد به عبارت انگلیسی...

    4- بعد تمام کاراکترهای فارسی جمع شده تا آن لحظه را معکوس کرده و به خروجی اضافه میکند سپس به جمع آوری کارکترهای انگلیسی مشغول شده و تا رسیدن به کارکتر فارسی آنها را هم جمع میکند و الی آخر ...

    5- اعداد هم جداگانه پردازش میشود... و سوییچ اعداد به یونیکدهای معادل فارسی فقط زمانی رخ میدهد که قبل از عدد متن فارسی وجود داشته باشد.

    6- فاصله های سفید (هر کاراکتر غیر نمایشی) که پس از عددی باشد که قبل از آن عدد متن فارسی بوده باشد هم باید باعث ذخیره بافر در خروجی آن لحظه شود.

    7- در نهایت بلاک های خروجی بعد for یک بار دیگر معکوس شده و تحویل return داده میشود.


    در جهت سرعت حداکثری و البته با دقت کافی از یک string معمولی به جای بافرموقت و StringBuilder بارها بارها استفاده شده. و به راحتی با یک دستور intlength = 0 بافر مجازی Clean شده.
    جالب انکه در انتها از همین بافر که با روش خاصی new شده برای جمع اوردی نهایی مقادیر استفاده شده و در return باز پس داده خواهد شد. (چیزی هدر نمیرود!)

    حتی کدهای جمع دو string هم در قالب کدهای unsafe مدیریت مستقیم حافظه به طرزی بسیار کارامد از نو نوشته شده.
    کد نویسی این تابع خاص با رعایت موازین دات نت و اطلاع از بازدهی و سرعت انواع کدها در مقابل کدهای مختلف نوشته شده.

    نباید این حرف را بزنم، مخصوصاً که بد اموزی دارد!!!
    (برای کسی که آشنایی کاملی ندارد شاید انجام این کار به مراتب سنگین تر و بدتر از کدنویسی عادی دات نتی باشد...)
    ولی کد این تابع بیشتر از انکه شبیه کدهای عادی دات نتی باشد شبیه کدهای ++C است. (همانطور که گفتم حتی از جمع دو string هم در این کد استفاده نشده)

    در کل تقریباً بعید میدانم بتوان این کد را بهتر و پرسرعت تر کرد.

    ==============

    جمیعاً موفق باشید.
    Last edited by _H2_; 12-08-2009 at 14:18.

  6. 2 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  7. #35
    حـــــرفـه ای dogtag's Avatar
    تاريخ عضويت
    Aug 2006
    محل سكونت
    مرز غربی تهران بزرگ! ایمیل: goodboy.php@gmail.com اسپم ها: 2,200!!! :دی
    پست ها
    2,277

    پيش فرض

    خیلی ممنون.
    حرف بی خودیه ولی » اگر برای استفاده ی غیر تجاری بخواهیم و فقط بخونیم و پاکش کنیم، باز هم راهی ندارد؟

    مرسی

  8. #36
    اگه نباشه جاش خالی می مونه L u K e !'s Avatar
    تاريخ عضويت
    Mar 2009
    محل سكونت
    Qazvin
    پست ها
    441

    پيش فرض

    یه سوال علی جان
    مگه شما نگفتید که این XNB یه جور فایل ها رو فشرده می کنه ؟
    یه مشکل پیدا کردم
    این بار فایل های XNB م 5 -6 برابر فایل های اصلی حجم دارن
    مثلا یه فایل png 1024*1024 که 1 مگ حجمشه XNB ش 4.5 mg حجم داره
    ولی وقتی با WinRar فشردش می کنم همون حجم اصلی ش می شه

  9. #37
    پروفشنال mahdi7s's Avatar
    تاريخ عضويت
    Sep 2007
    محل سكونت
    هر جایی می تونه باشه
    پست ها
    757

    پيش فرض

    مثلا یه فایل png 1024*1024 که 1 مگ حجمشه XNB ش 4.5 mg حجم داره
    ولی وقتی با WinRar فشردش می کنم همون حجم اصلی ش می شه
    احتمالا دارن با دات نت(GZipStream) فشرده میشن که روی بعضی فایل ها که خودشون تا حدودی فشرده هستن نتیجه ی مطلوبی نداره(مثل همین شما)

  10. #38
    اگه نباشه جاش خالی می مونه L u K e !'s Avatar
    تاريخ عضويت
    Mar 2009
    محل سكونت
    Qazvin
    پست ها
    441

    پيش فرض

    نتیجه ی مطلوب ندارن چیه نتیجه ش برعکسه

  11. #39
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    1 معرفی مفاهیم پایه ریاضی و ساختارهای مربوطه ...

    سلام

    بردار
    XNA.Vector3

    بردار یک پاره خط جهت دار است، به بیان ساده تر یک فلش یا پیکان در فضا که جهتی مشخص را نشان میدهد و طولی مشخص دارد.
    بردار به ذات یک مکان هندسی نیست و جای خاصی در فضا ندارد و در عین حال میتوانید آن را هر جایی تصور کنید، مهم نوک جهت پیکان بردار و طول ان است.

    هر بردار سه مولفه X و Y و Z دارد.

    =====

    نقطه !
    XNA.Vector3

    یک تک نقطه را در فضا مشخص میکند.
    برای نقطه ساختار و کلاس جداگانه ای نداریم و میتوان از همان XNA.Vector3 استفاده کرد که سه مولفه X و Y و Z دارد.
    طبیعی است که اگر منظور از XNA.Vector3 یک نقطه باشد دیگر توابع گفته شده در فوق بی معنی خواهند بود.
    (
    البته از دید ریاضی نقطه هم در واقع میتواند یک بردار باشد که از نقطه 0,0,0 به سمت آن محل کشیده شده و نام دیگر نقطه، میتواند بردار مکان باشد!
    )

    =====

    بردار رنگی !
    XNA.Vector3

    لازم به ذکر است که در برخی توابع XNA برای مشخص کردن رنگ یا فیلتر رنگی خاصی باز از بردارد استفاده میشود که در آن شرایط XYZ مشخص کننده طولهایی RGB در یک مکعب فرضی رنگی هستند. به بیان ساده تر از XYZ به جای RGB استفاده شده.

    البته ساختاری خاص برای رنگ هم داریم XNA.Graphics.Color

    ولی باید این دقت را داشته باشید که لزوماً یک XNA.Vector3 را در کدی دیدی همیشه به عنوان یک بردار فضایی-مکانی عادی تصور نکنید.

    =====

    بردار ها قابل جمع و تفریق با برداری دیگر و یا ضرب تقسیم در یک عدد هستند که هر مولفه بردار جداگانه رویش عمل فوق انجام میشود و اپراتور این اعمال در ساختار XNA.Vector3 از قبل تعریف شده.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    (در نوشتار جبری از همان چهار علایم اصلی استفاده میشود.)

    =====

    طول بردار
    طول پاره خط بردار برابر جذر مجموع مکعب مولفه هایش است!
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    (در نوشتار جبری از علامت قدر مطلق استفاده میشود، چون قدر مطلق یک عدد هم نوعی طول بردار است! مثلاً |x| )

    مکعب طول بردار را که در برخی محاسبات نیاز میشود میتوانید با LengthSquared به دست اورید که در واقع دیگر محاسبه رادیکال را ندارد و سریعتر است. ²|x|

    =====

    نرمال سازی بردار
    به عملی اطلاق میشود که طی ان برداری جدید تولید میشود که هم جهت با بردار اولیه است ولی طولش یک واحد است
    طبیعتاً برابر است با تقسیم بردار بر طول خودش
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    (
    در نوشتار جبری چنیبن بیان میشود |n/|n
    هموراه 1=| |n\|n |
    )

    =====

    ضرب نقطه ای دو بردار
    یک عدد میشود که برابر جمع ضرب جفت مولفه ها است.
    و نیز برابر ضرب طول دو بردار در Cos زاویه بین آنها است.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    بنابر تعریف دوم ضرب نقطه ...
    اگر این ضرب صفر شود یعنی دو بردار عمود بر هم هستند ...
    اگر این ضرب یک شود یعنی دو بردار موازی هم هستند ...
    با کمک تابع ArcCos میتوان زوایه بین دو بردار را به دست آورد ...
    و...

    این ضرب کاربرهای بسیاری در هندسه سه بعدی دارد.
    (
    در نوشتار جبری از یک نقطه برای نمایش ان استفاده میشود v1.v2
    هموراه (a.b=|a|.|b|.Cos(β
    )

    =====

    ضرب خارجی یا متقاطع دو بردار
    حاصل برداری است برابر با برابر دترمینالی 3 در 3 که سطر اول ان بردارهای یکه سه محور و دو سطر بعدی دو بردار باشند. (که به علت بردارهای یکه سه محور حاصل یک عدد مشخص نمیشود و یک بردار میشود.)
    - طول این بردار حاصل برابر ضرب اندازه دو بردار در Sin زاویه بینشان است.
    - بردار حاصل در فضا بر هر دو بردار قبلی عمود خواهد بود و جهت آن از قانون دست راست بدست می آید.
    - اگر جای بردار اول و دوم عوض شود مولفه های نهایی 1- برابرخواهند شد.

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    (
    در نوشتار جبری از علامت ضرب برای نمایش ان استفاده میشود v1×v2
    هموراه (a×b|=|a|.|b|.Sin(β|
    )

    ==============

    اگر برای استفاده ی غیر تجاری بخواهیم و فقط بخونیم و پاکش کنیم، باز هم راهی ندارد؟
    dll را قبل از مطالب برای دانلود میگذارم.
    الآن هم میتوانم بگذارم ولی در وسط کدنویسی چند کلاس هستم که اصلاً هم قرار نیست در این تاپیک راجب آن چند کلاس صحبت شود ولی خودم ذاتاً چندان خوشم نمی آید که با این چند کلاس ناقص dll را منتشر کنم.
    نتیجتاً به همراه پست بعدی و یا زودتر dll را منتشر میکنم و شما فعلاً یک تستی انجام دهید و ببینید اصلاً کار میکند یا نه!

    مگه شما نگفتید که این XNB یه جور فایل ها رو فشرده می کنه ؟
    یه مشکل پیدا کردم
    این بار فایل های XNB م 5 -6 برابر فایل های اصلی حجم دارن
    دو مطلب در این مورد وجود دارد.
    اول آنکه بیشتر pipline ها در زمان کامپایل کلاً فایل ورودی را کن فیکن میکنند! و با یک فرمت و استاندارد و سبک دیگری آن را ذخیره میکنند.

    دوم آنکه من گفتم همچین قابلیتی وجود دارد ولی شما باید اول فعالش کنید!
    در XNA3.1 به صورت پیشفرض قابلیت مذکور برای کامپایل debug غیر فعال و برای کامپایل Release فعال است.
    نتیجتاً به عنوان یک راه حل ساده پیشنهاد میکنم پروژه را در حالت Release کامپایل کنید، البته شاید فرق زیادی نکند ولی بحرحال در این صورت است که آن بخش فشرده سازی فعال خواهد شد.
    Last edited by _H2_; 18-08-2009 at 13:58.

  12. 4 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  13. #40
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    1 معرفی مفاهیم پایه ریاضی و ساختارهای مربوطه ... 2

    سلام

    شعاع
    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
    دوستان, آیا این کتاب دوباره یافت شد؟
    در مورد کتاب مذکور متاسفانه مجدد وقت نکردم جستجویی کنم.

    ==============

    از صبر دوستان تشکر میکنم و جمیعا موفق و پیروز باشید.
    Last edited by _H2_; 28-08-2009 at 18:22.

  14. 2 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •