درس هفتم

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

درس هفتم:

Appearance،Color3f،Sphere

امروز می خوام در مورد Appearance صحبت کنم ، Appearance یکی از مهم ترین ابزارات یک تری دی کاره ، با Appearane خیلی کارا میشه کرد، میشه یه شکل رو رنگ کرد ، میشه واسش Texture تعریف کرد ،میشه باهاش به یک شی Material اضافه کرد و ....

کلاً چیز خوبیه :) !!!

برای اینکه با Appearance آشنا بشیم یه مثال ساده کار می کنیم و خلاص!

امروز  می خواهیم یه برنامه خیلی خیلی ساده با هم بنویسیم که یک کره به شعاع 6. داشته باشیم(جان کره!!! امروز برای اولین بار از شر مکعب رنگی خلاص میشیم) ، برای سادگی هم به جای استفاده از Transform برای شکل و نقطه دید ، امروز فقط از متد کار راه انداز setNominalViewingTransform استفاده می کنیم.

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

همونطور که گفتم ،برنامه خیلی ساده است ، یه SimpleUniverse داریم ، یه BranchGroup اصلی ، یه BranchGroup واسه شکلمون (که همون کره باشه) ، یه کره با شعاع 6. (Sphere) 

نمک و فلفل به مقدار کافی :) ( نه این مال اینجا نبود :) اشتباه شد)

بعد هم که تکراریه :کره s رو به shapeGroup و shapeGroup رو به rootGroup و rootGroup رو به universe اضافه کردیم ،در آخر هم از سر تنبلی از متد setNominalViewingTransfom استفاده کردیم (اصلاً شما که دیگه همه اینا رو از برید من برای چی تکرار می کنم؟؟ ؟؟؟؟ ؟؟؟؟؟؟؟؟)

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

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

خب حالا چی کار کنیم!

جواب : 

اول باید یه رنگ واسه خودمون تعریف کنیم، برای اینکار از Color3f استفاده می کنیم ( مسیر کاملش اینه : javax.vecmath.Color3f)

پارامتر ها به ترتیب red و green و blue هستند . (همون RGB خودمونه دیگه!)

بعد از تعریف رنگ باید یه Appearance ایجاد کنیم ، رنگ رو بهش اعمال کنیم و سر آخر این Appearance رو به شکلمون نسبت بدیم.

برای اینکار به صورت زیر عمل می کنیم:

اول Appearance رو تعریف می کنیم:

دوم: چون مستقیماً نمی تونیم اون رنگی رو که تعریف کردیم به Appearance امون اضافه کنیم باید از یه واسط استفاده کنیم به نام ColoringAttributes ، برای اینکار به صورت زیر عمل می کنیم:

(دیگه هی من مسیر کامل این چیزایی که معرفی می کنم رو نگم ،یا خودتون ctrl+space ای چیزی بزنید یا تا آخرش صبر کنید همه چیز معلوم میشه)

حالا که Appearance امون رو ساختیم می تونیم اون رو به شکلمون (همون کره ه با نام s) نسبت بدیم:

الآن دیگه همه چیز تموم شده و به خوبی و خوشی کار می کنه ،کل برنامه هم تا الآن باید این شکلی باشه:

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

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

و اگه برنامه رو اجرا کنید خروجیش باید این شکلی باشه:

و در آخر دو تا نکته:

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

2) نکته دوم: حالا دایره به نظر رسیدنش به کنار ،چرا مثل آدمیزاد شبیه دایره نیست؟؟؟ خوب برای اینکه به طور پیش فرض برای تولید کره از جزیئات زیادی استفاده نمیشه ، اگه می خوایید یه کره تر و تمیز تر داشته باشید باید میزان جزئیات رو افزایش بدید ، برای مشخص کردن میزان جزئیات یک کره باید از سازنده سه پارامتری اون استفاده کنید:

فعلاً با پارامتر دوم این سازنده کاری نداریم ، فقط همین رو بدونید که پارامتر سوم میزان جزئیات رو نشون میده ، سعی کنید به جای 40 مقادیر دیگه ای مثل 4 و 5 و 6 و 60و 70 و ... رو هم آزمایش کنید تا متوجه قضیه بشید :)

نقطه سر خط.