OpenGL дээр хэрхэн шоо хийх вэ (зурагтай)

Агуулгын хүснэгт:

OpenGL дээр хэрхэн шоо хийх вэ (зурагтай)
OpenGL дээр хэрхэн шоо хийх вэ (зурагтай)

Видео: OpenGL дээр хэрхэн шоо хийх вэ (зурагтай)

Видео: OpenGL дээр хэрхэн шоо хийх вэ (зурагтай)
Видео: Как установить Windows на Android планшет Chuwi Vi10 PLUS замена RemixOS 2024, Дөрөвдүгээр сар
Anonim

OpenGL бол энгийн гурван хэмжээст дүрсийг бүтээхэд ашигладаг хүчирхэг 3D програмчлалын хэрэгсэл юм. Энэхүү нийтлэлд ээрэх боломжтой гурван шоо дөрвөлжин хэлбэртэй энгийн шоо зурахыг танд заах болно.

Энэ төслийн хувьд танд код засварлагч, С програмчлалын талаар тодорхой мэдлэг хэрэгтэй болно.

Алхам

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. #includes нэмнэ үү

Эдгээр нь таны хөтөлбөрт шаардлагатай үндсэн зүйлүүд юм. Янз бүрийн үйлдлийн системд шаардлагатай өөр өөр бүрэлдэхүүн хэсгүүд байдаг гэдгийг ойлгох нь чухал юм. Таны програм уян хатан бөгөөд ямар ч хэрэглэгчдэд зориулагдсан байхын тулд эдгээр бүгдийг оруулахаа мартуузай.

    // Оруулсан #оруулах #оруулах #оруулах #GL_GLEXT_PROTOTYPES -ийг тодорхойлох

1994315 4 1
1994315 4 1

Алхам 4. Функцийн прототипүүд болон дэлхийн хувьсагчдыг нэмнэ үү

Таны дараагийн алхам бол зарим функцын прототипийг зарлах явдал юм.

    // Чиг үүрэг прототипүүд void display (); хоосон тусгай түлхүүрүүд (); // Глобал хувьсагчид double rotate_y = 0; давхар эргүүлэх_x = 0;

1994315 5 1
1994315 5 1

Алхам 5. main () функцийг тохируулна уу

    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 бол ямар ч онцлог шинж чанарыг идэвхжүүлээгүй гэж үздэг хатуу хэл юм. Таны програмыг өмнө нь үзсэн Z-буфер ашиглан 3 хэмжээст хэлбэрээр зөв харуулахын тулд танд хэрэгтэй гүн туршилтыг идэвхжүүлэх. OpenGL-ийг үргэлжлүүлэн судалж байхдаа гэрэлтүүлэг, бүтэц, нүхжилт болон бусад олон зүйлийг багтаасан олон онцлог шинж чанаруудтай танилцах болно.

    // Z-буферийн гүний туршилтыг идэвхжүүлэх glEnable (GL_DEPTH_TEST);

1994315 8 1
1994315 8 1

Алхам 8. Дуудлага хийх функцийг нэмнэ үү

Өмнө нь хийсэн прототипүүдээ буцааж залгах функцууд энд байна. Гол давталт хийх бүрт эдгээр функцуудыг дуудах болно. Дэлгэцийн функц нь өмнөх дуудлагаас хойш хийгдсэн хувьсагчийн өөрчлөлтөд үндэслэн дүр төрхийг дахин зурдаг. SpecialKeys функц нь програмтай харилцах боломжийг олгодог.

    // Дуудлага хийх функц glutDisplayFunc (дэлгэц); glutSpecialFunc (тусгай түлхүүрүүд);

1994315 9 1
1994315 9 1

Алхам 9. MainLoop -ийг эхлүүлнэ үү

Энэ нь анимац болон хэрэглэгчийн харилцан үйлчлэлийг зөвшөөрөхийн тулд програмыг хаах хүртэл үндсэн функцийг эргэн санах болно.

    // glutMainLoop () үйл явдлын хяналтыг GLUT руу шилжүүлэх; // OS рүү буцах 0 буцах; }

3 -р хэсгийн 2: Дэлгэц () функц

1994315 10 1
1994315 10 1

Алхам 1. Энэ функцын зорилгыг ойлгох

Шоо зурах бүх ажлыг энэ функц дээр хийх болно. Таны кубны ерөнхий санаа бол бүх зургаан талыг тус тусад нь зурж, зохих байрлалд байрлуулах явдал юм.

Дөрвөн буланг тодорхойлж, OpenGL -ийг шугамыг холбож, таны тодорхойлсон өнгөөр бөглөх замаар тал бүрийг зурах болно. Үүнийг хийх алхамуудыг доор харуулав

1994315 11 1
1994315 11 1

Алхам 2. glClear () нэмнэ үү

