(1) function DivideFaceNormal(idx, facelist) |
(2) |
(3)//declare variables |
(4)u16i0, i1, i2; // triangular’s node Index |
(5)S3DVertex v0, v1, v2; // triangular’s Vertex |
(6)vector3df sub0, sub1, sub2; // face’s point |
(7)vector3df sv; // face(Triangular) |
(8)vector3df norm; // face’s normal vector |
(9)floatsd; // plane |
(10) |
(11)//One face consists of three points. Divide the total number of nodes by 3. |
(12)for (j=0 to all triangular count) |
(13) |
(14)//Use the value divided by 3, multiply by 3 to obtain the index. |
(15)i0 = first triangular node; //first node |
(16)i1 = second triangular node; //second node |
(17)i2 = third triangular node; //third node |
(18) |
(19)//Vertex information is obtained using the node information. |
(20)v0 = first vertex of node; |
(21)v1 = second vertex of node; |
(22)v2 = third vertex of node; |
(23) |
(24)//Get triangle information. |
(25)sub0 = v0 - v1; |
(26)sub1 = v1 - v2; |
(27)sub2 = v2 - v0; |
(28) |
(29)create norm is normal vector of sub0; //Find the normal vector of the triangle. |
(30)set 3dplane is (v0 point, norm); //3d plane containing a triangle |
(31) |
(32)l = -1; |
(33)set List = list of norm; //Normal vector list |
(34)for (k = 0 to List) |
(35)//Calculate the normal vector direction value |
(36)sv = (normal vector of list[k]) - norm; |
(37)sd = (plane direction of list[k]) - (directoin of 3dplane); |
(38) |
(39)if (sv.x is almost to 0 and sv.y is almost to 0 and sv.z is almost to 0) |
(40)l=k; |
(41)add triangular vertex (v0, v1, v2); |
(42)break; |
(43) |
(44) |
(45) |
(46) |
(47)//If the normal vector does not have similar faces, create a new one. |
(48)if(l == -1) |
(49)create NF is New face; //Create new face |
(50)set NF plane is (v0 point, norm); //input face’s information |
(51)insert triangular vertex(v0, v1, v2) into NF; |
(52)insert NF into list; |
(53) |
(54) |