როგორ გააკეთოთ კუბი OpenGL– ში (სურათებით)

Სარჩევი:

როგორ გააკეთოთ კუბი OpenGL– ში (სურათებით)
როგორ გააკეთოთ კუბი OpenGL– ში (სურათებით)

ვიდეო: როგორ გააკეთოთ კუბი OpenGL– ში (სურათებით)

ვიდეო: როგორ გააკეთოთ კუბი OpenGL– ში (სურათებით)
ვიდეო: How To Install Windows XP In Virtual Box - 2023 2024, აპრილი
Anonim

OpenGL არის მძლავრი 3D პროგრამირების ინსტრუმენტი, რომელიც გამოიყენება მარტივი პრიმიტივებისგან რთული სამგანზომილებიანი სცენების დასახატად. ეს სტატია გასწავლით თუ როგორ უნდა დახაზოთ მარტივი კუბი, რომლის დატრიალებაც შეგიძლიათ სამ განზომილებაში!

ამ პროექტისთვის დაგჭირდებათ კოდის რედაქტორი და C პროგრამირების გარკვეული ცოდნა.

ნაბიჯები

3 ნაწილი 1: საწყისი დაყენება

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. დაამატეთ ფუნქციის პროტოტიპები და გლობალური ცვლადები

თქვენი შემდეგი ნაბიჯი არის ფუნქციის პროტოტიპების გამოცხადება.

    // ფუნქციის პროტოტიპები void ჩვენება (); void specialKeys (); // გლობალური ცვლადები ორმაგად ბრუნავს_y = 0; ორმაგი ბრუნვა_ x = 0;

1994315 5 1
1994315 5 1

