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
|
V3D_f v1 =
{
xchroma+vxd, ychroma+vyd, 0,
0., 0.,
makecol(0, 0, 0) // black vertex
};
V3D_f v2 =
{
xchroma+vxw, ychroma+vyw, 0,
0., 0.,
makecol(255, 255, 255) // white vertex
};
V3D_f v3 =
{
xchroma+vxh, ychroma+vyh, 0,
0., 0.,
makecol(r_pick, v_pick, b_pick) // color vertex
};
triangle3d_f(screen, POLYTYPE_GCOL, NULL, &v1, &v2, &v3);
float vec0,vec1,vec2,dot00,dot01,dot02,dot11,dot12, invdenom, u , v;
vec0 = (mouse_x - xchroma+vxh)*(mouse_y - ychroma+vyw)-(mouse_x - ychroma+vyw)*(mouse_y-ychroma+vyh);
vec1 = (mouse_x - xchroma+vxw)*(mouse_y - ychroma+vyd)-(mouse_x - xchroma+vxd)*(mouse_y - ychroma+vyh);
vec2 = (mouse_x - xchroma+vxd)*(mouse_y - ychroma+vyd)-(mouse_x - xchroma+vxh)*(mouse_y - ychroma+vyd);
dot00=dot_product_f(vec0,vec0);
dot01=dot_product_f(vec0,vec1);
dot02=dot_product_f(vec0,vec2);
dot11=dot_product_f(vec1,vec1);
dot12=dot_product_f(vec1,vec2);
invdenom= 1/(dot00*dot11 -dot01 *dot01);
u = (dot11 * dot02 - dot01 * dot12) * invdenom;
v = (dot00 * dot12 - dot01 * dot02) * invdenom;
//Donc AB.x = B.x - A.x et AB.y = B.y - A.Y.
if(mouse_b&1)
{
if (u>0 && v>0 && (u+v)<1)
{
sprintf(string_Last_Order,"Mouse IN triangle");
}
else {
sprintf(string_Last_Order,"Mouse NOT in triangle");
}
} |
Partager