درس پنجم

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

درس پنجم:

خب بریم رو مبحث بعدی

مبحثی که امروز می خوام در موردش بگم ، مبحث مهمیه پس خوب دقت کنید.

امروز می خوام در مورد Transform و TransformGroup بگم .

اول TransformGroup:

یکی از زیر کلاس های Group میباشد ، پس می تونیم ازش به عنوان یه ابزار گروه بندی اضافه کنیم ، یعنی می تونیم اشکالمون رو بهش اضافه کنیم ( به عبارتی می تونیم به جای BranchGroup از این استفاده کنیم) ،منتهی وقتی از TransformGroup استفاده می کنیم باید یک تبدیل هم برای اشکالی که بهش اضافه می کنیم در نظر بگیریم ،این تبدیلی می تونه هرچیزی رو مشخص کنه ، مثلاً موقعیت هندسی ، یا چرخش یا کش اومدن یا ....

برای مشخص کردن تبدیلی که به یک TransformGroup اختصاص داشته باشه باید از کلاس Transform3D استفاده کنیم.

برای اینکه بحث بالا رو بهتر متوجه شیم ، از مثال استفاده می کنیم.

یادتونه یه بار برای نمایش شکل گفتم اگه بخواهیم یه شکل رو نشون بدیم باید دو تا کار بکنیم،

یکی این که موقعیت شکلمون رو مشخص کنیم و دوم اینکه موقعیت نقطه دیدمون رو مشخص کنیم و درست همون موقع هم بود که از روی تنبلی به جای این دو تا کار از یه میونبر استفاده کردیم (منظورم setNominalViewingTransform) ، یادتون هست یا نه؟؟؟

خب امروز دیگه باید تنبلی رو بزاریم کنار.

می خوام یه مکعب رو بزارم تو صفحه به طوری که:

1) نقطه دیدمون رو تو نقطه (0و0و0) تنظیم کنم.

2) شکل مورد نظر رو تو محور Z ها چهار واحد ببرم عقب ، تو محو X ها 1 واحد ببرم سمت راست ،و تو محور Y ها کاریش نداشته باشم ، یعنی برای شکل مورد نظر می خوام از تبدیل (X=1,Y=0,Z=-4) استفاده کنم.

اولین کاری که می کنم اینه که یه کلاس به اسم MyTransform1 ایجاد می کنم.

برای اینکه کار ها تر تمیز پیش بره 6 تا متغیر از نوع float مشخص می کنم.

سه تاش برای نقطه دید

و سه تاش هم برای شکل مورد نظر (باز هم مکعب رنگی!!!!!!!!!!! )

و این شیش تا متغیر رو با مقادیری که بالا ذکر خیرشون بود مقدار دهی می کنم.

یعنی تا اینجا باید برنامه این جوری باشه:

مثل همیشه یه SimpleUniverse و یه BranchGroup اصلی ایجاد می کنم:

حالا وقتشه که کد خوبه رو بزنیم ، یعنی یه شکل ایجاد کنیم ،و به جای اینکه مثل قدیما اونو به BranchGroup اضافه کنیم ، این دفعه اون رو به TransformGroup اضافه کنیم ، ببینیم کار با این TransformGroup چی جوریه؟؟؟ هی می گن TransformGroup ،TransformGroup :)

می ریم تو سازنده کلاس

اول universe و rootGroup رو new می کنیم ، بعد هم یه مکعب رنگی می سازیم:

حالا یه TransformGroup می سازیم، یه Transform3D هم می سازیم ، چون همونطور که قبلاً گفتم تبدیلات یک TransformGroup رو باید با کلاس Transform3D مشخص کرد.

حالا وقته اونه که تبدیلی رو که برای شکلمون در نظر گرفته بودیم به shapeTrans (که شی ای از Transform3D هست) اعمال کنیم:

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

*

حالا با خیال راحت این TransformGroup (همون shapeGroup ) رو به BranchGroup اصلی (همون rootGroup) اضافه می کنیم:

خب تا اینجاش که خوب پیش رفت ، تا الآن باید برنامه به صورت زیر باشه:

یه قدم دیگه مونده تا کارمون تموم شه ، و اون اینکه الآن باید تبدیلی رو که برای نقطه دیدمون در نظر گرفته بودیم اعمال کنیم ، ولی چی جوری ؟؟؟ ما که نمی خواهیم universe رو به جایی add کنیم ، پس نمی تونیم واسش یه TransformGroup جدید new کنیم ، پس باید چی کار کنیم؟؟؟ هیچی !!! ViewingPlatform ای که به universe اختصاص داره خودش TransformGroup داره ، ما فقط باید اون رو ویرایش کنیم ،برای اینکار به صورت زیر عمل می کنیم( باید سه بار "دات" بزنید :) :) ) :

حالا که یه TransformGroup برای universe داریم ، اعمال تبدیل که دیگه کاری نداره ،قبلاً یاد گرفتید این کار رو :

حالا rootGroup رو به universe اضافه می کنیم و خلاص !

کل برنامه الآن باید این شکلی باشه:

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

مثل همیشه ،کد رو هم می تونید از اینجا دانلود کنید (هر چند مثل همیشه توصیه ام اینه که خودتون کد رو بزنید):

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

نقطه سر خط.