ДВОМІРНІ ПОБУДОВИ З ВИКОРИСТАННЯМ OpenGL ЗАСОБАМИ МОВИ C++

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
О
Факультет:
КН
Кафедра:
Кафедра САПР

Інформація про роботу

Рік:
2009
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Моделювання

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра САПР ЗВІТ до лабораторної роботи №4 на тему: “ ДВОМІРНІ ПОБУДОВИ З ВИКОРИСТАННЯМ OpenGL ЗАСОБАМИ МОВИ C++” з курсу: « Геометричне моделювання у конструюванні інженерних обєктів та систем »  Основні теоретичні відомості     Текст програми: #include <windows.h> #include <GL/gl.h> #include <GL/glu.h> #include <GL/glaux.h> #include <math.h> #include <stdio.h> #define pi 3.14159265 const int minX = 0, minY = 0, maxX = 26, maxY = 10; static bool state = true; void CALLBACK resize(int width,int height) { glViewport(0,0,width,height); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); glOrtho(minX,maxX, minY,maxY, 2,12); gluLookAt( 0,0,5, 0,0,0, 0,1,0 ); glMatrixMode( GL_MODELVIEW ); } void drawRound(double left, double top, float radius, float rL, float gL, float bL) { float tmpY=0; float tmpX=0; float step = radius/(10*radius); glBegin(GL_LINE_LOOP); for(float i = -radius; i<=radius; i+=step) { glColor3f(rL,gL,bL); tmpY = sqrt(pow(radius,2)-pow(i,2)); glVertex2d(left+i, top+tmpY); } for(float i = radius; i>=-radius; i-=step) { tmpY = -sqrt(pow(radius,2)-pow(i,2)); glVertex2d(left+i, top+tmpY); } glEnd(); glFlush(); } void drawStar(double left, double top, double radiusB, double radiusS, int count, float rL, float gL, float bL, float rF, float gF, float bF) { float mainAngle = 2*pi/count; float smallAngle = mainAngle/2; glLineWidth(1); drawRound(left, top, radiusB, rL,gL,bL); glPolygonMode(GL_FRONT_AND_BACK,GL_LINE); glBegin(GL_POLYGON); for(int i = 0; i<count; i++) { glColor3f(rL,gL,bL); glVertex2f(left,top); glVertex2f(left+radiusB*sin(i*mainAngle),top+radiusB*cos(i*mainAngle)); glVertex2f(left+radiusS*sin((2*i+1)*smallAngle),top+radiusS*cos((2*i+1)*smallAngle)); } glEnd(); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glBegin(GL_POLYGON); for(int i = 0; i<count; i++) { glColor3f(rF, gF, bF); glVertex2f(left,top); glVertex2f(left+radiusB*sin(i*mainAngle),top+radiusB*cos(i*mainAngle)); glVertex2f(left+radiusS*sin((2*i-1)*smallAngle),top+radiusS*cos((2*i-1)*smallAngle)); } glEnd(); glFlush(); } void CALLBACK display(void) { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); drawStar(5,5,3,1,5,0.0,0.5,1.0,1.0,0.5,0.0); drawStar(13,5,3,2,6,0.0,0.5,1.0,1.0,0.5,0.0); drawStar(21,5,3,2,8,0.0,0.5,1.0,1.0,0.5,0.0); auxSwapBuffers(); } void main() { float pos[4] = {3,3,3,1}; float dir[3] = {-1,-1,-1}; auxInitPosition( 50, 50, 800, 300); auxInitDisplayMode( AUX_RGB | AUX_DEPTH | AUX_DOUBLE ); auxInitWindow( (LPWSTR)"Bubela Andriy - OpenGL" ); auxIdleFunc(display); auxReshapeFunc(resize); glEnable(GL_ALPHA_TEST); glEnable(GL_DEPTH_TEST); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glLightfv(GL_LIGHT0, GL_POSITION, pos); glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, dir); auxMainLoop(display); } Результат роботи програми:  Висновок: На даній лабораторній роботі я ознайомився та практично освоїв технології та основи роботи з графічними можливостями бібліотеки OpenGL на площині в середовищі Windows. Вивчив особливості підключення бібліотек при розробці програмних проектів. Ознайомився та засвоїв основні графічні функції, набув практичних навиків програмування графіки.
Антиботан аватар за замовчуванням

02.10.2020 20:10-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!