4. Кез-келген ось айналасында екіөлшемді айналу
Біртекті координаттар координат басынан өзге нүктелер айналасында айналдыруды қамтамасыз етеді. Жалпы жағдайда кез-келген нүкте маңайында айналдыру айналдыру центрін координат басына ауыстыру арқылы координаттар басына қатысты бұру, сонан соң айналу нүктесін бастапқы қалпына ауыстыру арқылы орындалады. Сонымен, [х у 1] векторын [m, n] нүктесі маңайында кез-келген бұрышқа бұру келесі түрлендіру көмегімен орындалады.
;
Матрицаларды көбейтіп, аламыз
Әрбір ось маңайында 2 өлшемді айналулар 5 суретте көрсетілген.
5 сурет. Айналу: a) х осі бойынша; б) y осі бойынша; в) z осі бойынша.
Тақырып: OPENGL КІТАПХАНАСЫ
Жоспар
OpenGL мүмкіндіктері
Берілгендердің негізгі типтері
Буферлермен жұмыс істеу және объектілердің түсін анықтау
Графикалық примитивтерді салу
Нүктелерді, сызықтарды және көпбұрыштарды салу
Жарық (Освещение)
Материал
Текстура
1. OpenGL мүмкіндіктері
Қазіргі уақытта үш өлшемді графикамен жұмыс істеу үшін Windows – та екі стандарт бар. Олар: OpenGL және Direct3D
OpenGL артықшылығы оның кең таралғандығында, ол Sun, Silicon Graphics т.б. типті графикалық жұмыс станцияларының әлемдік стандарты
OpenGL графикалық құрылғыларға интерфейс болып табылады. Бұл интерфейсте 120 шақты командалар бар.
OpenGL мүмкіндігі:
Геометриялық примитивтер (нүктелер, сызықтар, беттер) обьектілер құру үшін.
Обьектілерді үш өлшемді кеңістікте орналастыру және проекциялар тәсілін және параметрлерін таңдау.
Барлық обьектілердің түсін айқын беруге және есептеуге болады.Сонымен қатар жарық көздерін, жарық параметрлерін, текстураларын есептеуге болады.
Обьектінің математикалық сипатталуын және онымен байланысқан түс туралы ақпаратты экрандағы бейнеге ауыстыру.
OpenGL бейненің фрагменттерін көрінбейтін сызықтарын жоюға т.б. қосымша операцияны орындай алады. OpenGL командалары клиент-сервер моделі түрінде жүзеге асырылған. Қосымша клиент ролінде болады. Ол командаларды береді. OpenGL сервер ролінде болады, ол командаларды интерполяциялайды және орындайды.
OpenGL – ді қолдану ерекшеліктері:
Windows құрамында 2DLL файлдар түрінде қойылады.Файлдың аттары: opengl32.dll және glu32.dll.
OpenGL мүмкінділігі жазылып көрсетілген. Қосымшаларда OpenGL –мен жұмыс істеу үшін шығару контекс (rendering context) түсінігі қолданады. Rendering context – контекст воспроизведения ол OpenGL – ді Windows-тің терезелік жүйесімен байланыстырады.
OpenGL командаларымен жұмыс істеу үшін қосымша ең кем дегенде бір контексін құру керек және оны ағымдағы деп тағайындау керек. Шығару контекстің құру алдында пикселдер форматын орнату керек. Ол үшін: ChoosePixelFormat функциясы қолданылады.
2. Берілгендердің негізгі типтері
OpenGL-дің барлық командалары (процедуралар және функциялар) gl префиксінен, ал барлық тұрақтылар – GL_ префиксінен басталады. Сонымен қатар, OpenGL-дің процедуралар және функциялар атауларына жіберілетін параметрлер саны мен олардың типтері туралы ақпаратты білдіретін суффикстер кіреді.
1 кесте – OpenGL-дегі берілгендер типтері.
Суффикс
|
сипатталуы
|
C-дегі тип
|
OpenGL-дегі тип
|
b
|
8-биттік бүтін
|
char
|
GLbyte
|
s
|
16-биттік бүтін
|
short
|
GLshort
|
i
|
32-биттік бүтін
|
long
|
GLint GLsizei
|
f
|
32-биттік нақты сан
|
float
|
GLfloat, GLclampf
|
d
|
64-биттік нақты сан
|
double
|
GLdouble, GLclampd
|
ub
|
8-биттік таңбасыз бүтін
|
unsigned char
|
GLubyte, GLboolean
|
us
|
16-биттік таңбасыз бүтін
|
unsigned short
|
GLushort
|
ui
|
32-биттік таңбасыз бүтін
|
unsigned long
|
GLuint, GLenum, GLbitfield
|
|
|
void
|
GLvoid
|
OpenGL-дің кейбір командалары v әрпіне аяқталады. Бұл команда массивке сілтеме алатынын білдіреді. Командалардың көбісінің векторлық және векторлық емес версиялары бар. Мысалы келесі конструкциялар бірдей:
glColor3f(1.0, 1.0, 1.0);
және
GLfloat color[] = {1.0, 1.0, 1.0};
glColor3fv(color).
OpenGL – ді бірнеше күйдің біреуінде болатын автомат түрінде қарастыруға болады. OpenGL ішінде көп айнымалылар бар. Мысалы: Ағымдағы түс. Үнсіз келісім бойынша әрбір жүйелік айнымалының өз мәні бар және де кез-келген уақытта осы айнымалылардың мәнің анықтауға болады. Ол үшін: glGetBooleanv(), glGetDoublev(), glGetFloatv(), glGetIntegerv() және т.б.
3. Буферлермен жұмыс істеу және обьектілердің түсін анықтау
OpenGL ішінде бірнеше әртүрлі буферлер бар:
GL_COLOR_BUFFER_BIT – (фреймбуфер) бейнені салу үшін қолданылады;
GL_DEPTH_BUFFER_BIT –z-буфер. Көрінбейтін беттерді жою үшін арналған;
GL_ACCUM_BUFFER_BIT –аккумулирующий буферді;
GL_STENCIL_BUFFER_BIT –трафарет буфері.
Бұлар сәйкес буферді тазарту үшін қолданылатын glClear процедурасының параметрлері. Бейне буферін тазартатын түс glClearColor процедурасымен беріледі. z-буферді тазартқанда жазылатын мән glClearDepth процедурасымен анықталады, сәйкесінше трафарет буферін тазартқанда жазылатын мән, ал glClearAccum – процедурасымен анықталады.
glClear командасы барлық буферлерді тазартады.
Обьектінің түсін анықтау үшін: glColor процедурасы қолданылады.
glColor{3 4}{b s i f d ub us ui}[v](TYPE red, …).
Мұндағы 3 және 4 цифрі аргументтер санын білдіреді. Цифрдан кейінгі әріп аргументтің типін білдіреді.
Мысалы: Осы процедураға 3 параметрлі бүтін тип берілген. Егер параметр мәні көрсетілмесе ол 1-ге тең деп саналады.
glFlush() процедурасы алдынғы командалардың салынуын қамтамасыз етеді. Бұл жағдайда алдында берілген командалардың аяқталуын тоспайды. glFinish() процедурасы алдынғы командалар орындалып болғанша тосады.
4. Графикалық примитивтерді салу.
OpenGL – де барлық геометриялық примитивтер төбелер терминдерімен беріледі. Әрбір төбе оның кеңістіктегі координатасын анықтайтын сандар жиынымен беріледі.
OpenGL біртекті координаталармен жұмыс істейді. Егер z координатасы берілмесе онда 0-ге тең деп есептеледі, егер 4 координатасы берілмесе 1-ге тең деп есептеледі.
OpenGL барлық геометриялық обьектілер төбелер арқылы анықталады, ал төбелер келесі процедура арқылы беріледі.
glVertex{2 3 4}{s i f d}[v](TYPE x, …),
v жалғауы аргумент ретінде массив алынса қойылады.Геометриялық приметивтерді салу үшін бұл обьектіні анықтайтын төбелер жиынын білу қажет. Бұл үшін glBegin() және glEnd() процедуралары қолданады. glBegin(GLenum mode) процедурасының параметр ретінде келесі мәндердің біреуі алынады.
GL_POINTS – жеке нүктелер жиыны;
GL_LINES – жеке нүктелерді анықтайтын төбелер жиыны;
GL_LINE_STRIP –тұйықталмаған сынық;
GL_LINE_LOOP – тұйықталған сынық;
GL_POLYGON – қарапайым дөңес көпбұрыш;
GL_TRIANGLES – төбелерді үшбұрышқып қосады;
GL_TRIANGLE_STRIP – үшбұрыштардың байланысқан жолағы;
GL_TRIANGLE_FAN – үшбұрыштар веері;
GL_QUADS – дөңес төртбұрыштарды анықтайтын төбелер квартеті;
GL_QUAD_STRIP –төртбұрыштар жолағы;
glBegin() және glEnd() арасында төбелердің әртүрлі атрибуттарын анықтайтын командалар жазуға болады. Олар: түс, нормаль, материялық растр позициясы және текстура координаттары.
5. Нүктелерді, сызықтарды және көпбұрыштарды салу
Нүктенің көлемін анықтау үшін: glPointSize(GLfloat size) процедурасы қолданылады.Нүктенің көлемі пиксельде көрсетіледі. Үнсіз келісім бойынша 1-ге тең. Сызықтың қалыңдығын анықтау үшін: gflineWidth(GLfloatwidth) процедурасы қолданылады. Сызық салынатын шаблонды анықтау үшін glLineStipple(Glint factor, GLushort pattern) процедурасы қолданылады. Процедураның 2 параметрі бар, шаблон 2 параметрмен анықталады және 1 параметрге көрсетілген санға созылады. Шаблонды қолдану үшін қолдануға рұхсат glEnable(GL_UNE_STIPPLE) процедура көмегімен беріледі. Шаблонды қолдануға тиым салу glDisable(GL_LINE_ST1PPLE) командасы арқылы орындалады.
Көпбұрыштарды салу.
Көпбұрыштың 2 жағы бар:
Беттік (лицевая);
Беттік емес (нелицевая);
Көпбұрыштың беттік немесе беттік емес жағын қалай салуын анықтау үшін: glPolygonMode(GLenum face, GLenum mode) процедурасы қолданылады. Оның екі параметрі бар:
Келесі мәндерді қабылдай алады:
GL_FRONT_AND_BACK (обе стороны) – екі жағы,
GL_FRONT (лицевая сторона) - беттік жағы,
GL_BACK (нелицевая сторона) – беттік емес жағы.
Келесі мәндердің біреуін қабылдай алады.
GL_POINT – шекаралық нүктелер жиыны,
GL_LINE – шекаралық сынық сызық,
GL_FILL – толтырылған аймақ.
Үнсіз келісім бойынша экранда сағат бағытына қарсы экранда пайда болатын көпбұрыштың төбелері беттік деп аталады. Бұны glFrontFace(GLenum mode) процедура көмегімен өзгертуге болады. Үнсіз келісім бойынша GL_CCW болады. GL_CW – процедураны осымен қолданса беттік деп сағат бағыты бойынша салынатын көпбұрыштар аталады.
Беттік, беттік емес беттерді салуға тиым салуға болады. Ол үшін: glCullFace(GLenum mode) процедурасы қолданылады. Процедура аргументінің мәндері GL_FRONT тек алдынғы беттер ғана көрінеді. GL_BACK (оставить нелицевые) артқы беттері, GL_FRONT_AND_BACK (оставить все грани) артқы және алдынғы беттері салынады. Бетті толтыру шаблоны GL_POLYGON_STIPPLE роцедура көмегімен орындалады. Сәйкесінше шаблонды қолдануға рұхсат беру үшін: glEnable процедурасы қолданылады.
Әрбір төбе үшін өз нормаль векторын келесі процедураның біреуі мен анықтауға болады.
glNormal3{b s i d f}(TYPE nx, TYPE ny, TYPE nz);
glNormal3{b s I d f}v(const TYPE * v).
b, s ,i - аргументтерінің мәндері [-1, 1] кесіндісіне масштабталады.
6. Жарық (Освещение)
OpenGL – де бірнеше көзден шығатын әрқайсысы қосылған немесе өшірілген болатын жарық моделі қолданылады. Сонымен қатар жалпы фондық жарық бар. Обьектілерді дұрыс жарықтандыру үшін обьектінің әрбір беті үшін материалды анықтау қажет. Материал өз жарығын шығару мүмкін. Түскен жарықты барлық бағытта шашырату мүмкін немесе айна сияқты жарықты белгілі уақытта бейнелеуі мүмкін.
Қолданушы 8-ге дейін жарық көздерін, олардың қасиеттерін анықтай алады. Жарық көздерінің қасиеттері. Олар: түс, орналасуы және бағыты. Бұл қасиетті орнату үшін:
gllight{i f}[v](GLenum light, GLenum pname, TYPE param) процедурасы қолданылады. Мұндағы light қабылдайтын мәндері.
GL_LIGHT0, GL_LIGHT1, ..., GL_LIGHT7.
pname параметрі жарық көзінің сипаттамасын анықтайды. Жарық көзін қолдану үшін есептеулер жүргізуге рұхсат glEnable(GL_LGHTING) командасымен беріледі, ал сәйкес жарық көзін қосуға рұхсат glEnable командасымен беріледі. Жалпы фондық жарықты gtLightModel{i f} [v] (GL_LIGHT_MODEL_AMBIENT, ambientColor) командасымен анықталады. Бақылаушының орналасуын обьектідегі биіктерге әсер етеді. Үнсіз келісім бойынша жарық есептеулерінде бақылаушы шексіз алыс нүктеде орналасады деп саналады. Әрбір төбе үшін есептеулерді жеке жүргізу үшін: glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE) бұл шынайы бейне алу үшін қолданылады. Обьектінің алдыңғы және артқы беттерін жарықтандыру үшін: glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE) командасы қолданылады.
Достарыңызбен бөлісу: |