ნაბიჯი 5. დააყენეთ ძირითადი () ფუნქცია

    int main (int argc, char* argv ) {// GLUT ინიციალიზაცია და მომხმარებლის პარამეტრების დამუშავება glutInit (& argc, argv); // მოითხოვეთ ორმაგი ბუფერული ნამდვილი ფერის ფანჯარა Z- ბუფერული glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);

  • ეს განცხადება ქმნის თქვენს გარემოს. OpenGL პროგრამების წერისას უნდა გახსოვდეთ ის, რომ თქვენ უნდა მოითხოვოთ ყველაფერი. ეს მოითხოვს თქვენ გქონდეთ უფრო დიდი გაგება იმის შესახებ, თუ როგორ მუშაობს თქვენი პროგრამა და რა უნდა ჩართოთ იმისათვის, რომ მიიღოთ თქვენთვის სასურველი ფუნქციონალურობა. ამ ხაზში თქვენ დააყენებთ ჩვენებას ორმაგი ბუფერული, RGB ფერით და Z- ბუფერულით.
  • ორმაგი ბუფერირება არის ტექნიკა, რომელიც გამოიყენება გრაფიკულ პროგრამებში პრობლემის აღმოსაფხვრელად, რომელიც წარმოიქმნება იმის გამო, თუ როგორ ხატავს გამოსახულებები ეკრანზე. ყოველ ჯერზე, როდესაც სცენას ხელახლა ხატავთ, ეკრანი ჯერ უნდა წაიშალოს, შემდეგ კი ახალი ინფორმაცია დაიხატება. ორმაგი ბუფერირების გარეშე თქვენ შეამჩნევთ მოციმციმე ეფექტს, რადგან ეკრანი წაშლილია და ხელახლა ხატავს.
  • ეს პრობლემა დაფიქსირებულია მეორე ბუფერის დამატებით. ამ მეთოდით, გამოსახულია პირველი ბუფერზე და ეს ბუფერი გაჩვენებთ თქვენ. შემდეგი ჩარჩო დაიხატება მეორე ბუფერზე და როდესაც ეს დასრულდება, ორი ბუფერი ცვლის ადგილს. თქვენ დაუყოვნებლივ ნახავთ მეორე ბუფერს, მაგრამ ჩვენგან დაფარული, პირველი ბუფერი იშლება და ხელახლა ხატავს მესამე ჩარჩოსთან ერთად, რომელიც დასრულების შემდეგ იცვლება.
  • თქვენ ასევე გსურთ ჩართოთ RGB ფერი სისტემა თქვენს ფანჯარაში.
  • Z- ბუფერირება ეს არის ის, თუ როგორ მიიღებთ თქვენთვის სასურველ 3D ეფექტებს. OpenGL იყენებს სამგანზომილებიან კოორდინატულ სისტემას x, y და z ღერძებით. იმისთვის, რომ ობიექტი იყოს თქვენთან უფრო ახლოს, მისი პოზიცია z ღერძზე იზრდება, თუმცა, რათა ის უფრო შორს გამოჩნდეს, მისი პოზიცია z ღერძზე მცირდება.
1994315 6 1
1994315 6 1

ნაბიჯი 6. ფანჯრის შექმნა

შემდეგი ნაბიჯი არის ფანჯრის შექმნა რომლის ფარგლებშიც თქვენ დახაზავთ კუბს. ამ გაკვეთილში ფანჯარას ჰქვია "გასაოცარი კუბი".

    // შექმენით ფანჯარა glutCreateWindow ("გასაოცარია კუბი");

1994315 7 1
1994315 7 1

ნაბიჯი 7. ჩართეთ სიღრმისეული ტესტი

OpenGL არის მკაცრი ენა, რადგან ის არ ითვალისწინებს რაიმე სპეციალური ფუნქციის ჩართვას. იმისათვის, რომ თქვენი პროგრამა სწორად გამოჩნდეს 3 განზომილებაში Z- ბუფერის გამოყენებით, რომელსაც ადრე უყურებდით, თქვენ გჭირდებათ ჩართეთ სიღრმისეული ტესტი რა 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 მოვლენებისთვის (); // OS– ზე დაბრუნება return 0; }

3 ნაწილი 2: ჩვენება () ფუნქცია

1994315 10 1
1994315 10 1

ნაბიჯი 1. გაიაზრეთ ამ ფუნქციის მიზანი

თქვენი კუბიკის დახატვის ყველა სამუშაო შესრულდება ამ ფუნქციით. კუბის მიღმა არსებული ზოგადი იდეა არის ექვსივე მხარის ინდივიდუალურად დახატვა და შესაბამის პოზიციაში განთავსება.

კონცეპტუალურად, თითოეული მხარე დახატული იქნება ოთხი კუთხის განსაზღვრით და OpenGL- ს საშუალებას აძლევს დააკავშიროს ხაზები და შეავსოს იგი თქვენ მიერ განსაზღვრული ფერით. ქვემოთ მოცემულია ნაბიჯები ამის გასაკეთებლად

1994315 11 1
1994315 11 1

ნაბიჯი 2. დაამატეთ glClear ()

პირველი ნაბიჯი, რაც თქვენ უნდა გადადოთ ამ ფუნქციის შესასრულებლად არის გაასუფთავეთ ფერი და Z ბუფერი რა ამ ნაბიჯების გარეშე, ძველი ნახატები კვლავ ხილული იქნება ახალი ნახატების ქვეშ და დახატული საგნები არ იქნება ეკრანზე სწორ ადგილას.

    ბათილი ჩვენება () {// ეკრანის გასუფთავება და Z- ბუფერი 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 სხვა ფორმების შესაქმნელად.

  • აქ თქვენ დაიწყებთ კუბის წინა ნაწილით. მოგვიანებით თქვენ დაამატებთ ფერს ექვსივე მხარეს.
  • // მრავალ ფერადი მხარე - FRONT glBegin (GL_POLYGON); // ვერტიკები დაემატება შემდეგ საფეხურზე glEnd ();

1994315 13 1
1994315 13 1

ნაბიჯი 4. დაამატეთ glVertex3f ()

მას შემდეგ რაც განაცხადეთ, რომ გსურთ დაიწყოთ თქვენი მრავალკუთხედი, თქვენ უნდა წვეროების განსაზღვრა ობიექტის. glVertex– ს აქვს მრავალი ფორმა იმისდა მიხედვით, თუ რისი გაკეთება გსურთ თქვენს ობიექტთან.

  • პირველი არის რამდენ განზომილებაში მუშაობთ. GlVertex3f– ში ზემოთ ნახსენები 3 ამბობს, რომ თქვენ ხატავთ 3 განზომილებაში. ასევე შესაძლებელია მუშაობა 2 ან 4 განზომილებაში. FV ზემოთ glVertex3f ამბობს, რომ თქვენ მუშაობთ მცურავი წერტილების რიცხვებთან. თქვენ ასევე შეგიძლიათ გამოიყენოთ შორტები, რიცხვები ან ორადგილიანი.
  • გაითვალისწინეთ, რომ ეს წერტილები განსაზღვრულია ა საათის ისრის საწინააღმდეგოდ მანერა. ეს არ არის ძალიან მნიშვნელოვანი ამ მომენტში, მაგრამ როდესაც თქვენ დაიწყებთ მუშაობას განათებით, ტექსტურით და მოპირკეთებით, ეს წარმოუდგენლად მნიშვნელოვანი გახდება, ასე რომ მიეჩვიეთ ჩვევას განსაზღვროთ თქვენი ქულები საათის ისრის საწინააღმდეგოდ.
  • დაამატეთ დაამატეთ წვეროები 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 -მდე. ყველა 0 -ია წერტილს შავს ხდის და ყველა 1 -ს გახდის წერტილს თეთრს. 3 in 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 ()

თქვენ თითქმის დასრულებული ხართ, მაგრამ ამ მომენტისთვის თქვენ შეგიძლიათ დახაზოთ კუბი, მაგრამ არ გაქვთ მისი ბრუნვის საშუალება. ამისათვის თქვენ შექმენით სპეციალური კლავიშები () ფუნქცია საშუალებას გვაძლევს დააჭიროთ ისრის ღილაკებს და გადავაბრუნოთ კუბი!

  • ეს ფუნქციაა იმის გამო, რომ თქვენ გამოაცხადეთ გლობალური ცვლადები rotate_x და rotate_y. როდესაც დააჭირეთ მარჯვენა და მარცხენა ისრის ღილაკებს, rotate_y გაიზრდება ან შემცირდება 5 გრადუსით. ანალოგიურად, როდესაც დააჭირეთ ზევით და ქვემოთ ისრის ღილაკებს, rotate_x შესაბამისად შეიცვლება.
  • void specialKeys (int გასაღები, int x, int y) {// მარჯვენა ისარი - გაზრდის ბრუნვას 5 გრადუსით, თუ (გასაღები == GLUT_KEY_RIGHT) ბრუნავს_y += 5; // მარცხენა ისარი - შეამცირეთ ბრუნვა 5 გრადუსით სხვა შემთხვევაში, თუ (გასაღები == GLUT_KEY_LEFT) ბრუნავს_ი - = 5; სხვა შემთხვევაში თუ (გასაღები == GLUT_KEY_UP) როტაცია_ x += 5; სხვა შემთხვევაში თუ (გასაღები == GLUT_KEY_DOWN) როტაცია_ x -= 5; // მოითხოვეთ ჩვენების განახლება glutPostRedisplay (); }

1994315 17 1
1994315 17 1

ნაბიჯი 2. დაამატეთ glRotate ()

თქვენი ბოლო განცხადება არის განცხადების დამატება, რომელიც გადაატრიალებს თქვენს ობიექტს. დაუბრუნდით ჩვენების () ფუნქციას და 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. დაამატეთ შემდეგი ბრძანებები კუბის გასაზრდელად 2 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– ს როგორც შემდგენელს, გაუშვით ეს ბრძანებები თქვენი ტერმინალიდან თქვენი პროგრამის შესადგენად და შესამოწმებლად.

    Linux- ზე: gcc cube.c -o cube -lglut -lGL./ mycube Mac: 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 // პროექტი: Source code for Cube in OpenGL // აღწერა: ქმნის OpenGL ფანჯარას და ხატავს 3D კუბს/ / რომ მომხმარებელს შეუძლია ბრუნვა ისრის ღილაკების გამოყენებით // // კონტროლი: მარცხენა ისარი -როტაცია მარცხნივ // მარჯვენა ისარი -როტაცია მარჯვნივ // ზემოთ ისარი -როტაცია ზემოთ // ქვემოთ ისარი -როტაცია ქვემოთ // ------ ------------------------------------------------------ -// მოიცავს // ----------------------------------------------- -------- ---------------------------------------------- // ფუნქციის პროტოტიპები / / ----------------------------------------------------- --------- ბათილი ჩვენება (); void specialKeys (); // ---------------------------------------------------- ---------- // გლობალური ცვლადები // -------------------------------------- ------------------------ ორმაგი როტაცია_y = 0; ორმაგი ბრუნვა_ x = 0; // ---------------------------------------------------- ---------- // ჩვენება () გამოძახების ფუნქცია // ----------------------------------- --------------------------- ბათილი ჩვენება () {// ეკრანის გასუფთავება და Z- ბუფერი 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-ით ხარისხი თუ (გასაღები == GLUT_KEY_RIGHT) როტაცია_ა += 5; // მარცხენა ისარი - შეამცირეთ ბრუნვა 5 გრადუსით სხვა შემთხვევაში, თუ (გასაღები == GLUT_KEY_LEFT) ბრუნავს_ი - = 5; სხვა შემთხვევაში თუ (გასაღები == GLUT_KEY_UP) როტაცია_ x += 5; სხვა შემთხვევაში თუ (გასაღები == GLUT_KEY_DOWN) როტაცია_ x -= 5; // მოითხოვეთ ჩვენების განახლება glutPostRedisplay (); } // -------------------------------------------------- ----------- // მთავარი ფუნქცია // ------------------------------- --------------------------- int main (int argc, char* argv ) {// GLUT ინიციალიზაცია და მომხმარებლის პარამეტრების დამუშავება glutInit (& argc, argv); // მოითხოვეთ ორმაგი ბუფერული ნამდვილი ფერის ფანჯარა Z- ბუფერული glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); // შექმენით ფანჯარა glutCreateWindow ("გასაოცარია კუბი"); // ჩართეთ Z- ბუფერული სიღრმის ტესტი glEnable (GL_DEPTH_TEST); // გამოძახების ფუნქციები glutDisplayFunc (ჩვენება); glutSpecialFunc (specialKeys); // გადასცეს კონტროლი GLUT– ზე glutMainLoop მოვლენებისთვის (); // OS– ზე დაბრუნება return 0; }

გირჩევთ: