درس دهم

در جاوا تری دی Java 3D

درس دهم:

بارگذاری آبجکت فایل!

معمولاً طراحی های اشیای سه بعدی رو توسط نرم افزار های تری دی مثل maya ،3d max  و ... انجام میدیم و بعد هم سعی می کنیم که این اشیا رو بیاریم تو برنامه خودمون !

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

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

برای درس امروز من یه فایل از نت پیدا کردم (حسش نبود خودم یه دونه طراحی کنم :) ) نمی دونم گلدونه ؟ پیاله است؟ دیگه قهوه ایه؟ چیه؟ :) هر چی هست چیز خوبیه کار امروزمون رو راه میندازه!

این فایل رو می تونید از اینجا دانلود کنید:

http://safecomp.persiangig.com/Terracotta_Pot.obj

خب ببینیم برای لود کردن این فایل باید چی کار کنیم:

اول ابزار های مورد نیاز:

خب دو تا چیز امروز هست که قبلاً ندیده بودیم ، یکیش همین Scene !

Scene هیچی نیست به جز یه interface که ازش برای یکپارچه سازی لودر ها استفاده میشه !

ObjectFile  یه لودره که برای فایل های obj. استفاده می شه ، آبجکت فایل ها در حقیقت فایل های متنی هستند که می تونید به صورت دستی خارج از محیط های سه بعدی سازی هم دستکاریشون کنید (البته اگه ازشون سر در بیارید) محتویات این نوع فایل ها در نهایت یه شکل سه بعدی رو توصیف می کنه.

خب کم کم بریم کد بزنیم که بفهمیم این حرفایی که می زنیم یعنی چی!

مثل همیشه کا رو از سازنده کلاس شروع می کنیم بیشتر کارمون رو هم همونجا انجام میدیم:

تو کد بالا می بینیم که هنگام ساخت objF پرچم RESIZE رو به سازنده ObjectFile ارسال کردیم ، اما برای چی این کار رو کردیم؟ معمولاً باید از اندازه شی ای سه بعدی ای که قصد داریم تو برنامه مون لودش کنیم با خبر باشیم ولی اگه ازش خبر نداریم یا اندازه اش زیادی بزرگ و درد سر سازه این پرچم رو برای سازنده ObjectFile ارسال می کنیم این پرچم شکل رو تو مختصات صفر و صفر و صفر قرار می ده و مختصات گوشه های اون رو طوری تنظیم میکنه که تو رنج 1- ,1- ,1- تا 1,1,1 قرار بگیرن.

اینجوری بعداً اگه خواستیم می تونیم این شکل رو به هر اندازه ای که خواستیم تغییر اندازه بدیم.

حالا باید فایل مورد نظر رو لود کنیم و اطلاعات اون رو توی یه Scene (در اینجا s) قرار بدیم.

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

حالا این شکل رو به shapeGroup اضافه می کنیم :

بقیه کار ها هم که تکراریه ، shapeGroup رو به rootGroup اضافه می کنیم ، اونو به universe و ...

بعد هم باید Transform مورد نیاز برای universe  رو انجام بدیم ، برای اینکار هم که دیگه بد عادت شدیم یه متد moveUniverse می نویسیم و اونو صدا می زنیم:

پس اول صداش بزنیم که کارمون با سازنده تموم شه:

بعد هم بیاییم کدش رو بزنیم که فردا کسی پشت سرمون حرف در نیاره:) :

خب الآن دیگه به نظر میاد برنامه کامل باشه ، حالا وقتشه که اون اجرا کنیم:

می بینیم که ( یا نمی بینیم که !!!!!) هیچی معلوم نیست! اگه یادتون باشه قبلاً هم با یه همچین مشکلی مواجه شده بودیم ! اونجا اگه اشتباه نکنم و خوب یادم باشه شکلمون رو رنگ کردیم که بشه دیدش ولی امروز برای اینکه یه کم چیز بیشتری یاد بگیریم یه کار دیگه می کنیم!

امروز می خوام به صحنه نور اضافه کنم که بشه شکل مورد نظر رو دید.نوری که می خوام به صحنه اضافه کنم ترکیبی از سبز و آبی خواهد بود یه چیزی تو مایه های رنگ چراغ خواب!!!

نور پردازی تو جاوا تری دی ای بگیم نگیم اوضاعش بد نیست امروز می خوام از نور پردازی محیطی استفاده کنم(یه نوع نور پردازی که جهت مهت درست و حسابی نداره) ، نور پردازی های جوره دیگه هم هست البته که اگه بعداً عمری باقی بود و حسی میام می گم!

خب پس دو باره برگردیم تو سازنده کلاس قبل از اونجایی که moveUniverse رو صدا زدیم.(البته قبل و بعدش فرق چندانی هم نداره ها! ، همینجوری می گم!)

برای اینکه بتونیم یه نور محیطی ایجاد کنیم اول باید یه محدوده تعیین کنیم که بگیم "آقا ما می خواهیم نور تو این محدوده فقط وجود داشته باشه"

برای ایجاد این محدوده از BoundingSphere استفاده می کنیم، برای این مثال من BoundingSphere رو به صورت یک کره که تو نقطه 0و 0 و 20 قرار گرفته و دارای شعاع 100 هست تعریف می کنیم(این میشه همون محدوده ای که نور توش قرار می گیره، شعاع 100 هم کم نیست ها!!!).

قبل از ایجاد نور باید رنگش رو تعریف کنیم:

حالا نور محیطی رو ایجاد می کنیم

اون محدوده ای رو هم که قبلاً تعریف کرده بودیم حالا برای نورمون به کار می بریم و خلاص!!!!!!:

خب کارمون با نور دیگه تموم شده فقط مونده که اونو به صحنه اضافه کنیم ، برای اینکار باید اونو به rootGroup اضافه کنیم ، هم می تونیم نور رو مستقیماً به rootGroup اضافه کنیم و هم اینکه اول براش یه branchGroup بسازیم بعد branchGroup رو به rootGroupاضافه کنیم. من اینجا از روش دوم استفاده می کنم:

خب حالا با خیال راحت برنامه رو اجرا کنید!

.

.

.

چی شد؟؟؟ ترکید؟؟؟ اکسپشن داد؟؟؟ (البته می دونم بعضی ها برنامه رو هنوز اجرا نکردن ، چی فکر می کنی خیلی بچه زرنگی؟؟ :) حالش به این بود که اون موقع که گفتم برنامه رو اجرا کنید اجرا می کردی برنامه رو!)

خب اگه برنامه رو اجرا کردید و ترکیدن رو مشاهده کردید باید یه جابه جایی انجام بدید و اون خطی رو که rootGroup رو به universe اضافه می کنه بیاریدش بعد همه این کارایی که بالا انجام دادید یعنی قبل از فراخوانی moveUniverse:

خب الآن می تونید برنامه رو با خیال راحت اجرا کنید و خروجیش رو ببینید! نکته اخلاقی این درس هم این بود که بزارید آخر همه کارا rootGroup رو به universe اضافه کنید!:) :) :) :)

اینم خروجی برنامه:

البته لازم نیست که تاکید کنم که این شکله سه بعدیه و این که الآن ما چرا اینقدر ضایع می بینیمش دلیل داره!

مثل همیشه کد رو می تونید از اینجا دانلود کنید:

http://safecomp.persiangig.com/CODE/MyObjectLoader1.java

نقطه سر خط!.

نظرات

آموزش را ادامه بدید

سلام

آموزشتون عالیه من خیلی علاقه مندم به اینکه جاوا تری دی رو یاد بگیرم اگه میشه آموزش رو ادامه بدید یا اگه نمیتونید یه کتابی یا مرجعی معرفی کنید (چه انگلیسی چه فارسی) که بنده بتونم این جاوا تر دی رو یاد بگیرم...

با تشکر از زحمات فروان شما

خیلی خوشحالم که این مجموعه

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

ولی این کتابا خوبن:

Java 3D Programming -Daniel Selman

Getting Started with the Java 3D API-Dennis J Bouvier

منم حتماً سعی می کنم ادامه بدم آموزشش رو ، یه مدتیه هم سرم شلوغ شده و هم اینکه تنبل شدم (این دومیه مخصوصاً) ولی هر طور شده ادامه می دم :)

لینک

دوست عزیز، کتاب اولی که سیف معرفی کرده رو می تونی از لینک زیر دانلود کنی:

http://4paye.ir/book/java-3d-programming