我試圖繪製陰影三角形,但出現錯誤的顏色。這裏是我所得到的,如果我叫用紅色,綠色和藍色的函數的例子:陰影三角形上的顏色錯誤
它應該是紅色的左上方,綠色右上角和藍色在頂部底部。但正如你所看到的,顏色不是那樣的。我應該得到的東西是這樣的:
下面的代碼:
unsigned RGB(unsigned char R, unsigned char G, unsigned B){
return (R << 16) | (G << 8) | B;
}
float get_dist(int x1, int y1, int x2, int y2){
int xproj = x2-x1;
int yproj = y2-y1;
float dist = sqrt(pow(xproj, 2) + pow(yproj, 2));
return dist;
}
unsigned char getR(unsigned c){
return (c >> 16) & 0xFF;
}
unsigned char getG(unsigned c){
return (c >> 8) & 0xFF;
}
unsigned char getB(unsigned c){
return c & 0xFF;
}
void draw_ftriangle(SDL_Surface * s, int x0, int y0, unsigned c0, int x1, int y1, unsigned c1, int x2, int y2, unsigned c2){
int x;
signed d0, d1, d2;
unsigned R, G, B, color;
int ymin = min(y0, min(y1, y2));
int xmin = min(x0, min(x1, x2));
int ymax = max(y0, max(y1, y2));
int xmax = max(x0, max(x1, x2));
draw_line(s, x0, y0, x1, y1, color);
draw_line(s, x1, y1, x2, y2, color);
draw_line(s, x0, y0, x2, y2, color);
for(; ymin < ymax; ymin++)
for(x=xmin; x < xmax; x++)
if(ptintr(x, ymin, x0, y0, x1, y1, x2, y2)){
d0 = get_dist(x, ymin, x0, y0);
d1 = get_dist(x, ymin, x1, y1);
d2 = get_dist(x, ymin, x2, y2);
R = d0+d1+d2 == 1 ? getR(c0)*d0 + getR(c1)*d1 + getR(c2)*d2 :
(getR(c0)*d0 + getR(c1)*d1 + getR(c2)*d2)/(d0+d1+d2);
G = d0+d1+d2 == 1 ? getG(c0)*d0 + getG(c1)*d1 + getG(c2)*d2 :
(getG(c0)*d0 + getG(c1)*d1 + getG(c2)*d2)/(d0+d1+d2);
B = d0+d1+d2 == 1 ? getB(c0)*d0 + getB(c1)*d1 + getB(c2)*d2 :
(getB(c0)*d0 + getB(c1)*d1 + getB(c2)*d2)/(d0+d1+d2);
color = RGB(R, G, B);
put_pixel(s, x, ymin, color);
}
}
我調用一個函數drraw_ftriangle這樣的:
draw_ftriangle(表面,100,100,RGB(255 ,0,0), 235,150,RGB(0,255,0), 4,254,RGB(0,0,255));
我不知道,但我想這個問題應該在這裏:
R = (d0+d1+d2) == 1 ? getR(c0)*d0 + getR(c1)*d1 + getR(c2)*d2 :
(getR(c0)*d0 + getR(c1)*d1 + getR(c2)*d2)/(d0+d1+d2);
同樣的,G和B變量...
我想其他人解釋我,在哪裏這個問題,因爲我在尋找它整天...
嗯,在第二個想法中,我似乎正在閱讀關於'char'在班次時被隱式轉換爲'int'的內容。在那種情況下,我的答案是不恰當的。如果有人能證實我錯了,請告訴我,我會刪除這個答案。 – paddy
我已經將RGB參數更改爲unsigned int,但我仍然得到相同的顏色。 – Arnas
至少這是一個很好的練習......所以我不認爲你的'(x,y)'座標是在'get_dist'函數中規範化的。你計算連接這兩個向量的hypoteneuse的長度,但是你不給它任何基準長度來標準化。我在這裏錯過了什麼嗎? – paddy