-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmygl.h
More file actions
137 lines (117 loc) · 3.61 KB
/
mygl.h
File metadata and controls
137 lines (117 loc) · 3.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#ifndef _MYGL_H_
#define _MYGL_H_
#include "definitions.h"
//*****************************************************************************
// Defina aqui as suas funções gráficas
//*****************************************************************************
//Função para desenhar pixels na tela.
//Recebe como parametro os pontos X e Y a serem colocados num plano cartesiano na tela.
void putPixel(int x, int y, int RGBA[4]){
int print_position = ((x+(IMAGE_WIDTH/2)) + (((IMAGE_HEIGHT/2)-y) * IMAGE_WIDTH)) * 4; //Posição do Array da memória onde o Pixel vai ser pintado.
//Definição do array dos pixels na tela.
for(int i = 0; i<4; i++){
FBptr[print_position+i] = RGBA[i];
}
}
//Função para desenhar linhas na tela.
void drawLine(int x0, int y0, int RGBA0[4], int x1, int y1, int RGBA1[4]){
//Variables.
int deltaX = x1 - x0; //Valor de DeltaX
int deltaY = y1 - y0; //Valor de DeltaY
int j = y0; //Inicializando variável J, que corresponde ao Y do plano cartesiano.
int incrementX = 0; //Variável que controla o incremento do X no plano cartesiano.
int incrementX1 = 0;
int incrementY = 0; //Variável que controla o incremento do Y no plano cartesiano.
int incrementY1 = 0; //Variável auxiliar que controla o incremento do Y no plano cartesiano.
int RGBA2[4]; //Variavel para cor Auxiliar
//Definição da variável de cor auxiliar.
RGBA2[0] = RGBA0[0];
RGBA2[1] = RGBA0[1];
RGBA2[2] = RGBA0[2];
RGBA2[3] = RGBA0[3];
if (deltaX < 0){
deltaX = -deltaX;
incrementX = -1;
incrementX1 = -1;
}
else if(deltaX > 0){
incrementX = 1;
incrementX1 = 1;
}
if(deltaY < 0){
deltaY = -deltaY;
incrementY = -1;
}
else if(deltaY > 0){
incrementY = 1;
}
if(deltaY > deltaX){
int tmp1 = deltaX;
deltaX = deltaY;
deltaY = tmp1;
if (incrementY<0){
deltaX = -deltaX;
std::clog << deltaX << "\n";
}
if(deltaX<0){
incrementY1 = -1;
deltaX = -deltaX;
}
else if(deltaX>0){
incrementY1 = 1;
}
incrementX1 = 0;
}
int maior_Distancia = deltaX; //Numero máximo de pixels que vai ser pintado.
if(deltaX == 0){
maior_Distancia = deltaY;
}
int colorGradientRatio = 256/maior_Distancia;
int error = (maior_Distancia)/2;
int i = x0;
for(int k=0; k<=maior_Distancia; k++){
std::clog << "Pixel X: " << i << " Y: " << j << "\n";
std::clog << "DeltaX: " << deltaX << "\n";
std::clog << "DeltaY: " << deltaY << "\n";
std::clog << "Error: " << error << "\n";
std::clog << "incrementX: " << incrementX << " e " << incrementX1 << "\n";
std::clog << "incrementY: " << incrementY << " e " << incrementY1 << "\n\n";
putPixel(i, j, RGBA2);
error += deltaY;
if(RGBA0[0] > 0 && RGBA2[0] <= 255){
RGBA2[0] -= colorGradientRatio;
}
else if(RGBA0[1] > 0 && RGBA2[1] <= 255){
RGBA2[1] -= colorGradientRatio;
}
else if(RGBA0[2] > 0 && RGBA2[2] <= 255){
RGBA2[2] -= colorGradientRatio;
}
if(RGBA1[0] > 0 && RGBA2[0] <= 255){
RGBA2[0] += colorGradientRatio;
}
if(RGBA1[1] > 0 && RGBA2[1] <= 255){
RGBA2[1] += colorGradientRatio;
}
if(RGBA1[2] > 0 && RGBA2[2] <= 255){
RGBA2[2] += colorGradientRatio;
}
//std::clog << "RGBA2 : " << RGBA2[0] << " " << RGBA2[1] << " " << RGBA2[2] << "\n";
if(error >= deltaX){
// std::clog << "ENTREI AQUI!";
j += incrementY;
i += incrementX;
error -= deltaX;
}else{
// std::clog << "ENTREI AQUI2!";
j += incrementY1;
i += incrementX1;
}
}
}
void drawTriangle(int x0, int y0, int RGBA0[4], int x1, int y1, int RGBA1[4], int x2, int y2, int RGBA2[4]){
drawLine(x0, y0, RGBA0, x1, y1, RGBA1);
drawLine(x0, y0, RGBA0, x2, y2, RGBA2);
drawLine(x1, y1, RGBA1, x2, y2, RGBA2);
}
#endif // _MYGL_H_