- •6.080200 – «Інформатика»
- •Лабораторна робота № 3
- •Тема. Функції рисування графічних зображень з використанням різних растрових операцій
- •Мета роботи: ознайомитися з функціями рисування графічних зображень за допомогою бібліотеки opengl.
- •Короткі теоретичні відомості
- •Хід роботи
- •Короткі теоретичні відомості
- •Завдання
- •Контрольні питання
- •Лабораторна робота № 4 Тема. Відображення фігур зі зміною атрибутів
- •Хід роботи
- •Хід роботи
- •Хід роботи
- •Хід роботи
- •Завдання
- •Контрольні питання
- •Лабораторна робота № 9
- •Короткі теоретичні відомості
- •Хід роботи
- •Завдання
- •Контрольні питання
- •Список літератури
- •39614, М. Кременчук, вул. Першотравнева, 20
Хід роботи
Наведена програма генерує перетворені каркасні перспективні зображення многогранників і виводить їх на екран за допомогою функцій 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 ( );
}