Энэ функцийг гүйцэтгэх хамгийн эхний алхам бол хийх явдал юм өнгө, Z буферыг цэвэрлэ. Эдгээр алхмуудыг хийхгүй бол хуучин зургууд шинэ зургийн доор харагдах болно, зурсан объектууд дэлгэц дээрх зөв байрлалд байхгүй болно.

    void display () {// Clear screen and 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); // Дараагийн алхамд цэгүүдийг нэмэх болно glEnd ();

1994315 13 1
1994315 13 1

Алхам 4. glVertex3f () нэмнэ үү

Та полигоноо эхлүүлэхийг хүсч байгаагаа мэдэгдсэний дараа үүнийг хийх хэрэгтэй оройнуудыг тодорхойлох объектын тухай. glVertex нь таны объектоор юу хийхийг хүсч байгаагаас хамааран олон хэлбэртэй байдаг.

  • Эхнийх нь та хичнээн хэмжээс дээр ажиллаж байгаа вэ? Дээрх 3 glVertex3f дээр 3 хэмжээсээр зурж байгаа гэсэн байгаа. Мөн 2 эсвэл 4 хэмжээсээр ажиллах боломжтой. GlVertex3f дээрх f нь таныг хөвөгч цэгийн тоонуудтай ажиллаж байна гэж хэлдэг. Та мөн богино өмд, бүхэл тоо эсвэл давхар тоог ашиглаж болно.
  • Эдгээр цэгүүдийг 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 хүртэлх утгатай байна. Бүх 0 нь цэгийг хар болгож, бүх 1 нь цагаан болгох болно. GlColor3f () дахь 3 нь альфа суваггүй 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 (); // Нил ягаан тал - ЗӨВ 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 key, int x, int y) {// Баруун сум - (key == GLUT_KEY_RIGHT) rotate_y += 5 бол эргэлтийг 5 градусаар нэмэгдүүлэх. // Зүүн сум - хэрэв (key == GLUT_KEY_LEFT) rotate_y - = 5 бол эргэлтийг 5 градусаар бууруулна. өөр бол (түлхүүр == GLUT_KEY_UP) rotate_x += 5; өөр бол (түлхүүр == 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 () -тэй төстэй бөгөөд зөвхөн объектыг хөрвүүлэх, масштаблахын тулд x, y, z гэсэн 3 параметрийг авдаг.
  • Гурван хувиргалтыг нэг объект дээр ашиглахдаа зөв үр дүнд хүрэхийн тулд та тэдгээрийг зөв дарааллаар ашиглах хэрэгтэй. Тэднийг үргэлж дарааллаар нь бичээрэй glTranslate, glRotate, дараа нь glScale. OpenGL нь үндсэндээ өөрчлөлтийг доороос дээш чиглүүлдэг. Үүнийг ойлгохын тулд OpenGL -ийг дээрээс доош нь ашигласан бол OpenGL -ийг доороос нь дээш нь хэрэглэсэн тохиолдолд энгийн 1x1x1 хэмжээтэй куб хэрхэн өөрчлөгдөхийг төсөөлөөд үзээрэй.
1994315 18 1
1994315 18 1

Алхам 3. Дараах тушаалуудыг нэмээд кубыг x тэнхлэгийн дагуу 2, y тэнхлэгийн дагуу 2, массыг y тэнхлэгийн эргэн тойронд 180 градус эргүүлж, x тэнхлэгийн дагуу кубыг 0.1 эргүүлнэ

Дээр дурдсанчлан эдгээр болон өмнөх 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 -ramework GLUT -framework OpenGL./ mycube Windows дээр: gcc -Wall -ofoo foo.c -lglut32cu - lglu32 -lopengl32./ mycube

1994315 20 1
1994315 20 1

Алхам 5. Бүрэн кодоо шалгана уу

Энэ нь ийм байх ёстой:

    // // Файл: mycube.c // Зохиогч: Мэтт Дэйсли // Бүтээсэн огноо: 4/25/2012 // Төсөл: OpenGL дээр куб хийх эх код // Тодорхойлолт: OpenGL цонх үүсгэж 3D шоо зурна/ / Хэрэглэгч сумны товчлуурыг ашиглан эргүүлэх боломжтой // // Хяналт: Зүүн сум -Зүүн тийш эргүүлэх // Баруун сум -Баруун эргүүлэх // Дээш сум -Дээш эргүүлэх // Доош сум -Доош эргүүлэх // ------ -------------------------------------------------- -// Үүнд орно // ------------------------------------------- --------------- #оруулах #оруулах #оруулах #тодорхойлох GL_GLEXT_PROTOTYPES #ifdef _APPLE_ #оруулах #бусад #оруулах #endif // ------------- -------------------------------------------- // Функцийн прототипүүд / / ------------------------------------------------- --------- хоосон дэлгэц (); хоосон тусгай түлхүүрүүд (); // ------------------------------------------------ ---------- // Дэлхийн хувьсагчид // ---------------------------------- ------------------------ давхар эргүүлэх_y = 0; давхар эргүүлэх_x = 0; // ------------------------------------------------ ---------- // дэлгэц () Дуудлага хийх функц // ------------------------------- -------------------------- void display () {// Clear screen and 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 (); // Нил ягаан тал - ЗӨВ 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 () Callback функц // ------------------------------ ---------------------------- void specialKeys (int key, int x, int y) {// Баруун сум-эргэлтийг 5-аар нэмэгдүүлэх хэрэв градус (түлхүүр == GLUT_KEY_RIGHT) rotate_y += 5; // Зүүн сум - хэрэв (key == GLUT_KEY_LEFT) rotate_y - = 5 бол эргэлтийг 5 градусаар бууруулна. өөр бол (түлхүүр == GLUT_KEY_UP) rotate_x += 5; өөр бол (түлхүүр == GLUT_KEY_DOWN) rotate_x -= 5; // Дэлгэцийг шинэчлэх хүсэлт glutPostRedisplay (); } // ----------------------------------------------- ----------- // main () функц // ------------------------------- --------------------------- 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 (тусгай түлхүүрүүд); // glutMainLoop () үйл явдлын хяналтыг GLUT руу шилжүүлэх; // OS рүү буцах буцах 0; }

Зөвлөмж болгож буй: