dobro_grafika.txt

(5 KB) Pobierz
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
Zgłoś jeśli naruszono regulamin