PDA

View Full Version : یک مشکل کوچولو در opengl



sahar_amini
یک شنبه 31 تیر 1386, 09:42 صبح
سلام دوستان خوبم
دوستان من به یک گیر کوچولو در opengl پیدا کردم کسی می تونه کمکم کنه
من یک برنامه برای opengl در c++ نوشتم که طراحی یک خانه با texture های مختلف است
من این دستور رو برای texture می نویسم

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL _REPEAT); که یک texture در یک مربع تکرار شود ولی وقتی برنامه رو اجرا می کنم هیچ texture وجود ندارد ولی با این دستور texture اعمال می شود


glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTE R,GL_NEAREST);این یک مشکل بود
مشکل دیگه اینه که استادمون گفته در هنگام حرکت دوربین نباید از دیوار رد بشه ولی من نمی دونم چطوری
میشه سریعتر به من کمک کنید نیاز فوری دارم

pswin.pooya
یک شنبه 31 تیر 1386, 11:37 صبح
سلام
برای استفاده از چند بافت باید از multitexturing استفاده کنی.
میتونی نمونه برنامه ای رو که میخوای خیلی راحت از رو سایت nehe.gamedev.net داونلود کنی. و به همین شکل میتونی از سورس کدهای آماده که داخل سایت nehe هستند استفاده کنی.
مشکل اعمال بافت میتونه از چند چیز مختلف نشات بگیره یکی از اون موارد اینه که باید قبل از اینکه از فایلهای آماده گرافیکی استفاده کنی باید اونا رو تبدیل به فرمت خام یا raw بکنی و بعد با استفاده از توابع اون رو داخل بافر لود کنی و بعد از اون از تابع gltexcoordf استفاده کنی تا بافت مورد نظرتو روی سطح مورد نظرت به نگاری (maping) !!! :D
برای اینکه بتونی راحتر جایی رو که خطا رخ میده و مانع از اعمال بافت میشه پیدا کنی میتونی از تابع glGetError استفاده کنی برای مثال کد زیر بررسی میکنه که خطا رخ داده یا نه؟

if (glGetError != GL_NO_ERROR){
//report error
}

sahar_amini
یک شنبه 31 تیر 1386, 19:22 عصر
ممنون دوست عزیز
ولی من می تونم texture رو روی مربع بندازم ولی نمی تونم مثلا 10 تا از همون texture رو روی همون مربع تکرار کنم یعنی با WRAPو REPEAT

pswin.pooya
یک شنبه 31 تیر 1386, 21:00 عصر
سلام
احتمالا مشکل شما تو تعریف پارامترهای دستور gltexcoordf هست.به عنوان مثال ممکنه که شما فقط از مقدار یک استفاده میکنین.در صورتی که میخوایین بافت پنج بار تکرار شه بجای یک مقدار 10 رو قرار بدین.

kochol
دوشنبه 01 مرداد 1386, 08:35 صبح
سلام
نیازی به دستور اولی نیست چون خود اپن جی ال به صورت پیش فرض یه تکستچر رو تکرار می کند احتمالا اشکال از تکستچر مپینگ هست.

sahar_amini
چهارشنبه 03 مرداد 1386, 17:49 عصر
سلام دوستان
مشکل تکرار texture حل شد
ممنونم از کمکتون
ولی هنوز مشکل از دیوار رد نشدن حل نشده
من keyup رو false می کن وقتی به دیوار می رسم ولی از اون خط رد میشه
ممنون می شم کمکم کنید

pswin.pooya
چهارشنبه 03 مرداد 1386, 18:19 عصر
سلام
برای حل شدن این مشکل هم میتونی به سورس کد زیر یه نگاهی بندازی

http://www.codesampler.com/source/ogl_solidnode_bsp.zip

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

من برای اولین بار که کار با OpenGL رو شروع کرده بودم یه مثال رو از nehe داونلود کردم و بعد اونو تکمیل کردمش و دادم به استادم :D تا نمره کلاسیمو بگیرم. تو این مثال یه خونه وسط یه حیاط که از چهار طرف به دیوار محدود شده قرار داره شما میتونی با کلید های اشارهگر تو محیط حیاط حرکت کنی و البته نمی تونی از دیوارها هم رد شی.فقط من نتونستم نسخه کامل این سورس کد رو پیدا کنم این نسخه که نسبت به نسخه کامل یه سری چیزها کمتر داره.مثل پنجره ، رود داخل حیاط و وسایل داخل خونه.اما فکر کنم به دردت بخوره

sahar_amini
یک شنبه 07 مرداد 1386, 11:00 صبح
از کمکتون واقعا ممنونم