Mahmood_N
06-10-2006, 12:05
سلام دوستان ...
تصميم گرفتم آموزش OpenGL رو به صورت کاربردي شروع کنم ...
من توي يه پست ديگه هم قبلا آموزش رو تا يه جاهايي نوشته بودم ولي چون اون پست شلوغ شد و ديگه کم کم داشت Down مي شد ، گفتم که يه پست جديد بدم و از ابتدا شروع کنم ...
خوب ...
براي آشنايي مقدماتي با OpenGL به لينک زير بريد :
ادامه بحث :
در ابتدا طريقه ساخت يک پنجره مخصوص OpenGL رو آموزش مي دم : ( نکته مهم : براي هرگونه استفاده از توابع و رسم اشکال 2 بعدي يا 3 بعدي با OpenGL بايد پنجره نخصوص اون رو ايجاد کنيد )
خوب ...
مراحل اين کار :
1. ايجاد DC
2. برپايي فرمت نقطه اي
3. ايجاد RC
نکته مهم : در هنگام خروج از برنامه بايد DC و RC ساخته شده را حذف نماييم که بعدا بحث خواهيم کرد ...
خوب در ابتدا بايد چند پروسجر رو به فرم برنامتون اضافه کنيد :
1. پروسجر CleanUp که براي پاک کردن DC و RC به کار مي ره :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در پروسجر بالا ، DC و RC را حذف مي کنيم و در صورتي که با خطا مواجه شويم پيغامي ظاهر خواهد شد ...
2. پروسجر InitGL براي شروع به کار پنجره مخصوص :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیددر پروسجر بالا از سه تابع استفاده شده :
( 1. glClearColor : براي تعيين رنگ به کار مي رود
2. glMatrixMode : اين تابع ماتريس جاري را تعيين مي کند ( از ماتريسها براي تعيين مکان اشياء و مکان دوربينها استفاده مي شود که سه مقدار دارد : GL_MODELVIEW که ماتريس پيشفرض مي باشد، GL_PROJECTION و GL_TEXTURE .
البته تابع ديگري هم استفاده شده به نام glLoadIdentity که ماتريس قابل تغيير فعلي رو به ماتريس اصلي و واحد تبديل مي کنه )
3. glOrtho : که ديد سه بعدي براي اشياء را فراهم مي کند )
3. پروسجر DrawGLScene که براي ايجاد قابليت رسم و رسم استفاده مي شود :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در پروسجر بالا هم ابتدا قابليت GL_DEPTH_TEST ( مربوط به عمق مي شود و با 39 مقدار ديگر قابل تغير است ) به برنامه اضافه مي شود و در آخر هم توابعي براي رسم به کار رفته است ...
اگر توجه کنيد از تابع glVertex3f براي رسم استفاده شده است که تمام آنها بين بلوکهاي Begin و end قرار گرفته اند ...
براي رسم اشياء بايد نام آنها را در قسمت Brgin وارد کرده و سپس شروع به رسم کنيم و سپس با بلوک end به رسم خود پايان دهيم ...
از تابع glFlush که در پايان آمده هم براي اطمينان از صحت رسم استفاده مي شود ...
خوب ...
4. پروسجر SetDCPixelFormat که براي ترسيم فرمت نقطه اي استفاده مي شود ...
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
چون در پروسجر بالا از توابع اي استفاده شده که قبلا توضيح داده شد ، ديگه از توضيح اونها صرف نظر مي کنيم ( با کمي نگاه کردم به کد مي تونيد کارش رو بفهميد ، البته اگه سئوالي پيش اومد حتما بپرسيد )
خوب پروسجرها تمام شدن ، حال مي ريم روي فرم تا رويدادهاش رو تنظيم کنيم :
اول در خاصيت FormCreate کد زير رو بنويسيد :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بعد در خاصيت FormDestroy کد زير رو بنويسيد :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بعد در خاصيت FormPaint کد زير رو بنويسيد :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا در خاصيت FormResize کد زير رو بنويسيد و تمام :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
توجه : دستورات hrc: HGLRC و f_Hdc : LongInt را در قسمت Var در اول کدهاي فرم به عنوان متغير تعريف کنيد ...
حالا ديگه تموم شد ...
البته ما در کدهاي بالا از توابعي استفاده کرديم که کامل توضيح داده نشدن ، ولي در پست بعدي فقط در مورد توابع و کاربردهاي اونها صحبت مي کنيم ...
موفق باشيد ...
تصميم گرفتم آموزش OpenGL رو به صورت کاربردي شروع کنم ...
من توي يه پست ديگه هم قبلا آموزش رو تا يه جاهايي نوشته بودم ولي چون اون پست شلوغ شد و ديگه کم کم داشت Down مي شد ، گفتم که يه پست جديد بدم و از ابتدا شروع کنم ...
خوب ...
براي آشنايي مقدماتي با OpenGL به لينک زير بريد :
ادامه بحث :
در ابتدا طريقه ساخت يک پنجره مخصوص OpenGL رو آموزش مي دم : ( نکته مهم : براي هرگونه استفاده از توابع و رسم اشکال 2 بعدي يا 3 بعدي با OpenGL بايد پنجره نخصوص اون رو ايجاد کنيد )
خوب ...
مراحل اين کار :
1. ايجاد DC
2. برپايي فرمت نقطه اي
3. ايجاد RC
نکته مهم : در هنگام خروج از برنامه بايد DC و RC ساخته شده را حذف نماييم که بعدا بحث خواهيم کرد ...
خوب در ابتدا بايد چند پروسجر رو به فرم برنامتون اضافه کنيد :
1. پروسجر CleanUp که براي پاک کردن DC و RC به کار مي ره :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در پروسجر بالا ، DC و RC را حذف مي کنيم و در صورتي که با خطا مواجه شويم پيغامي ظاهر خواهد شد ...
2. پروسجر InitGL براي شروع به کار پنجره مخصوص :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیددر پروسجر بالا از سه تابع استفاده شده :
( 1. glClearColor : براي تعيين رنگ به کار مي رود
2. glMatrixMode : اين تابع ماتريس جاري را تعيين مي کند ( از ماتريسها براي تعيين مکان اشياء و مکان دوربينها استفاده مي شود که سه مقدار دارد : GL_MODELVIEW که ماتريس پيشفرض مي باشد، GL_PROJECTION و GL_TEXTURE .
البته تابع ديگري هم استفاده شده به نام glLoadIdentity که ماتريس قابل تغيير فعلي رو به ماتريس اصلي و واحد تبديل مي کنه )
3. glOrtho : که ديد سه بعدي براي اشياء را فراهم مي کند )
3. پروسجر DrawGLScene که براي ايجاد قابليت رسم و رسم استفاده مي شود :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در پروسجر بالا هم ابتدا قابليت GL_DEPTH_TEST ( مربوط به عمق مي شود و با 39 مقدار ديگر قابل تغير است ) به برنامه اضافه مي شود و در آخر هم توابعي براي رسم به کار رفته است ...
اگر توجه کنيد از تابع glVertex3f براي رسم استفاده شده است که تمام آنها بين بلوکهاي Begin و end قرار گرفته اند ...
براي رسم اشياء بايد نام آنها را در قسمت Brgin وارد کرده و سپس شروع به رسم کنيم و سپس با بلوک end به رسم خود پايان دهيم ...
از تابع glFlush که در پايان آمده هم براي اطمينان از صحت رسم استفاده مي شود ...
خوب ...
4. پروسجر SetDCPixelFormat که براي ترسيم فرمت نقطه اي استفاده مي شود ...
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
چون در پروسجر بالا از توابع اي استفاده شده که قبلا توضيح داده شد ، ديگه از توضيح اونها صرف نظر مي کنيم ( با کمي نگاه کردم به کد مي تونيد کارش رو بفهميد ، البته اگه سئوالي پيش اومد حتما بپرسيد )
خوب پروسجرها تمام شدن ، حال مي ريم روي فرم تا رويدادهاش رو تنظيم کنيم :
اول در خاصيت FormCreate کد زير رو بنويسيد :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بعد در خاصيت FormDestroy کد زير رو بنويسيد :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بعد در خاصيت FormPaint کد زير رو بنويسيد :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا در خاصيت FormResize کد زير رو بنويسيد و تمام :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
توجه : دستورات hrc: HGLRC و f_Hdc : LongInt را در قسمت Var در اول کدهاي فرم به عنوان متغير تعريف کنيد ...
حالا ديگه تموم شد ...
البته ما در کدهاي بالا از توابعي استفاده کرديم که کامل توضيح داده نشدن ، ولي در پست بعدي فقط در مورد توابع و کاربردهاي اونها صحبت مي کنيم ...
موفق باشيد ...