/* ** Command & Conquer Generals Zero Hour(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ //////////////////////////////////////////////////////////////////////////////// // // // (c) 2001-2003 Electronic Arts Inc. // // // //////////////////////////////////////////////////////////////////////////////// #include "W3DDevice/GameClient/W3DPoly.h" #include "Lib/BaseType.h" //------------------------------------------------------------------------------------------------- /** Delete all vertices in polygon */ //------------------------------------------------------------------------------------------------- void ClipPolyClass::Reset(void) { Verts.Delete_All(false); } //------------------------------------------------------------------------------------------------- /** Add a new vertex to polygon */ //------------------------------------------------------------------------------------------------- void ClipPolyClass::Add_Vertex(const Vector3 & point) { Verts.Add(point); } //------------------------------------------------------------------------------------------------- /** Clip polygon to given plane, returning new polygon in dest. */ //------------------------------------------------------------------------------------------------- void ClipPolyClass::Clip(const PlaneClass & plane,ClipPolyClass & dest) const { dest.Reset(); // temporary variables used in clipping Int i = 0; Int vcount = Verts.Count(); Int iprev = vcount - 1; Bool cur_point_in_front; Bool prev_point_in_front; Real alpha; Vector3 int_point; if (vcount <= 2) return; // perform clipping prev_point_in_front = !plane.In_Front(Verts[iprev]); // Note, plane normal is outward so we invert this test for (Int j=0; j=vcount) { i = 0; } } }