نحوه ایجاد یک مکعب در OpenGL (با تصاویر)

فهرست مطالب:

نحوه ایجاد یک مکعب در OpenGL (با تصاویر)
نحوه ایجاد یک مکعب در OpenGL (با تصاویر)

تصویری: نحوه ایجاد یک مکعب در OpenGL (با تصاویر)

تصویری: نحوه ایجاد یک مکعب در OpenGL (با تصاویر)
تصویری: آموزش نصب لینوکس اوبونتو 2024, آوریل
Anonim

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

برای این پروژه به ویرایشگر کد و دانش برنامه نویسی C نیاز دارید.

مراحل

قسمت 1 از 3: راه اندازی اولیه

1994315 1 1
1994315 1 1

مرحله 1. نصب OpenGL برای شروع مراحل زیر را برای نصب OpenGL بر روی سیستم خود دنبال کنید

اگر قبلاً OpenGL و همچنین کامپایلر C سازگار دارید ، می توانید این مرحله را رد کرده و به مرحله بعدی بروید.

1994315 2 1
1994315 2 1

مرحله 2. سند را ایجاد کنید

یک فایل جدید در ویرایشگر کد مورد علاقه خود ایجاد کنید و آن را به عنوان mycube.c ذخیره کنید

1994315 3 1
1994315 3 1

مرحله 3. اضافه کردن #شامل

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

    // شامل #شامل #شامل #شامل #شامل #تعریف GL_GLEXT_PROTOTYPES #ifdef _APPLE_ #شامل #دیگر #شامل #endif

1994315 4 1
1994315 4 1

مرحله 4. نمونه های اولیه تابع و متغیرهای جهانی را اضافه کنید

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

    // Function Prototypes void display ()؛ void specialKeys ()؛ // متغیرهای سراسری double rotate_y = 0؛ double rotate_x = 0؛

1994315 5 1
1994315 5 1

