نحوه ایجاد یک مکعب در OpenGL

نویسنده: Gregory Harris
تاریخ ایجاد: 12 ماه آوریل 2021
تاریخ به روزرسانی: 1 جولای 2024
Anonim
OpenGL Tutorial 23 - Drawing a Cube
ویدیو: OpenGL Tutorial 23 - Drawing a Cube

محتوا

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

مراحل

قسمت 1 از 3: نصب اولیه

  1. 1 OpenGL را نصب کنید. با آموزش نحوه نصب OpenGL بر روی رایانه خود شروع کنید. اگر قبلاً OpenGL و کامپایلر C دارید ، می توانید این مرحله را رد کرده و به مرحله بعدی بروید.
  2. 2 سند ایجاد کنید. یک فایل جدید در ویرایشگر کد مورد علاقه خود ایجاد کنید و آن را به عنوان mycube.c ذخیره کنید
  3. 3 اضافه کردن #شامل. در اینجا دستورالعمل های اساسی #شامل دستورالعمل های مورد نیاز شما آمده است. مهم است که به خاطر داشته باشید که دستورالعمل ها برای سیستم عامل های مختلف متفاوت است ، و بنابراین شما باید همه چیز را انتخاب کنید تا برنامه جهانی باشد و بر روی هر سیستم اجرا شود.

      // شامل #include stdio.h> #include stdarg.h> #include ریاضی. h> #تعریف GL_GLEXT_PROTOTYPES #ifdef __APPLE__ #شامل GLUT / glut.h> #دیگر #شامل GL / glut.h> #endif

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

      // نمونه های اولیه عملکردی void display ()؛ void specialKeys ()؛ // متغیرهای سراسری double rotate_y = 0؛ double rotate_x = 0؛

  5. 5 تابع main () را تعریف کنید.

      int main (int argc، char * argv []) // مقداردهی اولیه GLUT و پردازش پارامترهای سفارشی glutInit (& argc، argv)؛ // درخواست پنجره ای با پشتیبانی از دو بافر ، Z-Buffering و True Color glutInitDisplayMode (GLUT_DOUBLE

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

  1. 1 هدف از تابع display () را درک کنید. تمام کارهای ارائه مکعب بر روی خطوط شکننده این تابع قرار می گیرد. ایده کلی این است: شما شش صورت جداگانه از مکعب را ترسیم کرده و آنها را در موقعیت های مربوطه خود قرار می دهید.
    • برای هر صورت ، چهار گوشه تعریف می کنید ، و OpenGL آنها را با خطوط متصل می کند و آنها را با رنگ انتخابی شما پر می کند. نحوه انجام این کار در زیر توضیح داده خواهد شد.
  2. 2 تابع () glClear را اضافه کنید. اول از همه ، هنگام کار با این عملکرد ، ما نیاز داریم رنگ شفاف و z-buffer... بدون این ، تصویر قدیمی در زیر تصویر جدید قابل مشاهده است و اشیاء ترسیم شده توسط برنامه به اشتباه قرار می گیرند.

      void display () // Clear The Screen And Z Buffer glClear (GL_COLOR_BUFFER_BIT

    • به دو خط آخر توجه کنید. اینها توابع هستند glFlush ()؛ و glutSwapBuffers ()؛، ایجاد اثر بافر دوگانه ، که در بالا توضیح داده شد.

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

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

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

      // Reset Transforms 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 () است ، اما همیشه به چهار پارامتر نیاز دارد. اول زاویه چرخش بر حسب درجه است. سه مورد بعدی محورهایی هستند که در طول آنها چرخش انجام می شود ، به ترتیب x ، y ، z. در حال حاضر ، ما باید مکعب را در دو محور x و y بچرخانیم.
    • همه تغییراتی که در برنامه تعریف می کنیم به خطوط مشابه نیاز دارند. اساساً ، ما چرخش یک شی را در امتداد محور x به عنوان تغییر در مقدار rotate_x و چرخش در طول محور y را به عنوان تغییر در مقدار rotate_y نشان می دهیم. با این حال ، OpenGL همه چیز را به یک ماتریس تبدیل تبدیل می کند. هربار که با صفحه نمایش تماس می گیرید ، یک ماتریس تبدیل ایجاد می کنید ، و glLoadIdentity () به شما امکان می دهد هر بار با یک ماتریس جدید شروع کنید.
    • سایر توابع تبدیل که ممکن است استفاده کرده باشید glTranslatef () و glScalef () هستند. آنها شبیه glRotatef () هستند ، با این تفاوت که فقط به سه پارامتر نیاز دارند: مقادیر x ، y و z برای تغییر اندازه و مقیاس بندی شی.
    • برای اینکه همه چیز به درستی نمایش داده شود وقتی که هر سه تبدیل روی یک شی اعمال می شود ، باید تغییرات را به ترتیب مناسب ، یعنی glTranslate ، glRotate ، glScale - و هرگز غیر این صورت OpenGL با خواندن برنامه از پایین به بالا ، شی را تغییر می دهد. برای درک بهتر این موضوع ، تصور کنید که مکعب 1x1x1 در صورت مشاهده همه تغییرات اگر OpenGL آنها را به ترتیب نشان داده شده (از بالا به پایین) نشان دهد ، و سپس در مورد نحوه پردازش مکعب با باز کردن دستورالعمل از پایین به بالا فکر کنید.
  3. 3 دستورات زیر را اضافه کنید تا مکعب را دوبار در جهت x و 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) ؛

  4. 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

  5. 5 کد نهایی را بررسی کنید. در اینجا کد نهایی ایجاد شده توسط نویسنده مقاله است که نظرات را ترجمه نمی کند.

      // // فایل: mycube.c // نویسنده: Matt Daisley // ایجاد شده: 4/25/2012 // پروژه: کد منبع برای ایجاد یک مکعب در OpenGL // توضیحات: یک پنجره OpenGL ایجاد می کند و یک مکعب سه بعدی ترسیم می کند/ / اینکه کاربر می تواند با استفاده از کلیدهای جهت دار بچرخد // // کنترل ها: پیکان چپ -چرخش به چپ // پیکان راست -چرخش به راست // پیکان بالا -چرخش به بالا // پیکان رو به پایین -چرخش به پایین // ------ ------------------------------------------------------ -// شامل // --------------------------------------------- ----------— GL / glut.h> #endif // ----------------------------------------- ------------------ // نمونه اولیه عملکرد // -------------------------- -------------------------------- نمایش خالی ()؛ void specialKeys ()؛ // ---------------------------------------------------- ---------- // متغیرهای جهانی // ---------------------------------- ------------------------- دوبار rotate_y = 0 ؛ double rotate_x = 0؛ // ---------------------------------------------------- ---------- // نمایش () عملکرد تماس () ---------------------------------- --------------------------- نمایش خالی () // پاک کردن صفحه و Z-buffer glClear (GL_COLOR_BUFFER_BIT // ------ ------------------------------------------------------ -// specialKeys () تابع بازگشت به تماس // ----------------------------------------- ------------------ void specialKeys (کلید int ، int x ، int y) {// پیکان راست-افزایش چرخش 5 درجه در صورت (کلید == GLUT_KEY_RIGHT) چرخش_y + = 5؛ // پیکان چپ - چرخش را تا 5 درجه کاهش دهید اگر (کلید == GLUT_KEY_LEFT) rotate_y - = 5 ؛ وگرنه اگر (کلید == GLUT_KEY_UP) بچرخانید_x + = 5 ؛ وگرنه اگر (کلید == GLUT_KEY_DOWN) بچرخانید_x - = 5؛ // درخواست به روز رسانی صفحه نمایش glutPostRedisplay ()؛} // ------------------------------------- ---------------------- // تابع main () // -------------------- -------------------------------------- int main (int argc، char * argv [] ) GLUT_RGB