zadanie z liczeniem: VAct = 1/VFreq - VBlank VAct = 1/80Mhz - 0,5ms = 12,5 - 0,5 = 12ms Pojedyncza linia: 1/HFreq = 12ms/1280 = 9,375 micro_s 1/HFreq = 12ms/1280 = 9,375 micro_s HAct = 9,375 - 1,375 micro_s = 8 micro_s K = 8*200MHz = 1600 Wykorzystujšc funkcje GL_TRIANGLE_FAN biblioteki OpenGL, napisać program generujšcy obraz modelu koloru HLS z osiš jasnoci I wyznaczonš przez pkt o współrzędnych (0.0 , -0.5 , 0.0) i (0.0 , 0.5 , 0.0) i punkcie R o współrzędnych (1.0 , 0.0 , 0.0) void RysujHLS_TRF(void) { int i; float x, y; float PI = 3.1415; int N = 6; //liczba podziałów koła int dAlfa = 360 / N; //wartoć kšta wyznaczajšcego kolejny pkt na okręgu int r = 1; float L = 0.5; glBegin(GL_TRIANGLE_FAN); glVertex3f(0.0, L, 0.0); for (i = 0; i * dAlfa <= 360.0; i++) { x = r * sin(i * dAlfa * PI / 180); y = r * cos(i * dAlfa * PI / 180); glVertex3f(x, 0, y); } glEnd(); glBegin(GL_TRIANGLE_FAN); //koniecznie glVertex3f(0.0, -L, 0.0); for (i = 0; i * dAlfa <= 360.0; i++) { x = r * sin(i * dAlfa * PI / 180); y = r * cos(i * dAlfa * PI / 180); glVertex3f(x, 0, y); } glEnd(); } Napisać program, który używajšc prymitywu GL_TRIANGLE_FAN będzie rysował reprezentację modelu HSL, gdzie o jasnoci wyznacza linia wytyczona przez punkty (0, 0, 0), (0, L, 0) { glColor3f(0.0,1.0,0.0); glBegin(GL_TRIANGLE_FAN); glVertex3f(0.0, 0.0, 0.0); for (i=0; i*60<=360.0; i++) { glVertex3f(0.5*cos(DEG2RAD(i*60)),1.0/2,0.5*sin(DEG2RAD(i*60))); } glEnd(); glBegin(GL_TRIANGLE_FAN); glVertex3f(0.0, 2.0/2, 0.0); for (i=0; i*60<=360.0; i++) { glVertex3f(0.5*cos(DEG2RAD(i*60)),1.0/2,0.5*sin(DEG2RAD(i*60))); } glEnd(); } Czarnobialy 1. Napisać program zamieniajšcy obraz kolorowy(24 bity na piksel) przechowywany w tablicy T[M][N] na obraz czarno-biały int x; for(int i=1; i<=M; i++){ for(int j=1; j<=N; j++) { x = T[i][j].r+T[i][j].g+T[i][j].b; x /= 3; T[i][j].r = x; T[i][j].g = x; T[i][j].b = x; } } int x; for(int i=1; i<=M; i++){ for(int j=1; j<=N; j++) { x = T[i][j].r+T[i][j].g+T[i][j].b; x /= 3; T[i][j].r = x; T[i][j].g = x; T[i][j].b = x; } } Rysowanie diamentu void Rysujdiament() { int l= 10; int r=2; glBegin(GL_TRIANGLE_FAN); glVertex(0,l,0); for (int i=0; i<=6; i++) { glVertex(r*sin(i*pi/4), 0, r*cos(i*pi/4)); } glEnd(); glBegin(GL_TRIANGLE_FAN); glVertex(0,-l,0); for(int i=0, i<6, i++){ glVertex(r*sin(i*pi/4), 0, r*cos(i*pi/4)); } glEnd(); } Jasnosc/Kontrast Napisać program wyznaczajšcy jasnoć i kontrast obrazu. int poziom_jasnosci(int i, int j){ int jasnosc(int M, int N) { int wynik=0; for (int i=1; i<=M; i++){ for(int j=1; j<=N; j++){ wynik += f(i, j); }} return ((1/(M*N))*wynik); } int kontrast(int M, int N) { int wynik=0; for (int i=1; i<=M; i++){ for(int j=1; j<=N; j++){ wynik += (f(i, j) jasnosc(M, N))^2; }} return (sqrt((1/(M*N))*wynik)); } Napisać program zmieniajšcy jasnoć/kontrast obrazu poprzez liniowš korekcję tonalnoe struct pixel { //jasnosc int R; int G; int B;} int main() { pixel OBRAZ[K+1][L+1]; // Tutaj pobieramy obraz gdzies z zewnatrz double n; // Jaka wartoć od 0 do 1 for(int i=1;i<=K;i++){ for(int j=1;j<=L;j++){ if(OBRAZ[i][j].R+N*256>=255) OBRAZ[i][j].R=255; else if(OBRAZ[i][j].R+N*256<=0) OBRAZ[i][j].R=0; else OBRAZ[i][j].R=N*256+OBRAZ[i][j]; if(OBRAZ[i][j].G+N*256>=255) OBRAZ[i][j].G=255; else if(OBRAZ[i][j]GR+N*256<=0) OBRAZ[i][j].G=0; else OBRAZ[i][j].G=N*256+OBRAZ[i][j]; if(OBRAZ[i][j].B+N*256>=255) OBRAZ[i][j].B=255; else if(OBRAZ[i][j].B+N*256<=0) OBRAZ[i][j].B=0; else OBRAZ[i][j].B=N*256+OBRAZ[i][j]; }}} struct pixel { // kontrast int R; int G; int B; } int main(){ pixel OBRAZ[K+1][L+1]; // Tutaj pobieramy obraz gdzies z zewnatrz int a; // Współczynnik kierunkowy prostej for(int i=1;i<=K;i++){ for(int j=1;j<=L;j++){ if((a*(OBRAZ[i][j].R-128)+128)<=0) OBRAZ[i][j].R=0; else if((a*(OBRAZ[i][j].R- 128)+128)>=255) OBRAZ[i][j].R=255; else OBRAZ[i][j].R = a*(OBRAZ[i][j].R-128)+128; if((a*(OBRAZ[i][j].G-128)+128)<=0) OBRAZ[i][j].G=0; else if((a*(OBRAZ[i][j].G- 128)+128)>=255) OBRAZ[i][j].G=255; else OBRAZ[i][j].G = a*(OBRAZ[i][j].G-128)+128; if((a*(OBRAZ[i][j].B-128)+128)<=0) OBRAZ[i][j].B=0; else if((a*(OBRAZ[i][j].B- 128)+128)>=255) OBRAZ[i][j].B=255; else OBRAZ[i][j].B = a*(OBRAZ[i][j].B-128)+128; }}} trójkšt 3. Napisać program w OpenGL wykorzystujšc tryb GL_TRIANGLE_STRIP wywietlajšcy trójkšt. Podane były parametry takie jak wysokoć i odpowiednie punkty w układzie współrzędnych int h = 10; glBegin(GL_TRIANGLE_STRIP); glVector(-1.0, 0.0, 0.0); glVector(1.0, 0.0, 0.0); glVector(0.0, h, 0.0); glEnd(); Unsigned char r; Unsigned char g; Unsigned char b; }; pixel obraz[K+1][L+1]; for(i=1;i<=K;i++){ for(j=1;j<=L;j++){ hR[ obraz[I][j].r]++; hG[ obraz[I][j].r]++; hB[ obraz[I][j].r]++; byte wart_max=max(obraz[i][j].r,obraz[i][j].g,obraz [i][j].b); byte wart_min=min(obraz[i][j].r,obraz[i][j].g, g,obraz [i][j].b); hist[(int) (wart_max+wart_min)/2]++; } }Trojkat
Bayaniss