Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка OpenGL.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
505 Кб
Скачать
☆

Хід роботи

Наведена програма генерує перетворені каркасні перспективні зображення многогранників і виводить їх на екран за допомогою функцій GLUT. Усі п'ять тіл розміщуються в межах одного вікна.

#include <GL/glut.h>

GLsizei winWidth = 500, winHeight = 500;

/* Вхідний розмір вікна. */

void init(void){

glClearColor (1.0, 1.0, 1.0, 0.0); // Біле вікно на екрані.

}

void displayWirePolyhedra (void) {

glClear (GL_COLOR_BUFFER_BIT); // Очистити вікно.

glColor3f (0.0, 0.0, 1.0); // Зробити колір ліній синім.

/* Задати перетворення точки спостереження. */

gluLookAt (5.0, 5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);

/*Масштабувати куб і відобразити його як каркасний *паралелепіпед. */

glScalef (1.5, 2.0, 1.0);

glutWi reCube (1.0);

/*Масштабувати, транслювати і відобразити каркасний додекаедр. */

glScalef (0.8, 0.5, 0.8);

glTranslatef (-6.0, -5.0, 0.0); glutWireDodecahedron ( );

/* Транслювати і відобразити каркасний тетраедр. */

glTranslatef (8.6, 8.6, 2.0);

glutWireTetrahedron ( );

/* Транслювати і відобразити каркасний октаедр. */

glTranslatef .(-3.0, -1.0, 0.0);

glutWireOctahedron ( );

/* Транслювати і відобразити каркасний ікосаедр. */

glScalef (0.8, 0.8, 1.0);

glTranslatef (4.3, -2.0, 0.5);

glutWirelcosahedron ( );

glFlush ( );

}

void winReshapeFcn (GLint newWidth, GLint newHeight) {

glViewport (0, 0, newWidth, newHeight);

glMatrixMode (GL_PROJECTION);

glFrustum (-1.0, 1.0, -1.0, 1.0, 2.0, 20.0);

glMatrixMode (GL_MODELVIEW);

glClear (GL_COLOR_BUFFER_BIT);

}

void main (int argc, char** argv)

{

glutlnit (Sargc, argv);

glutlnitDisplayMode (GLUT_SINGLE | GLUT_RGB);

glutlnitWindowPosition (100, 100);

glutlnitWindowSize (winWidth, winHeight);

glutCreateWindow ("Каркасні багатокутники");

init ( );

glutDisplayFunc (displayWirePolyhedra);

glutReshapeFunc (winReshapeFcn);

glutMainLoop ( );

}

Наведена програма відображає три каркасні поверхні другого порядку (сфера, конус і циліндр). Напрямок спостереження збігається з додатним напрямком осі z, тобто осі всіх відображених об'єктів направлені вертикально. Три об'єкти розміщено у різних точках у межах одного вікна екрана.

#include <GL/glut.h>

GLsizei winWidth = 500, winHeight = 500;

/* Розмір вхідного вікна екрана дисплея */

void init (void){

glClearColor (1.0, 1.0, 1.0, 0.0) // Задати колір вікна.

}

void wireQuadSurfs (void){

glClear (GL_COLOR_BUFFER _BIT); // Вікно очищується.

glColor3f (0.0, 0.0, 1.0); // Зробити колір ліній синім

/* Напрямок спостереження задається по осі z зовнішньою *системою координат.*/

gluLookAt (2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);

/* Розміщується і відображається каркасна сфера GLUT. */ glPushMatrix ( );

glTranslatef (1.0, 1.0, 0.0);

glutWireSphere (0.75, 8, б);

glPopMatrix ( );

/* Розміщується і відображається каркасний конус GLUT. */ glPushMatrix ( ) ;

glTranslatef (1.0, -0.5, 0.5);

glutWireCone (0.7, 2.0, 7, 6);

glPopMatrix ( );

/* Розміщується і відображається каркасний циліндр GLU. */

GLUquadricObj *cylinder; // Задається ім’я об’єкта GLU.

glPushMatrix ( );

glTranslatef (0.0, 1.2, 0.8);

cylinder = gluNewQuadric( );

gluQuadricDrawStyle (cylinder, GLU_LINE);

gluCylinder (cylinder, 0.6, 0.6, 1.5, 6, 4);

glPopMatrix ( );

glFlush ( );

}

void winReshapeFcn (GLint newWidth, GLint newHeight){

glViewport (0, 0, newWidth, newHeight);

glMatrixMode (GL_PROJECTION);

glOrtho (-2.0, 2.0, -2.0, 2.0, 0.0, 5.0);

glMatrixMode (GL_MODELVIEW);

glClear (GL_COLOR_BUFFER_BIT);

}

void main (int argc, char** argv){

glutlnit (&argc, argv);

glutlnitDisplayMode (GLUT_SINGLE | GLUT_RGB);

glutlnitWindowPosition (100, 100);

glutlnitWindowSize (winWidth, winHeight);

glutCreateWindow ("Каркасні квадратичні поверхні");

init ( );

glutDisplayFunc (wireQuadSurfs);

glutReshapeFunc (winReshapeFcn);

glutMainLoop ( );

}