PDA

View Full Version : model loading in opengl



prince-of-persia
یک شنبه 05 آذر 1385, 10:01 صبح
سلام به دوستان عزیز

من به تازگی open gl رو شروع کردم و به خاطر آشنایی قبلی که با C++ داشتم VC++ را برای برنامه نویسی انتخاب کردم البته اینکه چرا OGL را انتخاب کردم دقیقا مربوط میشه به موقعیتی که درش قرار دارم و اصلا هم به بهتر یا بدتر بودنش کاری ندارم
به نظر من آدم باید از یه جایی شروع کنه حالا ما هم OGL رو انتخاب کردیم.
برای یاد گرفتن اون هم دارم از یه سایت خیلی خوب استفاده میکنم . دوستانی که OGL کار کردن حتما nehe.gamedev.net رو دیدن.
سرتونو درد نیارم من تا درس 31 رفتم که در اون درس model loading رو یاد داده که من یکم باهاش مشکل دارم مثلا من وقتی داخل milk shape 1.7 بافت یک قسمت از model رو تغییر میدم دیگه اونو شون نمیده . دوستان روش بهتری که بلدن رو بگن یا همون کد های nehe را یکم توضیح بدن .

با تشکر.

kochol
یک شنبه 05 آذر 1385, 21:43 عصر
سلام
می شه بیشتر توضیح بدهید من نفهمیدم درست مشکل چی هست و وقتی چی کار می کنید این مشکل پیش می یاد.

می تونید یه نگاهی به کدهای انجین من در این رابطه بندازید شاید به کارتون اومد.
http://kge.cvs.sourceforge.net/kge/KGE3/Source/gfx/sn/MeshMS3D.cpp?view=markup

prince-of-persia
سه شنبه 07 آذر 1385, 08:55 صبح
این کد ها رو خودت نوشتی یا از یا از سایت milk shape گرفتی؟
و مطلب دیگه اینکه درک این کدا یکم برای من مشکله چطوری میتونم بفهمم خط به خطش چیکار می کنه؟

kochol
سه شنبه 07 آذر 1385, 10:04 صبح
سلام
نه من این کدها رو اکثرا از روی کتاب focus on 3d models یاد گرفتم و طوری تغییرش دادم که با رندرر انجینم هماهنگ باشه هر قسمتشم که نفهمیدی شماره خط بده تا برات توضیح بدم.

prince-of-persia
سه شنبه 07 آذر 1385, 17:15 عصر
حتما با سایت nehe.gamedev.net آشنایی داری درس 31 اش رو من دارم کار می کنم.یه چیزی تو مایه های همین کدی هست که نوشتی اما اینطور که من فهمیدم ماله تو کامل تره چون توی اون اصلا بخشی در مورد انیمیشن یا مثلا join ندیدم.و چون کد شما رو هم نتونستم درک کنم نمی تونم اونو render کنم برای همین میخوام اول درس 31 رو یاد بگیرم بعد برم سراغ انیمیشن.
در حال حاظر مشکلی که من با درس 31 دارم اینه که اندازه فایل bmp من حتما باید اندازه های استاندارد باشه.و وقتی غیر از این باشه با مشکل مواجه میشه و بافت را اعمال نمی کنه.حالا باید برای رفع این مشکل چکار کنم.اگر وقت کنی و درس 31 سایت nehe رو نگاه کنی عالی میشه.

یه مشکل دیگه هم دارم و اون اینکه اینطوری که من فهمیدم milk shape مدل هایی با نقاط محدود رو میتونه نشون بده.مثلا وقتی که من مدل یک تانک رو import کردم به من پیغام خطا داد و بخشی از اون رو لود نکرد.با این حال آیا milkshape تمام نیاز ها رو تامین می کنه یا فقط برای شروع کار از اون استفاده می کنیم.

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

با تشکر

kochol
سه شنبه 07 آذر 1385, 22:36 عصر
سلام
شما فکر کنم که فقط تابع Load من را تا خط 261 بخونی احتمالا تمام چیزهایی که تو اون درس هست را داره فقط برای رندرش باید از OpenGL استفاده کنی چون کد من از خود Renderer انیجنم استفاده می کنه که می تونم کد OpenGL اش رو هم برات بزارم.

من درس 31 رو دو ماه پیش یه نگاهی انداختم و خیلی شبیه کد کتابی رو که من خوندم بود.

در مورد لود تکستچر منظورت اینه که فقط عکس هایی با سایز به توان 2 رو نشون می ده مثل 128*128 256*256 512*512 و ...
روش لودت چه طوری هست کد مربوط به لود تکستچرتو بنویس.
البته من هم این مشکل رو داشتم اگه خواستی تو قسمت OpenGL سایت من که زیر امضام هست یه تاپیک راجع به این موضوع درست کن یه دو نفری هستند که OpenGL رو خوب بلدند ولی دیر به دیر سر می زنند.

MilkShape چندتا مزیت داره که دلیل معروف شدن اون شده هست.
1. خیلی ارزونه و فقط 10$ قیمتش هست.
2. کار باهاش خیلی راحته.
3. مدل های مجانی زیادی تو اینترنت براش هست ولی من که زیاد پیدا نکردم هنوز.
4. از انیمیشن اسکلتی استفاده می کنه.
5. Import و Export انواع فرمت های سه بعدی.
6. ساختار آسونی که برای انیمیشن اسکلتی داره باعث می شه کد نویسیش آسون تر باشه.

در مود سازی quake و خیلی بازی های دیگه ازش استفاده می شه.

prince-of-persia
چهارشنبه 08 آذر 1385, 21:10 عصر
اگر زحمت بکشی و یک مثال به من بدی که در اون یک کاراکتر که حرکت میکنه و textureبا اندازه
دلخواه داشته باشه و البته کد رندر هم داخلش باشه یک دنیا ممنون می شم.چون فکر می کنم با فهمش یک دنیا از مشکلاتم حل بشه
اگر هم میدونی که حرکت دادنش خیلی سخته یک مثال بهم بده که با حداقل کد یک ms3d را لود کرده و یک بافت با اندازه های دلخواه روی اون قرار بده.

راستی من تو سایت شما عضو شدم.داخل کدوم بخش میتونم این تیپ سوال ها رو مطرح کنم.
یک دنیا تشکر

kochol
سه شنبه 14 آذر 1385, 22:11 عصر
سلام
بیا این هم یه نمونه سورس کامل.
هر جاشا که خواستی سوال کن.

kochol
شنبه 25 آذر 1385, 11:43 صبح
سلام
مگه سورسی که برات گزاشتمو دانلود نکردی که یه تاپیک جدید زده ای.

prince-of-persia
یک شنبه 26 آذر 1385, 12:03 عصر
چرا اما فقط مربوط به لود مدل بود در مورد رندر چیزی نداشت.

kochol
دوشنبه 27 آذر 1385, 22:20 عصر
چرا داشت تو دقت نکردی وگر نه چه طوری رندر می گرفت.
بعد هم شما رندر مثلث با یه تکستچر رو بلد نیستید.

prince-of-persia
سه شنبه 28 آذر 1385, 08:59 صبح
راست میگی حق با شماست.

prince-of-persia
پنج شنبه 30 آذر 1385, 18:34 عصر
کوچول سورست یک فایل کم داره math.h
من این سورس رو پیدا کردم یه نگاه بهش بنداز و ببین اگر مثلا بخوام فریم های 20 تا 30 فقط play بشن باید کجاشو تغییر بدم.

البته من advanc_animation() رو تغییر دادم اما به نتیجه نرسیدم.
هدف من از این کار نمایش انیمیشن های مناسب در هر موقعیت هست.مثلا اگر فریم های 1-30 راه رفتن باشه با زدن کلید W فقط اون انیمیشن play بشه

m_shirwani
شنبه 21 بهمن 1385, 20:54 عصر
عالی بود
ممنون

kochol
پنج شنبه 26 بهمن 1385, 14:27 عصر
سلام
نمی دونم چرا یه مدتیه که خیلی تو جواب دادن هام تنبل شدم امیدوارم الان به دردت بخوره.
ببین کلا این کدی که دیدی بر اساسه زمان کار میکنه حالا اگر بدونی که چند فریم یه ثانیه انیمیشن هست می تونی این کارو بکنی.
خوب حالا بعد از خواندن متریال ها 4 بایت بعدی همون فریم در ثانیه رو نمایش می ده.
4 بایت بعدی هم نمی دونم چیه ولی 4 بایت بعدی تعداد فریم هاست.
این هم کدی که خیلی راحت فریم ها رو به زمان تبدیل می کنه.


682 //-----------------------------------
683 // Animation az ye frame ta ye frame.
684 //-----------------------------------
685 bool MeshMS3D::AnimateFrame(float fSpeed, int iStartFrame, int iEndFrame,
686 bool bLoop)
687 {
688 float s = (float)iStartFrame / m_FPS;
689 float e = (float)iEndFrame / m_FPS;
690
691 return Animate(fSpeed, s, e, bLoop);
692
693 } // AnimateFrame

pswin.pooya
سه شنبه 29 خرداد 1386, 12:48 عصر
میتونی کتاب مدلهای گرافیکی رو از flazx بگیری

hitrax
سه شنبه 15 اردیبهشت 1388, 10:22 صبح
سلام
من هم تازه کار با openglرو شروع کردم، میشه کمکم کنید برنامه های NEHE رو اجر کنم . من کد c++ درس های NEHE رو download کردم و فایل c++شو باز کردم کدهاشو کپی کردم توی یک پروژه جدید از نوع Win32 Console Application تو فایل c++ ش گذاشتم و در قسمت linker لینک هایی به opengl32.lib glu32.lib glut32.lib ایجاد کردم و بعد debug کردم کلی ایراد داره ...
اگر کسی نظری بده خوشحال می شم.

kochol
سه شنبه 15 اردیبهشت 1388, 15:39 عصر
سلام
تو قسمت دانلود های درس هاش فکر کنم یه قسمتی هم برای دانلود کد برای ++VC داره.
به نظر می یاد که تمام کارها را درست انجام داده اید.
خطاها رو اینجا می نوشتید شاید بتونم کمکتون کنم.

Nima_NF
سه شنبه 15 اردیبهشت 1388, 19:37 عصر
سلام
من هم تازه کار با openglرو شروع کردم، میشه کمکم کنید برنامه های NEHE رو اجر کنم . من کد c++ درس های NEHE رو download کردم و فایل c++شو باز کردم کدهاشو کپی کردم توی یک پروژه جدید از نوع Win32 Console Application تو فایل c++ ش گذاشتم و در قسمت linker لینک هایی به opengl32.lib glu32.lib glut32.lib ایجاد کردم و بعد debug کردم کلی ایراد داره ...
اگر کسی نظری بده خوشحال می شم.


1) اول اینکه پروژه نباید کنسول باشد، بلکه باید win32 project باشد. اگر هم Win32 Console Application را انتخاب کردید در wizard باید نوع پروژه را windows application انتخاب کنید نه console.

2) من این پاسخ زیر را چند وقت قبل برای همین سوال شما به یکی از دوستان دادم:

دقت کنید پروژه هایی که در سایت http://nehe.gamedev.net (http://nehe.gamedev.net/) هست به یک کتابخانه قدیمی GLAUX نیز نیاز داردو پس وارد سایت شوید در سمت چپ GLaux Replacement وجود دارد، کلیک کرده و آن را دانلود کنید و به کامپایلر اضافه کنید.


در هر صورت اگر این کار برایتان سخت هست، از سورس کدهایی استفاده کنید که مستقیم از win32 استفاده کند و دیگر نیاز نباشد از هیچ کتابخانه جانبی دیگری استفاده کنید، یعنی با همه کتابخانه های openGL که در ++visual C هست.پس به لینک زیر بروید و مثال ها را دانلود کنید:
http://www.opengl.org/resources/code...in32_tutorial/ (http://www.opengl.org/resources/code/samples/win32_tutorial/)
در این پروژه ها به کتابخانه GLAUX نیاز نیست.

pswin.pooya
چهارشنبه 16 اردیبهشت 1388, 21:41 عصر
نه تمام کتابخانه.
تمام کتابخانه ها همراه VC++ نیستند. کتابخونه های مهمی مثل glew ، glee و glut رو باید از خود سایت OpenGL قسمت SDK اون دریافت کنی.

یادت باشه که خطا ها مربوط به کنسول بودن و یا نبودن برنامه نیستش. لطفا شماره و توضیحات خطاها رو بگذار تا بتونیم کمکت کنیم. اگر خطاها مربوط به خود هدر gl باشه اون رو حذف کن و به جای اون از هدر glew استفاده کن. برای اینکه قابلیت پشیبانی از OpenGL 1.2 به بالا رو هم به برنامت اضافه کنی از دستور glewInit() استفاده کن تا الحاقی ها رو شناسایی کنه و آدرس اونها رو به توابع مربوطه بده.