@@ -80,7 +80,90 @@ export class SkeletonClipping {
80
80
return this . clipAttachment != null ;
81
81
}
82
82
83
- clipTriangles ( vertices : NumberArrayLike , verticesLength : number , triangles : NumberArrayLike , trianglesLength : number , uvs : NumberArrayLike ,
83
+ clipTriangles ( vertices : NumberArrayLike , verticesLength : number , triangles : NumberArrayLike , trianglesLength : number ) : void ;
84
+ clipTriangles ( vertices : NumberArrayLike , verticesLength : number , triangles : NumberArrayLike , trianglesLength : number , uvs : NumberArrayLike ,
85
+ light : Color , dark : Color , twoColor : boolean ) : void ;
86
+ clipTriangles ( vertices : NumberArrayLike , verticesLength : number , triangles : NumberArrayLike , trianglesLength : number , uvs ?: NumberArrayLike ,
87
+ light ?: Color , dark ?: Color , twoColor ?: boolean ) : void {
88
+
89
+ if ( uvs && light && dark && typeof twoColor === 'boolean' )
90
+ this . clipTrianglesRender ( vertices , verticesLength , triangles , trianglesLength , uvs , light , dark , twoColor ) ;
91
+ else
92
+ this . clipTrianglesNoRender ( vertices , verticesLength , triangles , trianglesLength ) ;
93
+ }
94
+ private clipTrianglesNoRender ( vertices : NumberArrayLike , verticesLength : number , triangles : NumberArrayLike , trianglesLength : number ) {
95
+
96
+ let clipOutput = this . clipOutput , clippedVertices = this . clippedVertices ;
97
+ let clippedTriangles = this . clippedTriangles ;
98
+ let polygons = this . clippingPolygons ! ;
99
+ let polygonsCount = polygons . length ;
100
+ let vertexSize = 2 ;
101
+
102
+ let index = 0 ;
103
+ clippedVertices . length = 0 ;
104
+ clippedTriangles . length = 0 ;
105
+ outer:
106
+ for ( let i = 0 ; i < trianglesLength ; i += 3 ) {
107
+ let vertexOffset = triangles [ i ] << 1 ;
108
+ let x1 = vertices [ vertexOffset ] , y1 = vertices [ vertexOffset + 1 ] ;
109
+
110
+ vertexOffset = triangles [ i + 1 ] << 1 ;
111
+ let x2 = vertices [ vertexOffset ] , y2 = vertices [ vertexOffset + 1 ] ;
112
+
113
+ vertexOffset = triangles [ i + 2 ] << 1 ;
114
+ let x3 = vertices [ vertexOffset ] , y3 = vertices [ vertexOffset + 1 ] ;
115
+
116
+ for ( let p = 0 ; p < polygonsCount ; p ++ ) {
117
+ let s = clippedVertices . length ;
118
+ if ( this . clip ( x1 , y1 , x2 , y2 , x3 , y3 , polygons [ p ] , clipOutput ) ) {
119
+ let clipOutputLength = clipOutput . length ;
120
+ if ( clipOutputLength == 0 ) continue ;
121
+
122
+ let clipOutputCount = clipOutputLength >> 1 ;
123
+ let clipOutputItems = this . clipOutput ;
124
+ let clippedVerticesItems = Utils . setArraySize ( clippedVertices , s + clipOutputCount * vertexSize ) ;
125
+ for ( let ii = 0 ; ii < clipOutputLength ; ii += 2 ) {
126
+ let x = clipOutputItems [ ii ] , y = clipOutputItems [ ii + 1 ] ;
127
+ clippedVerticesItems [ s ] = x ;
128
+ clippedVerticesItems [ s + 1 ] = y ;
129
+ s += 2 ;
130
+ }
131
+
132
+ s = clippedTriangles . length ;
133
+ let clippedTrianglesItems = Utils . setArraySize ( clippedTriangles , s + 3 * ( clipOutputCount - 2 ) ) ;
134
+ clipOutputCount -- ;
135
+ for ( let ii = 1 ; ii < clipOutputCount ; ii ++ ) {
136
+ clippedTrianglesItems [ s ] = index ;
137
+ clippedTrianglesItems [ s + 1 ] = ( index + ii ) ;
138
+ clippedTrianglesItems [ s + 2 ] = ( index + ii + 1 ) ;
139
+ s += 3 ;
140
+ }
141
+ index += clipOutputCount + 1 ;
142
+
143
+ } else {
144
+ let clippedVerticesItems = Utils . setArraySize ( clippedVertices , s + 3 * vertexSize ) ;
145
+ clippedVerticesItems [ s ] = x1 ;
146
+ clippedVerticesItems [ s + 1 ] = y1 ;
147
+
148
+ clippedVerticesItems [ s + 2 ] = x2 ;
149
+ clippedVerticesItems [ s + 3 ] = y2 ;
150
+
151
+ clippedVerticesItems [ s + 4 ] = x3 ;
152
+ clippedVerticesItems [ s + 5 ] = y3 ;
153
+
154
+ s = clippedTriangles . length ;
155
+ let clippedTrianglesItems = Utils . setArraySize ( clippedTriangles , s + 3 ) ;
156
+ clippedTrianglesItems [ s ] = index ;
157
+ clippedTrianglesItems [ s + 1 ] = ( index + 1 ) ;
158
+ clippedTrianglesItems [ s + 2 ] = ( index + 2 ) ;
159
+ index += 3 ;
160
+ continue outer;
161
+ }
162
+ }
163
+ }
164
+ }
165
+
166
+ private clipTrianglesRender ( vertices : NumberArrayLike , verticesLength : number , triangles : NumberArrayLike , trianglesLength : number , uvs : NumberArrayLike ,
84
167
light : Color , dark : Color , twoColor : boolean ) {
85
168
86
169
let clipOutput = this . clipOutput , clippedVertices = this . clippedVertices ;
0 commit comments