Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void FillPlaneBar(Vector3f v1, Vector3f v2, Vector3f v3, Vector3f flatNorm, Vector3f v1norm, Vector3f v2norm, Vector3f v3norm) {
- //box boundary
- float x1, x2, y1, y2, z1, z2;
- x1 = v1[0] < v2[0] ? v1[0] : v2[0];
- x1 = x1 < v3[0] ? x1 : v3[0];
- x2 = v1[0] > v2[0] ? v1[0] : v2[0];
- x2 = x2 > v3[0] ? x2 : v3[0];
- y1 = v1[1] < v2[1] ? v1[1] : v2[1];
- y1 = y1 < v3[1] ? y1 : v3[1];
- y2 = v1[1] > v2[1] ? v1[1] : v2[1];
- y2 = y2 > v3[1] ? y2 : v3[1];
- glBegin(GL_POINTS);
- for (int y = y1; y <= y2; y++)
- for (int x = x1; x <= x2; x++) {
- float alpha, beta, gama;
- alpha = ((v2[1] - v3[1]) * (x - v3[0]) + (v3[0] - v2[0]) * (y
- - v3[1])) / ((v2[1] - v3[1]) * (v1[0] - v3[0]) + (v3[0]
- - v2[0]) * (v1[1] - v3[1]));
- beta = ((v3[1] - v1[1]) * (x - v3[0]) + (v1[0] - v3[0]) * (y
- - v3[1])) / ((v2[1] - v3[1]) * (v1[0] - v3[0]) + (v3[0]
- - v2[0]) * (v1[1] - v3[1]));
- gama = 1 - alpha - beta;
- int depth = (alpha * v1[2] + beta * v2[2] + gama * v3[2]);
- if ((alpha > 0) && (beta > 0) && (gama > 0) && (alpha < 1)
- && (beta < 1) && (gama < 1)) {
- if(shadingT == "P"){
- Vector3f interNorm = Vector3f( v1norm[0] * alpha + v2norm[0] * beta + v3norm[0] * gama,
- v1norm[1] * alpha + v2norm[1] * beta + v3norm[1] * gama,
- v1norm[2] * alpha + v2norm[2] * beta + v3norm[2] * gama);
- interNorm /= interNorm.len();
- float dotinl = interNorm[0] * light[0] + interNorm[1]* light[1] + interNorm[2] * light[2];
- Vector3f reflect =(interNorm * 2 * (light[0] * interNorm[0] + light[1] * interNorm[1] + light[2] * interNorm[2])) - light;
- reflect /= reflect.len();
- float dotcr = camera[0] * reflect[0] + camera[1] * reflect[1] + camera[2] + reflect[2];
- intensity += (kd*dotinl + ks*pow(dotcr,50));
- putColorPoint(x, y, depth, intensity);
- intensity = 0.15;
- }
- if (shadingT == "F"){
- float dotfnl = flatNorm[0] * light[0] + flatNorm[1]* light[1] + flatNorm[2] * light[2];
- Vector3f reflect = flatNorm * 2 * (light[0] * flatNorm[0] + light[1] * flatNorm[1] + light[2] * flatNorm[2]) - light;
- reflect /= reflect.len();
- float dotcr = camera[0] * reflect[0] + camera[1] * reflect[1] + camera[2] + reflect[2];
- intensity += (kd*dotfnl + ks*pow(dotcr,50));
- putColorPoint(x, y, depth, intensity);
- intensity = 0.15;
- }
- if (shadingT == "G") {
- float dotv1nl = v1norm[0] * light[0] + v1norm[1] * light[1] + v1norm[2] * light[2];
- float dotv2nl = v2norm[0] * light[0] + v2norm[1] * light[1] + v2norm[2] * light[2];
- float dotv3nl = v3norm[0] * light[0] + v3norm[1] * light[1] + v3norm[2] * light[2];
- Vector3f reflect = flatNorm * 2 * (light[0] * flatNorm[0] + light[1] * flatNorm[1] + light[2] * flatNorm[2]) - light;
- reflect /= reflect.len();
- float dotcr = camera[0] * reflect[0] + camera[1] * reflect[1] + camera[2] + reflect[2];
- intensity1 += ((kd*dotv1nl) +(ks*pow(dotcr, 50)));
- intensity2 += ((kd*dotv2nl) +(ks*pow(dotcr, 50)));
- intensity3 += ((kd*dotv3nl) +(ks*pow(dotcr, 50)));
- float shading = alpha * intensity1 + beta * intensity2+ gama * intensity3;
- putColorPoint(x, y, depth, shading);
- intensity1 = intensity2 = intensity3 = 0.15;
- }
- if (shadingT == "N"){
- putColorPoint(x, y, depth, 1);
- }
- }
- }
- glEnd();
- }
Add Comment
Please, Sign In to add comment