3
Со помош на низата од темиња да се нацрта рамнострана пирамида со основа квадрат со должина на страна од 40цм.Основата на пирамидата треба да лежи во ху-рамнината и да има црвена боја.Пирамидата со врвот е сцртена кон позитивната страна на z-оската.Останатите 4 страни треба да се обојат во црвена и жолта боја наизменично.Основата е изградена од матерјал кој не е провиден додека провидноста на останатите 4 страни е одредена со коефициент 0.8.Оваа пирамида треба да се смести во сцена во која има присуство на светлина затоа страните треба да бидат одредени со нивните нормали? void drawPiramida(){ GLfloat basep[] = { 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 4.0, 0.0, -4.0, 0.0, 0.0, -4.0 }; GLfloat t1[] = { 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 2.0, 5.0, -2.0 }; GLfloat t2[] = { 4.0, 0.0, 0.0, 4.0, 0.0, -4.0, 2.0, 5.0, -2.0 }; GLfloat t3[] = { 4.0, 0.0, -4.0, 0.0, 0.0, -4.0, 2.0, 5.0, -2.0 }; GLfloat t4[] = { 0.0, 0.0, -4.0, 0.0, 0.0, 0.0, 2.0, 5.0, -2.0 }; glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, basep); glColor4f(1.0, 0.0, 0.0, 0.8); glDrawArrays(GL_QUADS, 0, 4); glVertexPointer(3, GL_FLOAT, 0, t1); glColor4f(1.0, 1.0, 0.0, 0.8); glDrawArrays(GL_TRIANGLES, 0, 3); glVertexPointer(3, GL_FLOAT, 0, t2); glColor4f(1.0, 0.0, 0.0, 0.8); glDrawArrays(GL_TRIANGLES, 0, 3); glVertexPointer(3, GL_FLOAT, 0, t3); glColor4f(1.0, 1.0, 0.0, 0.8); glDrawArrays(GL_TRIANGLES, 0, 3); glVertexPointer(3, GL_FLOAT, 0, t4); glColor4f(1.0, 0.0, 0.0, 0.8); glDrawArrays(GL_TRIANGLES, 0, 3);; glDisableClientState(GL_VERTEX_ARRAY);} 1.Синтакса за командата glClear: A) glCear( GL_DEPTH_BUFFER_BIT); 2. Со која функција се одредува ширината на сноп од светлина.. А) glLight (Gl_LIGHT0, GL_SPOT_CUTOFF, 32.0); 3. наредба за цртање на полигон со задна ориентација и да бидат нацртани само со линии. glPolygonMode(GL_BACK, GL_LINE) 4. Да се определи нијансата на сиво (земајќи во предвид осетот на човечкото око) која соодветствува на RGB бојата со вредност (10, 100, 200). GS = 0,299·R + 0,587·G + 0,114·B GS= 0.299*10 + 0,587·*100+ 0,114*200 GS=2.99+58.7+22.8 = 84.49 Одреди ги вредностите за цијан,магнета и жолта боја преку конвергенција на RGB во CMY модел,доколку црвената боја има вредност 50, зелената120 и сината 255.? RGB—CMY C=1-(R/255) M=1-(G/255) Y=1-(B/255) RGB--YUV Y=0.299*R+0.587*G+0.144*B U=R*Y I V=B-Y YUV--RGB R=Y+1.14*V G=Y-0.395*U-0.581*V B=Y+2.032*U Вчитување на слики и нивна обработка – број на зелени пикесели int main(int argc, char* argv[]) { glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (320, 240); glutCreateWindow("Using multiple bmp fig"); pixels = ReadBitmap("test.bmp", &info); int BrojNaZeleniPikseli = 0; for(int i=0; i<info->bmiHeader.biHeight*info- >bmiHeader.biWidth*3; i+=3) { if(pixels[i]==0 && pixels[i+1]==255 && pixels[i+2]==0) { BrojNaZeleniPikseli++; } } init(); glutDisplayFunc(Display); glutReshapeFunc(reshape); glutMainLoop(); } Код за читање на податоците од една 24-битна BMP слика if ((fp = fopen(filename, "rb")) == NULL) return (NULL); fread(&header, sizeof(BITMAPFlLEHEADER),1, fp) if (header.bfType != 'MB’) { fclose(fp); return (NULL); } infosize = header.bfOffBits – sizeof(BITMAPFILEHEADER); fread(*info, 1, infosize, fp); imgsize = (*info)->bmiHeader.biSizelmage; if (imgsize == 0 ) imgsize = ((*info)->bmiHeader.biWidth * (*info)->bmiHeader.biBitCount + 7) / 8 * abs((*info)-> bmiHeader.biHeight); fread(pixels, 1, imgsize, fp); Напишете OpenGL ф-ја која ке овозможи позиционирање во рамките на апликацискиот прозорец на една ВМР слика со димензи 2х2? void Display(void) { ....... if (pixels) { glRasterPos2f(120, 120); glDrawPixels(info-> bmiHeader.biWidth, info->bmiHeader.biHeight, GL_BGR_EXT, GL_UNSIGNED_BYTE, pixels); } glFlush(); glutSwapBuffers(); glutPostRedisplay(); } int main(int argc, char* argv[]) { pixels = ReadBitmap("test.bmp", &info); } include <windows.h> include <glut.h> voidDisplay(void) { glClear(GL_COLOR_BUFFER_BIT); glFlush(); } voidinit(void){ glClearColor(1.0,0.0,0.0); glViewport(0,0,320,240); gluOrtho2D(0.0,160.0,0.0,120.0);} voidmain(intargc, char*argv[]) { glutInitDisplayMode(GLUT_SINGLE| GLUT_RGB); glutInitWindowSize(320,240); glutCreateWindow(“Prozorecvo OpenGLi GLUT"); init(); glutDisplayFunc(Display); glutMainLoop(); } 5ta zadaca int main (int argc, char* argv[ ]){ glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (500, 500); glutCreateWindow("prikazi bmp fajl"); pixels = ReadBitmap("test.bmp", &info); glutDisplayFunc(Display); } void Display(void) { if (pixels) { gl_Clear(GL_COLOR_BUFFER_BIT); glRasterPos2f(2.0, 3.0); glDrawPixels(info-> bmiHeader.biWidth, info-> bmiHeader.biHeight, GL_BGR_EXT, GL_UNSIGNED_BYTE, pixels); } glFlush();

GRAFIKA

Embed Size (px)

DESCRIPTION

aaa

Citation preview

Page 1: GRAFIKA

Со помош на низата од темиња да се нацрта рамнострана пирамида со основа квадрат со должина на страна од 40цм.Основата на пирамидата треба да лежи во ху-рамнината и да има црвена боја.Пирамидата со врвот е сцртена кон позитивната страна на z-оската.Останатите 4 страни треба да се обојат во црвена и жолта боја наизменично.Основата е изградена од матерјал кој не е провиден додека провидноста на останатите 4 страни е одредена со коефициент 0.8.Оваа пирамида треба да се смести во сцена во која има присуство на светлина затоа страните треба да бидат одредени со нивните нормали?

void drawPiramida(){GLfloat basep[] = { 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 4.0, 0.0, -4.0, 0.0, 0.0, -4.0 }; GLfloat t1[] = { 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 2.0, 5.0, -2.0 }; GLfloat t2[] = { 4.0, 0.0, 0.0, 4.0, 0.0, -4.0, 2.0, 5.0, -2.0 }; GLfloat t3[] = { 4.0, 0.0, -4.0, 0.0, 0.0, -4.0, 2.0, 5.0, -2.0 }; GLfloat t4[] = { 0.0, 0.0, -4.0, 0.0, 0.0, 0.0, 2.0, 5.0, -2.0 };

glEnableClientState(GL_VERTEX_ARRAY);

glVertexPointer(3, GL_FLOAT, 0, basep);glColor4f(1.0, 0.0, 0.0, 0.8);glDrawArrays(GL_QUADS, 0, 4);

glVertexPointer(3, GL_FLOAT, 0, t1);glColor4f(1.0, 1.0, 0.0, 0.8);glDrawArrays(GL_TRIANGLES, 0, 3);

glVertexPointer(3, GL_FLOAT, 0, t2);glColor4f(1.0, 0.0, 0.0, 0.8);glDrawArrays(GL_TRIANGLES, 0, 3);

glVertexPointer(3, GL_FLOAT, 0, t3);glColor4f(1.0, 1.0, 0.0, 0.8);

glDrawArrays(GL_TRIANGLES, 0, 3);

glVertexPointer(3, GL_FLOAT, 0, t4);glColor4f(1.0, 0.0, 0.0, 0.8);glDrawArrays(GL_TRIANGLES, 0, 3);;

glDisableClientState(GL_VERTEX_ARRAY);}

1.Синтакса за командата glClear:A) glCear( GL_DEPTH_BUFFER_BIT); 2. Со која функција се одредува ширината на сноп од светлина..А) glLight (Gl_LIGHT0, GL_SPOT_CUTOFF, 32.0); 3. наредба за цртање на полигон со задна ориентација и да бидат нацртани само со линии. glPolygonMode(GL_BACK, GL_LINE)4. Да се определи нијансата на сиво (земајќи во предвид осетот на човечкото око) која соодветствува на RGB бојата со вредност (10, 100, 200). GS = 0,299·R + 0,587·G + 0,114·B GS= 0.299*10 + 0,587·*100+ 0,114*200GS=2.99+58.7+22.8 = 84.49

Одреди ги вредностите за цијан,магнета и жолта боја преку конвергенција на RGB во CMY модел,доколку црвената боја има вредност 50, зелената120 и сината 255.?RGB—CMYC=1-(R/255) M=1-(G/255) Y=1-(B/255)RGB--YUVY=0.299*R+0.587*G+0.144*BU=R*Y I V=B-YYUV--RGBR=Y+1.14*VG=Y-0.395*U-0.581*VB=Y+2.032*U

Вчитување на слики и нивна обработка – број на зелени пикесели

int main(int argc, char* argv[]) { glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (320, 240); glutCreateWindow("Using multiple bmp fig"); pixels = ReadBitmap("test.bmp", &info); int BrojNaZeleniPikseli = 0; for(int i=0; i<info->bmiHeader.biHeight*info->bmiHeader.biWidth*3; i+=3) { if(pixels[i]==0 && pixels[i+1]==255 && pixels[i+2]==0){ BrojNaZeleniPikseli++; } } init(); glutDisplayFunc(Display); glutReshapeFunc(reshape); glutMainLoop(); }

Код за читање на податоците од една 24-битна BMP слика if ((fp = fopen(filename, "rb")) == NULL) return (NULL);fread(&header, sizeof(BITMAPFlLEHEADER),1, fp) if (header.bfType != 'MB’) { fclose(fp); return (NULL); } infosize = header.bfOffBits – sizeof(BITMAPFILEHEADER); fread(*info, 1, infosize, fp); imgsize = (*info)->bmiHeader.biSizelmage; if (imgsize == 0) imgsize = ((*info)->bmiHeader.biWidth * (*info)->bmiHeader.biBitCount + 7) / 8 * abs((*info)-> bmiHeader.biHeight); fread(pixels, 1, imgsize, fp);

Напишете OpenGL ф-ја која ке овозможи позиционирање во рамките на апликацискиот прозорец на една ВМР слика со димензи 2х2?void Display(void) { ....... if (pixels) { glRasterPos2f(120, 120); glDrawPixels(info-> bmiHeader.biWidth, info->bmiHeader.biHeight, GL_BGR_EXT, GL_UNSIGNED_BYTE, pixels); } glFlush(); glutSwapBuffers(); glutPostRedisplay(); } int main(int argc, char* argv[]) { pixels = ReadBitmap("test.bmp", &info); }

include <windows.h>include <glut.h>voidDisplay(void){glClear(GL_COLOR_BUFFER_BIT);glFlush(); }voidinit(void){glClearColor(1.0,0.0,0.0);glViewport(0,0,320,240);gluOrtho2D(0.0,160.0,0.0,120.0);}voidmain(intargc, char*argv[]){glutInitDisplayMode(GLUT_SINGLE| GLUT_RGB);glutInitWindowSize(320,240);glutCreateWindow(“Prozorecvo OpenGLi GLUT");init();glutDisplayFunc(Display);glutMainLoop();}

5ta zadaca int main (int argc, char* argv[ ]){

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);glutInitWindowSize (500, 500);glutCreateWindow("prikazi bmp fajl");pixels = ReadBitmap("test.bmp", &info);glutDisplayFunc(Display);}void Display(void) { if (pixels) { gl_Clear(GL_COLOR_BUFFER_BIT);glRasterPos2f(2.0, 3.0); glDrawPixels(info-> bmiHeader.biWidth, info->bmiHeader.biHeight, GL_BGR_EXT, GL_UNSIGNED_BYTE, pixels); } glFlush();}

Page 2: GRAFIKA
Page 3: GRAFIKA