Skip to content

Instantly share code, notes, and snippets.

@nilsmartel
Created June 11, 2017 16:29
Show Gist options
  • Save nilsmartel/695f015064f1d2b103e5a41b82933102 to your computer and use it in GitHub Desktop.
Save nilsmartel/695f015064f1d2b103e5a41b82933102 to your computer and use it in GitHub Desktop.
void rasterTri(double[][] v){
int len = v[0].length;
int up = 0;
int down = 0;
for(int i=1; i<3;i++){
if(v[i][1] < v[up][1]) up=i;
if(v[i][1] > v[down][1]) down=i;
}
int[] id= new int[3];
double f;
double[] fac= new double[3];
id[1]=up;
id[2]=up;
int y = (int)v[up][1]+1;
int dir = 1;
double[][] xv = new double[2][len];
double[] data = new double[len];
int a,b;
int l = 0;
while( y < v[down][1] ){
data[1] = y;
for(int i=1;i<3;i++){
if( v[ (id[i]+i)%3][1] < y){
id[i] = (id[i]+i)%3;
}
fac[i-1] = (y - v[id[i]][1])/( v[(id[i]+i)%3][1] - v[id[i]][1] );
xv[i-1][0] = v[id[i]][0]*(1-fac[i-1]) + v[(id[i]+i)%3][0]*fac[i-1];
xv[i-1][1] = y;
for(int qu=2; qu< len; qu++){
xv[i-1][qu] = v[id[i]][qu]*(1-fac[i-1]) + v[(id[i]+i)%3][qu]*fac[i-1];
}
}
if(xv[l][0] > xv[(l+1)%2][0]){
l = (l+1)%2;
}
this.renderPass.setPixelData(xv[l], vertId );
for(int x = 1+(int)xv[l][0]; x < (int)xv[(l+1)%2][0]; x++ ){
f = ( x - xv[l][0] ) / ( xv[(l+1)%2][0] - xv[l][0]);
data[0] = x;
for(int qu=2; qu< len; qu++){
data[qu] = xv[l][qu]*(1-f) + xv[(l+1)%2][qu]*f;
}
this.renderPass.setPixelData(data, vertId );
}
y++;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment