ورود

View Full Version : سوال: نوشتن Exporter و Importer برای 3ds max



kia.celever
دوشنبه 21 شهریور 1390, 15:33 عصر
سلام. من چطور میتونم یه فرمت جدید برای مدل های 3 بعدی درست کنم و چطوری باید یه Importer و Exporter برای اون فرمت تو 3DS Max بسازم؟؟

arman-aegit
دوشنبه 21 شهریور 1390, 16:11 عصر
سلام. من چطور میتونم یه فرمت جدید برای مدل های 3 بعدی درست کنم و چطوری باید یه Importer و Exporter برای اون فرمت تو 3DS Max بسازم؟؟
منم همین مشکل رو دارم.تو خود راهنمای 3ds max نوشته شما می توانید یا با max script یا با ++C و استفاده ازmax SDK برای 3ds max پلاگین بنویسید.من max SDK documentation رو دانلود کردم مشکل اینجاست که آموزش خوبی نمیده و به عنوان مرجع میشه ازش استفاده کرد.اگه یکی از دوستان در مورد این دو روش توضیحی بده و یه آموزش خوب هم معرفی کنه خیلی ممنون میشم.

benyamin_pc
دوشنبه 21 شهریور 1390, 16:49 عصر
تا اونجائی که میدونم توسط sdk مكس توي ویژوال استادیو میتونین برای این برنامه پلاگین بنویسین و آموزشش هم همون داکیومنتیه که از سایتش دانلود کردین

arman-aegit
پنج شنبه 24 شهریور 1390, 12:51 عصر
من یه راهنما پیدا کردم که خوب توضیح میده.اونو میتونین از اینجا (http://download.autodesk.com/media/adn/DevTV_Introduction_to_3DS_Max_Programming.zip) دانلود کنین.(البته به آی پی های ایران نمیده و باید از یه نرم افزاری استفاده کنین)

BlueCom
جمعه 08 مهر 1390, 15:48 عصر
سلام

راه اول : جستجو

آیا واقعا ما احتیاج به فرمتی داریم که دیگر فرمتهای موجود در برنامه آن را بر طرف نمی کنه ؟ یا با کمی گشت و گذار و شاید در اینترنت پیدا میشه بدون نیاز به کمترین کد نویسی ..

ما گشتیم پیدا نکردیم :گریه:

راه دوم : کد نویسی

نکته : ضرورت نوشتن فرمت های دیگر ... ! حل مسله

آیا نیاز به ساختاری دارین که حجم بسیار بالا اطلاعات رو با سایز کم تر روی فایل بنویسد (compress). مانند : 600M --> 10M

آیا نیاز به ساختارین دارین که اطلاعات خاصی رو درون خود ذخیره کن که بتوان در صورت نیاز به صورت واسط میان برنامه های دیگر قابل استفاده باشد (transfer). مانند: FBX

آیا نیاز به ساحتاری دارین که اطلاعات روی بر حسب نیاز ما به صورت هوشمند ذخیره کند. مانند : Game Engine


بعد از انتخاب صورت مسله کمی بیشتر با موضوع در گیر می شیم .

برای نوشتن فرمت های جدیدتر لازم ابتدا از ساختار مدل در برنامه های سه بعدی اطلاع داشته باشی .

در این اطلاعات مشترکاتی مانند :

مختصات کونج یا Vertex
تعداد ستوح یا face or polygon
مختصات پوشش بافت یا UV

وجود داره که همگی احتیاج به این ساختاره پایه دارن برای ترسیم یا نمایش روی صفحه .

اما در برنامه ای مانند 3dsmax اطلاعات دیگری مثل : Vecrtex Color , Vertext Weight ,Smooth Group , Face Mat ID, ...... برای مدل درون فایل ذخیره می شود.


گام بعدی مشخص کردن ساختار فایل است . چون هم قراره نوشته شود هم خوانده شود. (Export ... Import)


برای مثال : ابتدا اسم مدل نوشته بشه بعد تعداد vertex , face , UI , ID بعد اسم متریال بعد خصوصیات متریال .. .. کدو اول نوشته بشه کدوم آخر و از این موارد که میتونی با خوندن فرمت های متفاوت نیجه خوبی بگیری.


لازم بگم تمام فرمت ها رو به صورت Text یا Binary میشه نوشت .

مزیت Binary نسبت به Text سرعت بالای خواندن و نوشتنه

مزیت Text : با هر Text Editor مثل notepad اگر حجمش بالا نباشه میشه باز کرد و حتی اصلاح


در گرامر کدنویسی 3ds max دو روش دسترسی به هسته برنامه وجود داره :

++ Software Develop Kit) SDK c)

زبان واسط Max Script


روش اول

احتیاج به گرامر ++C , برنامه Microsoft Visual Studio و نوشتن plug-in داره . پس از نصب کردن SDK نسبت به ورژن برنامه ورژن Visual Studio هم انتخاب می کنید .

با دو متد که خود SDK در دسترس قرار داده میشه کد نویسی کرد :


متد اول پنجره Import و باز می کنه و با انتخاب فایل کار شروع می شه

برای Import از کلاس SceneImport به صورت public مشتق بگیر.

مرحله بعدی یک قسمت اختیاری داره که کار در زمان باز کردن فایل پنجره ای جهت تنظیمات قبل از Import داشته باشه یا نه. مثل سایز و ..... یا مستقیم عملیات و انجام بده.

اگر قرار شد پنجره ای برای کاربر تنظیم بشه باید پنجره و تمامی المانها برای 3dsmax رجیستر و ثبت کنی.

تمامی عملیات نهای با تابع مجازی ()DoImport

با یکی از پارامترهای DomImport به اسم ImpInterface که خودش یه کلاس واسطه به هسته برنامه ست یه متغیره Node با تابع CreateNode ایجاد می کنی.

تا اینجا فقط تونستی یک موضوع به صحنه اضافه کنیم ولی ماهیتش هنوز مشخص نیست چون max از این جا به بعدبا ماهیت موضوعات کار می کنه که آیا shape , helper , light , camera , Geometry هست یا نه.

پس تکلیف روشنه . یه متغیر به اسم object از نوع TriObject که خودش از کلاس GeomObject مشتق شده می سازی و اطلاعاتی رو که از روی فایل خوندیم مثل vertex, face, uv , ID, .... بارگذاری می کنی.

در مرحله بعد مختصات object و با یه Matrix3 بهش میدی در نهایت اسم گذاری و update صحنه رو انجام میدی . معمولا مرحله update صحنه خود برنامه با حرکت دادن Viewport انجام میشه


متد دوم پنجره Import دیگه ظاهر نمیشه مگر خودت بخوای پنجره سفارشی بسازی . و عملیات تقریبا از تابه DoImport به بعد با روش بالا یکسانه . با این تفاوت که از هر جایی در برنامه میشه انجام داد .

مثلا میتونه یه دکمه در پنجره Modifer یا Material باشه.


در Export تقریبا مراحل بالا رو دنبال کن با این فرق که از کلاس SceneExport و DoExport و ExpInterface که ابتدا مشخصات لازم و از max میگیری بعد بر اساس ساختاری که قبل در موردش صحبت کردم روی فایل می نویسیم .



روش دوم

نوشت Script که همان زبان واسطی که فقط از درون 3dsmax قابل اجراست.

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

توابعی مثل ImportFile یا ExportFile که همون پنجرهای موجود و برای خوندن و نوشتن با ز میکنه. و قابلیت سفارشی سازی نداره .

اما اگر گرامر Script و کار کردی از این توابع آشنا می تونی استفاده کنی :

برای کار با مدل :

در polyop.SetVert , polyop.GetVert , polyop.GetFaceMatId , polyop.SetFaceMatID : EdditablePoly ...........

در meshop.GetVert , meshop.SetVert , meshop.GetNumVerts : EditableMesh ...............




مو فق باشی

Ananas
جمعه 27 آبان 1390, 21:32 عصر
سلام.
این که گفتید max SDK خیلی جالب بود قبلا تو محیط برنامه نویسیم دیده بودم ولی نمی دونستم چیه. اگه میشه بیشتر توضیح بدید (چطور دانلود میشه ؟ چطور نصب میشه؟ آیا SDK برای Pascal هم داره یا فقط ++C).
در مورد MaxScript من باهاش کار کردم باید بگم اگه شما بتونید با ++C براش پلاگین بنویسید خیلی بهتره چون MaxScript نسبت به ++C خیلی کند تره حدودا ده ، بیست برابر کندتره برای کارهای لحظه ای خوب جواب میده ولی برای Export و یا Import کردن اذیت میکنه .