مرحله 5. تابع main () را تنظیم کنید

    int main (int argc، char* argv ) {// مقداردهی اولیه GLUT و پردازش پارامترهای کاربر glutInit (& argc، argv)؛ // درخواست پنجره رنگی بافر دوگانه با Z-buffer glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) ؛

  • این عبارت محیط شما را تنظیم می کند. نکته مهمی که هنگام نوشتن برنامه های OpenGL باید به خاطر داشته باشید این است که باید همه چیز را بخواهید. این امر مستلزم این است که شما درک بهتری از نحوه عملکرد برنامه خود و آنچه برای به دست آوردن عملکرد مورد نظر خود نیاز دارید ، داشته باشید. در این خط ، صفحه نمایش را با بافر دوگانه ، رنگ RGB و بافر Z تنظیم می کنید.
  • بافر دوگانه این تکنیکی است که در برنامه های گرافیکی برای از بین بردن مشکلی که به دلیل نحوه کشیدن تصاویر به صفحه ایجاد می شود استفاده می شود. هر بار که صحنه را دوباره ترسیم می کنید ، ابتدا صفحه نمایش باید پاک شود سپس اطلاعات جدید ترسیم می شود. بدون بافر دوگانه ، یک اثر سوسو زدن را مشاهده می کنید ، زیرا صفحه به طور مکرر پاک می شود و دوباره ترسیم می شود.
  • این مشکل با افزودن بافر دوم برای رسم برطرف می شود. با این روش ، تصویری به اولین بافر کشیده می شود و آن بافر به شما نشان داده می شود. قاب بعدی به بافر دوم کشیده می شود و وقتی این کار انجام شد ، دو بافر جای خود را تغییر می دهند. بلافاصله بافر دوم را مشاهده خواهید کرد ، اما ، از دید ما مخفی شده است ، اولین بافر پاک می شود و با قاب سوم مجدداً ترسیم می شود که پس از اتمام جایگزین می شود.
  • همچنین می خواهید برنامه را فعال کنید رنگ RGB سیستم در پنجره شما
  • بافر Z نحوه دریافت جلوه های سه بعدی مورد نظر شما است. OpenGL از یک سیستم مختصات سه بعدی با محورهای x ، y و z استفاده می کند. برای این که جسمی به شما نزدیکتر باشد ، موقعیت آن در محور z افزایش می یابد ، اما برای اینکه دورتر به نظر برسد موقعیت آن در محور z کاهش می یابد.
1994315 6 1
1994315 6 1

مرحله 6. پنجره را ایجاد کنید

گام بعدی این است که ایجاد پنجره درون آن مکعب را ترسیم می کنید. در این آموزش ، پنجره "مکعب عالی" نامیده می شود.

    // ایجاد پنجره glutCreateWindow ("مکعب عالی") ؛

1994315 7 1
1994315 7 1

مرحله 7. تست عمق را فعال کنید

OpenGL یک زبان سختگیرانه است زیرا فرض نمی کند هیچ ویژگی خاصی فعال باشد. برای اینکه برنامه شما با استفاده از Z-buffer که قبلاً به آن نگاه کرده اید به درستی در سه بعد نمایش داده شود ، باید این کار را انجام دهید تست عمق را فعال کنید به همانطور که به کاوش OpenGL ادامه می دهید ، بسیاری از ویژگی هایی را که برای فعال کردن آنها نیاز دارید ، از جمله روشنایی ، بافت ، نمای رو به جلو و موارد دیگر را پیدا خواهید کرد.

    // فعال کردن آزمون عمق بافر Z glEnable (GL_DEPTH_TEST) ؛

1994315 8 1
1994315 8 1

مرحله 8. توابع تماس را اضافه کنید

در اینجا توابع فراخوانی است که نمونه های اولیه آن را قبلاً نوشته اید. هر بار از طریق حلقه اصلی ، این توابع فراخوانی می شوند. عملکرد صفحه نمایش را بر اساس هرگونه تغییر در متغیرهایی که از فراخوان قبلی ایجاد شده است ، دوباره ترسیم می کند. عملکرد specialKeys به ما امکان می دهد با برنامه تعامل داشته باشیم.

    // توابع فراخوانی glutDisplayFunc (نمایش) ؛ glutSpecialFunc (specialKeys) ؛

1994315 9 1
1994315 9 1

مرحله 9. MainLoop را راه اندازی کنید

با این کار تا زمانی که برنامه را نبندید و اجازه ایجاد انیمیشن و تعامل با کاربر را ندهید ، عملکرد اصلی را فراخوانی می کند.

    // گذراندن کنترل به GLUT برای رویدادها glutMainLoop ()؛ // بازگشت به سیستم عامل بازگشت 0؛ }

قسمت 2 از 3: تابع () display ()

1994315 10 1
1994315 10 1

مرحله 1. هدف این تابع را درک کنید

تمام کارهای رسم مکعب شما در این تابع انجام می شود. ایده کلی پشت مکعب شما این است که هر شش ضلع را به صورت جداگانه بکشید و آنها را در موقعیت مناسب قرار دهید.

از نظر مفهومی ، هر طرف با تعریف چهار گوشه و اجازه دادن به OpenGL خطوط را متصل کرده و آن را با رنگی که شما تعریف می کنید ، ترسیم می کند. در زیر مراحل انجام این کار آمده است

1994315 11 1
1994315 11 1

مرحله 2. glClear () را اضافه کنید

اولین گامی که باید در این تابع بردارید این است که رنگ و بافر Z را پاک کنید به بدون این مراحل ، نقشه های قدیمی ممکن است همچنان در زیر نقاشی های جدید قابل مشاهده باشند و اشیاء ترسیم شده در مکان مناسب روی صفحه قرار نگیرند.

    void display () {// پاک کردن صفحه و Z-buffer glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ؛

1994315 12 1
1994315 12 1

مرحله 3. glBegin () و glEnd () را اضافه کنید

OpenGL اشیاء را ترکیبی از چند ضلعی های مختلف تعریف می کند. با استفاده از glBegin () فرمان ، شما به طور موثری مدادی را می گذارید که شکل را ترسیم می کند. برای بلند کردن مداد و شروع یک شکل جدید ، باید از آن استفاده کنید glEnd () فرمان در این آموزش شما از GL_POLYGON برای رسم هر طرف مکعب استفاده خواهید کرد اما می توانید از پارامترهای دیگر مانند GL_LINE ، GL_QUAD یا GL_TRIANGLE برای ایجاد اشکال دیگر استفاده کنید.

  • در اینجا شما باید از قسمت جلوی مکعب خود شروع کنید. بعداً به هر 6 طرف رنگ اضافه می کنید.
  • // سمت چند رنگ - FRONT glBegin (GL_POLYGON) ؛ // Vertices در مرحله بعدی اضافه می شود glEnd ()؛

1994315 13 1
1994315 13 1

مرحله 4. glVertex3f () را اضافه کنید

هنگامی که اظهار داشتید که می خواهید چند ضلعی خود را شروع کنید ، باید این کار را انجام دهید راس ها را تعریف کنید از شی بسته به آنچه می خواهید با شیء خود انجام دهید ، glVertex دارای چندین فرم است.

  • اولین مورد این است که در چند بعد کار می کنید. 3 مورد فوق در glVertex3f می گوید شما در 3 بعد طراحی می کنید. همچنین امکان کار در 2 یا 4 بعد وجود دارد. f بالا در glVertex3f می گوید شما با اعداد نقطه شناور کار می کنید. همچنین می توانید از شورت ، عدد صحیح یا دو نفره استفاده کنید.
  • توجه کنید که این نقاط در a تعریف شده اند پادساعتگرد شیوه. این در حال حاضر چندان مهم نیست ، اما هنگامی که شروع به کار با نور ، بافت و رو به جلو می کنید ، این امر فوق العاده مهم خواهد شد ، بنابراین عادت کنید که نقاط خود را در خلاف جهت عقربه های ساعت مشخص کنید.
  • رئوس بین خطوط glBegin () و glEnd () را اضافه کنید.
  • // سمت چند رنگ - FRONT glBegin (GL_POLYGON) ؛ glVertex3f (-0.5 ، -0.5 ، -0.5) ؛ // P1 glVertex3f (-0.5 ، 0.5 ، -0.5) ؛ // P2 glVertex3f (0.5 ، 0.5 ، -0.5) ؛ // P3 glVertex3f (0.5 ، -0.5 ، -0.5) ؛ // P4 glEnd ()؛

1994315 14 1
1994315 14 1

مرحله 5. glColor3f () را اضافه کنید

glColor مشابه glVertex کار می کند. می توانید نقاط را به عنوان شورت ، صحیح ، دو نفره یا شناور تعریف کنید. هر رنگ دارای مقداری از 0 تا 1 است. همه صفرها نقطه را سیاه و همه 1 ها نقطه را سفید می کند. 3 در glColor3f () به سیستم رنگی RGB بدون کانال آلفا اشاره دارد. آلفا یک رنگ شفافیت آن را مشخص می کند. برای تغییر سطح آلفا ، از glColor4f () استفاده کنید که آخرین پارامتر آن مقدار 0 تا 1 برای مات به شفاف است.

  • هنگام فراخوانی glColor3f () هر راس از آن نقطه به بعد از آن رنگ خواهد بود. بنابراین ، اگر می خواهید هر چهار راس قرمز باشند ، کافیست قبل از دستورات glVertex3f () یکبار رنگ را تنظیم کنید و همه رئوس قرمز می شوند.
  • قسمت جلویی که در زیر تعریف شده است نحوه تعیین رنگ جدید برای هر راس را نشان می دهد. وقتی این کار را انجام می دهید ، می توانید یک ویژگی جالب از رنگ های OpenGL را مشاهده کنید. از آنجا که هر راس چند ضلعی رنگ خاص خود را دارد ، OpenGL به طور خودکار رنگها را ترکیب می کند! مرحله بعدی نحوه اختصاص چهار راس با یک رنگ را نشان می دهد.
  • // سمت چند رنگ - FRONT glBegin (GL_POLYGON) ؛ glColor3f (1.0 ، 0.0 ، 0.0) ؛ glVertex3f (0.5 ، -0.5 ، -0.5) ؛ // P1 قرمز glColor3f است (0.0 ، 1.0 ، 0.0) ؛ glVertex3f (0.5 ، 0.5 ، -0.5) ؛ // P2 سبز glColor3f است (0.0 ، 0.0 ، 1.0) ؛ glVertex3f (-0.5 ، 0.5 ، -0.5) ؛ // P3 آبی glColor3f است (1.0 ، 0.0 ، 1.0) ؛ glVertex3f (-0.5 ، -0.5 ، -0.5) ؛ // P4 بنفش glEnd () است؛

1994315 15 1
1994315 15 1

مرحله 6. طرفهای دیگر را کنترل کنید

بررسی کنید که مکان هر راس برای پنج ضلع دیگر مکعب چگونه خواهد بود اما برای سادگی ، این موارد برای شما محاسبه شده است و در تابع نمایشگر نهایی () در زیر

    // سمت سفید - BACK glBegin (GL_POLYGON) ؛ glColor3f (1.0 ، 1.0 ، 1.0) ؛ glVertex3f (0.5 ، -0.5 ، 0.5) ؛ glVertex3f (0.5 ، 0.5 ، 0.5) ؛ glVertex3f (-0.5 ، 0.5 ، 0.5) ؛ glVertex3f (-0.5 ، -0.5 ، 0.5) ؛ glEnd ()؛ // طرف بنفش - RIGHT glBegin (GL_POLYGON) ؛ glColor3f (1.0 ، 0.0 ، 1.0) ؛ glVertex3f (0.5 ، -0.5 ، -0.5) ؛ glVertex3f (0.5 ، 0.5 ، -0.5) ؛ glVertex3f (0.5 ، 0.5 ، 0.5) ؛ glVertex3f (0.5 ، -0.5 ، 0.5) ؛ glEnd ()؛ // سمت سبز - LEFT glBegin (GL_POLYGON) ؛ glColor3f (0.0 ، 1.0 ، 0.0) ؛ glVertex3f (-0.5 ، -0.5 ، 0.5) ؛ glVertex3f (-0.5 ، 0.5 ، 0.5) ؛ glVertex3f (-0.5 ، 0.5 ، -0.5) ؛ glVertex3f (-0.5 ، -0.5 ، -0.5) ؛ glEnd ()؛ // سمت آبی - TOP glBegin (GL_POLYGON) ؛ glColor3f (0.0 ، 0.0 ، 1.0) ؛ glVertex3f (0.5 ، 0.5 ، 0.5) ؛ glVertex3f (0.5 ، 0.5 ، -0.5) ؛ glVertex3f (-0.5 ، 0.5 ، -0.5) ؛ glVertex3f (-0.5 ، 0.5 ، 0.5) ؛ glEnd ()؛ // سمت قرمز - BOTTOM glBegin (GL_POLYGON) ؛ glColor3f (1.0 ، 0.0 ، 0.0) ؛ glVertex3f (0.5 ، -0.5 ، -0.5) ؛ glVertex3f (0.5 ، -0.5 ، 0.5) ؛ glVertex3f (-0.5 ، -0.5 ، 0.5) ؛ glVertex3f (-0.5 ، -0.5 ، -0.5) ؛ glEnd ()؛ glFlush ()؛ glutSwapBuffers ()؛ }

  • ما همچنین می خواهیم دو خط آخر کد را برای این تابع اضافه کنیم. اینها هستند glFlush ()؛

    و glutSwapBuffers ()؛

    که اثر بافر دوگانه ای را که قبلاً در مورد آن یاد گرفته اید به ما می دهد.

قسمت 3 از 3: تعامل کاربر

1994315 16 1
1994315 16 1

مرحله 1. specialKeys () را اضافه کنید

کار شما تقریبا تمام شده است ، اما در حال حاضر می توانید یک مکعب را بکشید اما راهی برای چرخاندن آن ندارید. برای انجام این کار ، شما می خواهید ایجاد specialKeys () عملکرد به ما اجازه می دهد تا کلیدهای جهت دار را فشار داده و مکعب را بچرخانیم!

  • این تابع به همین دلیل است که متغیرهای جهانی rotate_x و rotate_y را اعلام کردید. وقتی کلیدهای جهت دار راست و چپ را فشار می دهید ، rotate_y 5 درجه افزایش یا کاهش می یابد. به طور مشابه ، هنگامی که کلیدهای جهت دار بالا و پایین را فشار می دهید ، rotate_x بر این اساس تغییر می کند.
  • void specialKeys (کلید int ، int x ، int y) {// پیکان راست - چرخش را تا 5 درجه افزایش دهید (کلید == GLUT_KEY_RIGHT) rotate_y += 5 ؛ // پیکان چپ - چرخش را تا 5 درجه دیگر کاهش دهید (کلید == GLUT_KEY_LEFT) rotate_y - = 5 ؛ در غیر این صورت (key == GLUT_KEY_UP) rotate_x += 5؛ در غیر این صورت (key == GLUT_KEY_DOWN) rotate_x -= 5؛ // درخواست بروز رسانی صفحه نمایش glutPostRedisplay ()؛ }

1994315 17 1
1994315 17 1

مرحله 2. glRotate () را اضافه کنید

آخرین بیانیه شما این است که گزاره ای را اضافه کنید که شیء شما را می چرخاند. به تابع display () برگردید و قبل از سمت FRONT ، این خطوط را اضافه کنید:

    // بازنشانی تغییرات glLoadIdentity ()؛ // هنگامی که کاربر rotate_x و rotate_y glRotatef (rotate_x ، 1.0 ، 0.0 ، 0.0) را تغییر می دهد ، بچرخید. glRotatef (rotate_y ، 0.0 ، 1.0 ، 0.0) ؛ // سمت چند رنگ - جلو….

  • اولین توجه داشته باشید که نحو از glRotatef () مشابه glColor3f () و glVertex3f () است اما همیشه به 4 پارامتر نیاز دارد. اولین پارامتر میزان چرخش است که باید اعمال شود. سه پارامتر بعدی تعیین می کند که کدام محور را بچرخانید که اول محور x ، دوم محور y و سوم محور z است. در حال حاضر شما فقط باید در مورد محور x و y بچرخید.
  • همه تغییراتی که در برنامه خود می نویسید به خطوط مشابه این نیاز دارند. از نظر مفهومی ، می توانید تصور کنید که شیء خود را در مورد محور x با مقدار تعریف شده توسط rotate_x و سپس در اطراف محور y توسط rotate_y می چرخاند. با این حال ، OpenGL همه این جملات را در یک تبدیل ماتریس ترکیب می کند. هر بار که با تابع نمایشگر تماس می گیرید ، یک ماتریس تبدیل ایجاد می کنید و glLoadIdentity () اطمینان می دهد که در هر پاس با یک ماتریس جدید شروع خواهید کرد.
  • دیگر توابع تبدیل که می توانید اعمال کنید عبارتند از glTranslatef () و glScalef (). این توابع شبیه glRotatef () هستند به استثنای اینکه فقط 3 پارامتر ، مقادیر x ، y و z را برای ترجمه یا مقیاس بندی شی انتخاب می کنند.
  • برای به دست آوردن اثر صحیح هنگام اعمال هر سه تبدیل روی یک شیء ، باید آنها را به ترتیب صحیح اعمال کنید. همیشه آنها را به ترتیب بنویسید glTranslate ، glRotate ، سپس glScale به OpenGL اساساً تغییرات را به صورت پایین به بالا اعمال می کند. برای درک این موضوع سعی کنید تصور کنید که یک مکعب ساده 1x1x1 با تغییرات چگونه خواهد بود اگر OpenGL آنها را از بالا به پایین و اگر OpenGL آنها را از پایین به بالا اعمال می کند.
1994315 18 1
1994315 18 1

مرحله 3. دستورات زیر را اضافه کنید تا مکعب را در طول محور x 2 ، در امتداد محور y مقیاس دهید ، مکعب را 180 درجه در مورد محور y بچرخانید و مکعب را 0.1 در امتداد محور x ترجمه کنید

اطمینان حاصل کنید که این دستورات و دستورات قبلی glRotate () را به ترتیب صحیح ترتیب دهید. (اگر مطمئن نیستید ، این کار را در کد نهایی در پایان آموزش انجام دهید.)

    // سایر تغییرات glTranslatef (0.1 ، 0.0 ، 0.0) ؛ glRotatef (180 ، 0.0 ، 1.0 ، 0.0) ؛ glScalef (2.0 ، 2.0 ، 0.0) ؛

1994315 19 1
1994315 19 1

مرحله 4. کد خود را کامپایل و اجرا کنید

با فرض اینکه از gcc به عنوان کامپایلر خود استفاده می کنید ، این دستورات را از ترمینال خود اجرا کرده و برنامه خود را کامپایل و آزمایش کنید.

    در لینوکس: gcc cube.c -o cube -lglut -lGL./ mycube در مک: gcc -o foo foo.c -framework GLUT -framework OpenGL./ mycube در Windows: gcc -Wall -ofoo foo.c -lglut32cu - lglu32 -lopengl32./ mycube

1994315 20 1
1994315 20 1

مرحله 5. کد کامل خود را بررسی کنید

باید اینجوری باشه:

    // // فایل: mycube.c // نویسنده: Matt Daisley // ایجاد: 4/25/2012 // پروژه: کد منبع برای ساختن یک مکعب در OpenGL // توضیحات: یک پنجره OpenGL ایجاد می کند و یک مکعب سه بعدی ترسیم می کند/ / اینکه کاربر می تواند با استفاده از کلیدهای جهت دار بچرخد // // کنترل ها: پیکان چپ -چرخش به چپ // پیکان راست -چرخش به راست // پیکان بالا -چرخش به بالا // پیکان رو به پایین -چرخش به پایین // ------ ------------------------------------------------------ -- // شامل می شود // ------------------------------------------- --------------- #شامل #شامل #شامل #تعریف #GL_GLEXT_PROOTOTYPES #ifdef _APPLE_ #شامل #دیگر #شامل #endif // ------------- --------------------------------------------- // نمونه های اولیه عملکرد / / ----------------------------------------------------- --------- نمایش خالی ()؛ void specialKeys ()؛ // ---------------------------------------------------- ---------- // متغیرهای جهانی // ---------------------------------- ------------------------- دوبار rotate_y = 0 ؛ double rotate_x = 0؛ // ---------------------------------------------------- ---------- // نمایش () عملکرد تماس () ---------------------------------- --------------------------- نمایش خالی () {// پاک کردن صفحه و Z-buffer glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) ؛ // بازنشانی تغییرات glLoadIdentity ()؛ // سایر تحولات // glTranslatef (0.1 ، 0.0 ، 0.0) ؛ // شامل نمی شود // glRotatef (180 ، 0.0 ، 1.0 ، 0.0) ؛ // شامل نمی شود // چرخش هنگام تغییر کاربر rotate_x و rotate_y glRotatef (rotate_x ، 1.0 ، 0.0 ، 0.0) ؛ glRotatef (rotate_y ، 0.0 ، 1.0 ، 0.0) ؛ // سایر تحولات // glScalef (2.0 ، 2.0 ، 0.0) ؛ // شامل نمی شود // سمت چند رنگ - FRONT glBegin (GL_POLYGON) ؛ glColor3f (1.0 ، 0.0 ، 0.0) ؛ glVertex3f (0.5 ، -0.5 ، -0.5) ؛ // P1 قرمز glColor3f است (0.0 ، 1.0 ، 0.0) ؛ glVertex3f (0.5 ، 0.5 ، -0.5) ؛ // P2 سبز glColor3f است (0.0 ، 0.0 ، 1.0) ؛ glVertex3f (-0.5 ، 0.5 ، -0.5) ؛ // P3 آبی glColor3f است (1.0 ، 0.0 ، 1.0) ؛ glVertex3f (-0.5 ، -0.5 ، -0.5) ؛ // P4 بنفش glEnd () است؛ // سمت سفید - BACK glBegin (GL_POLYGON) ؛ glColor3f (1.0 ، 1.0 ، 1.0) ؛ glVertex3f (0.5 ، -0.5 ، 0.5) ؛ glVertex3f (0.5 ، 0.5 ، 0.5) ؛ glVertex3f (-0.5 ، 0.5 ، 0.5) ؛ glVertex3f (-0.5 ، -0.5 ، 0.5) ؛ glEnd ()؛ // طرف بنفش - RIGHT glBegin (GL_POLYGON) ؛ glColor3f (1.0 ، 0.0 ، 1.0) ؛ glVertex3f (0.5 ، -0.5 ، -0.5) ؛ glVertex3f (0.5 ، 0.5 ، -0.5) ؛ glVertex3f (0.5 ، 0.5 ، 0.5) ؛ glVertex3f (0.5 ، -0.5 ، 0.5) ؛ glEnd ()؛ // سمت سبز - LEFT glBegin (GL_POLYGON) ؛ glColor3f (0.0 ، 1.0 ، 0.0) ؛ glVertex3f (-0.5 ، -0.5 ، 0.5) ؛ glVertex3f (-0.5 ، 0.5 ، 0.5) ؛ glVertex3f (-0.5 ، 0.5 ، -0.5) ؛ glVertex3f (-0.5 ، -0.5 ، -0.5) ؛ glEnd ()؛ // سمت آبی - TOP glBegin (GL_POLYGON) ؛ glColor3f (0.0 ، 0.0 ، 1.0) ؛ glVertex3f (0.5 ، 0.5 ، 0.5) ؛ glVertex3f (0.5 ، 0.5 ، -0.5) ؛ glVertex3f (-0.5 ، 0.5 ، -0.5) ؛ glVertex3f (-0.5 ، 0.5 ، 0.5) ؛ glEnd ()؛ // سمت قرمز - BOTTOM glBegin (GL_POLYGON) ؛ glColor3f (1.0 ، 0.0 ، 0.0) ؛ glVertex3f (0.5 ، -0.5 ، -0.5) ؛ glVertex3f (0.5 ، -0.5 ، 0.5) ؛ glVertex3f (-0.5 ، -0.5 ، 0.5) ؛ glVertex3f (-0.5 ، -0.5 ، -0.5) ؛ glEnd ()؛ glFlush ()؛ glutSwapBuffers ()؛ } // --------------------------------------------------- ----------- // specialKeys () عملکرد تماس با ما // ------------------------------ ---------------------------- void specialKeys (کلید int ، int x ، int y) {// پیکان راست-افزایش چرخش 5 درجه if (key == GLUT_KEY_RIGHT) rotate_y += 5؛ // پیکان چپ - چرخش را تا 5 درجه دیگر کاهش دهید (کلید == GLUT_KEY_LEFT) rotate_y - = 5 ؛ در غیر این صورت (key == GLUT_KEY_UP) rotate_x += 5؛ در غیر این صورت (key == GLUT_KEY_DOWN) rotate_x -= 5؛ // درخواست بروز رسانی صفحه نمایش glutPostRedisplay ()؛ } // --------------------------------------------------- ----------- // تابع main () // ---------------------------------- --------------------------- int main (int argc، char* argv ) {// مقداردهی اولیه GLUT و پردازش پارامترهای کاربر glutInit (& argc، argv)؛ // درخواست پنجره رنگی بافر دوگانه با Z-buffer glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) ؛ // ایجاد پنجره glutCreateWindow ("مکعب عالی") ؛ // فعال کردن آزمون عمق بافر Z glEnable (GL_DEPTH_TEST) ؛ // توابع فراخوانی glutDisplayFunc (نمایش) ؛ glutSpecialFunc (specialKeys) ؛ // گذراندن کنترل به GLUT برای رویدادها glutMainLoop ()؛ // بازگشت به سیستم عامل بازگشت 0؛ }

توصیه شده: