/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 - 2 0 2 1 ĠAnt on ĠTr ush kov Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġapp . the le ma . g 3 d . mesh Ċ Ċ import Ġapp . the le ma . gl .* Ċ import Ġapp . the le ma . math . MATH Ċ Ċ object ĠMesh 3 D Tool Ġ{ ĊĠĠĠ Ġfun Ġcalculate Flat Normals ( mesh : ĠI Mesh , Ġpositions : ĠI Vertex Accessor , Ġnormals : ĠI Vertex Accessor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpositions . rewind () ĊĠĠĠĠĠĠĠ Ġnormals . rewind () ĊĊĠĠĠĠĠĠĠ Ġmesh . forEach Triangle Ġ{ Ġv 1 , Ġv 2 , Ġv 3 Ġ-> Ġcalculate Flat Normal ( v 1 , Ġv 2 , Ġv 3 , Ġpositions , Ġnormals ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġpositions . rewind () ĊĠĠĠĠĠĠĠ Ġnormals . rewind () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcalculate Flat Normals ( mesh : ĠI Mesh ) Ġ= Ġcalculate Flat Normals ( ĊĠĠĠĠĠĠĠ Ġmesh , ĊĠĠĠĠĠĠĠ Ġmesh . positions (), ĊĠĠĠĠĠĠĠ Ġmesh . normals () !! ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĠAfter Ġcalculate Ġtangent , Ġit Ġis Ġrecommended Ġto Ġuse Ġ[ orth ogonal ize Tang ents ] Ġ*/ ĊĠĠĠ Ġinline Ġfun Ġcalculate Tang ents ( ĊĠĠĠĠĠĠĠ Ġmesh : ĠI Mesh , ĊĠĠĠĠĠĠĠ Ġpositions : ĠI Vertex Accessor , ĊĠĠĠĠĠĠĠ Ġu vs : ĠI Vertex Accessor , ĊĠĠĠĠĠĠĠ Ġtang ents : ĠI Vertex Accessor , ĊĠĠĠĠĠĠĠ Ġbi Tang ents : ĠI Vertex Accessor ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠafterEach Triangle : Ġ() Ġ-> ĠUnit Ġ= Ġ{} ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpositions . rewind () ĊĠĠĠĠĠĠĠ Ġu vs . rewind () ĊĠĠĠĠĠĠĠ Ġtang ents . rewind () ĊĊĠĠĠĠĠĠĠ Ġmesh . forEach Triangle Ġ{ Ġv 1 , Ġv 2 , Ġv 3 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Tangent ( v 1 , Ġv 2 , Ġv 3 , Ġpositions , Ġu vs , Ġtang ents , Ġbi Tang ents ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠafterEach Triangle () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpositions . rewind () ĊĠĠĠĠĠĠĠ Ġu vs . rewind () ĊĠĠĠĠĠĠĠ Ġtang ents . rewind () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinline Ġfun Ġor thogonal ize Tang ents ( tang ents : ĠI Vertex Accessor , Ġnormals : ĠI Vertex Accessor , ĠafterEach Vertex : Ġ() Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠĠĠĠĠ Ġtang ents . rewind () ĊĠĠĠĠĠĠĠ Ġnormals . rewind () ĊĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġtang ents . count ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtx Ġ= Ġtang ents . get Float ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġty Ġ= Ġtang ents . get Float ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtz Ġ= Ġtang ents . get Float ( 8 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnx Ġ= Ġnormals . get Float ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġny Ġ= Ġnormals . get Float ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnz Ġ= Ġnormals . get Float ( 8 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdot Ġ= ĠM ATH . dot ( nx , Ġny , Ġnz , Ġtx , Ġty , Ġtz ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnormalize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlen 2 Ġ= ĠM ATH . len 2 ( tx , Ġty , Ġtz ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( len 2 Ġ!= Ġ 0 f Ġ&& Ġlen 2 Ġ!= Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinv Sqrt Ġ= ĠM ATH . inv Sqrt ( len 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx Ġ*= Ġinv Sqrt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġty Ġ*= Ġinv Sqrt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtz Ġ*= Ġinv Sqrt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtx Ġ-= Ġnx Ġ* Ġdot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġty Ġ-= Ġny Ġ* Ġdot ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtz Ġ-= Ġnz Ġ* Ġdot ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtang ents . set Float s ( tx , Ġty , Ġtz ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtang ents . next Vertex () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnormals . next Vertex () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠafterEach Vertex () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtang ents . rewind () ĊĠĠĠĠĠĠĠ Ġnormals . rewind () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcalculate Flat Normal ( ĊĠĠĠĠĠĠĠ Ġv 1 : ĠInt , ĊĠĠĠĠĠĠĠ Ġv 2 : ĠInt , ĊĠĠĠĠĠĠĠ Ġv 3 : ĠInt , ĊĠĠĠĠĠĠĠ Ġpositions : ĠI Vertex Accessor , ĊĠĠĠĠĠĠĠ Ġnormals : ĠI Vertex Accessor ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpositions . set Vertex Position ( v 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġax Ġ= Ġpositions . get Float ( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġay Ġ= Ġpositions . get Float ( 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġaz Ġ= Ġpositions . get Float ( 8 ) ĊĊĠĠĠĠĠĠĠ Ġpositions . set Vertex Position ( v 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġbx Ġ= Ġpositions . get Float ( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġby Ġ= Ġpositions . get Float ( 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġb z Ġ= Ġpositions . get Float ( 8 ) ĊĊĠĠĠĠĠĠĠ Ġpositions . set Vertex Position ( v 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġcx Ġ= Ġpositions . get Float ( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcy Ġ= Ġpositions . get Float ( 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġcz Ġ= Ġpositions . get Float ( 8 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġb ax Ġ= Ġbx Ġ- Ġax ĊĠĠĠĠĠĠĠ Ġval Ġb ay Ġ= Ġby Ġ- Ġay ĊĠĠĠĠĠĠĠ Ġval Ġbaz Ġ= Ġb z Ġ- Ġaz ĊĠĠĠĠĠĠĠ Ġval Ġc ax Ġ= Ġcx Ġ- Ġax ĊĠĠĠĠĠĠĠ Ġval Ġc ay Ġ= Ġcy Ġ- Ġay ĊĠĠĠĠĠĠĠ Ġval Ġc az Ġ= Ġcz Ġ- Ġaz ĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġb ay Ġ* Ġc az Ġ- Ġbaz Ġ* Ġc ay ĊĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġbaz Ġ* Ġc ax Ġ- Ġb ax Ġ* Ġc az ĊĠĠĠĠĠĠĠ Ġvar Ġz Ġ= Ġb ax Ġ* Ġc ay Ġ- Ġb ay Ġ* Ġc ax ĊĊĠĠĠĠĠĠĠ Ġ// Ġnormalize ĊĠĠĠĠĠĠĠ Ġval Ġlen 2 Ġ= ĠM ATH . len 2 ( x , Ġy , Ġz ) ĊĠĠĠĠĠĠĠ Ġif Ġ( len 2 Ġ!= Ġ 0 f Ġ&& Ġlen 2 Ġ!= Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinv Sqrt Ġ= ĠM ATH . inv Sqrt ( len 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ*= Ġinv Sqrt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ*= Ġinv Sqrt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġz Ġ*= Ġinv Sqrt ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnormals . put Float s Start ( v 1 , Ġx , Ġy , Ġz ) ĊĠĠĠĠĠĠĠ Ġnormals . put Float s Start ( v 2 , Ġx , Ġy , Ġz ) ĊĠĠĠĠĠĠĠ Ġnormals . put Float s Start ( v 3 , Ġx , Ġy , Ġz ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ@ param Ġtang ents ĠAttribute Ġwhere Ġtang ents Ġwill Ġbe Ġwritten . ĊĠĠĠĠ Ġ* Ġ@ param Ġbit ang ents ĠAttribute Ġwhere Ġbi - tang ents Ġwill Ġbe Ġwritten . ĠIf Ġnot Ġset , Ġwill Ġnot Ġbe Ġcalculated Ġ*/ ĊĠĠĠ Ġfun Ġcalculate Tangent ( ĊĠĠĠĠĠĠĠ Ġv 1 : ĠInt , ĊĠĠĠĠĠĠĠ Ġv 2 : ĠInt , ĊĠĠĠĠĠĠĠ Ġv 3 : ĠInt , ĊĠĠĠĠĠĠĠ Ġpositions : ĠI Vertex Accessor , ĊĠĠĠĠĠĠĠ Ġu vs : ĠI Vertex Accessor , ĊĠĠĠĠĠĠĠ Ġtang ents : ĠI Vertex Accessor , ĊĠĠĠĠĠĠĠ Ġbit ang ents : ĠI Vertex Accessor ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġhttp :// www . opengl - tutorial . org / ru / intermediate - tutorials / tutorial - 1 3 - normal - mapping / ĊĊĠĠĠĠĠĠĠ Ġ// println ( v 1 ) ĊĠĠĠĠĠĠĠ Ġpositions . set Vertex Position ( v 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġx 1 Ġ= Ġpositions . get Float ( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġy 1 Ġ= Ġpositions . get Float ( 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġz 1 Ġ= Ġpositions . get Float ( 8 ) ĊĊĠĠĠĠĠĠĠ Ġpositions . set Vertex Position ( v 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġdelta Pos 1 x Ġ= Ġpositions . get Float ( 0 ) Ġ- Ġx 1 ĊĠĠĠĠĠĠĠ Ġval Ġdelta Pos 1 y Ġ= Ġpositions . get Float ( 4 ) Ġ- Ġy 1 ĊĠĠĠĠĠĠĠ Ġval Ġdelta Pos 1 z Ġ= Ġpositions . get Float ( 8 ) Ġ- Ġz 1 ĊĊĠĠĠĠĠĠĠ Ġpositions . set Vertex Position ( v 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġdelta Pos 2 x Ġ= Ġpositions . get Float ( 0 ) Ġ- Ġx 1 ĊĠĠĠĠĠĠĠ Ġval Ġdelta Pos 2 y Ġ= Ġpositions . get Float ( 4 ) Ġ- Ġy 1 ĊĠĠĠĠĠĠĠ Ġval Ġdelta Pos 2 z Ġ= Ġpositions . get Float ( 8 ) Ġ- Ġz 1 ĊĊĠĠĠĠĠĠĠ Ġu vs . set Vertex Position ( v 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġu 1 Ġ= Ġu vs . get Float ( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġv 1 1 Ġ= Ġu vs . get Float ( 4 ) ĊĊĠĠĠĠĠĠĠ Ġu vs . set Vertex Position ( v 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġdelta UV 1 x Ġ= Ġu vs . get Float ( 0 ) Ġ- Ġu 1 ĊĠĠĠĠĠĠĠ Ġval Ġdelta UV 1 y Ġ= Ġu vs . get Float ( 4 ) Ġ- Ġv 1 1 ĊĊĠĠĠĠĠĠĠ Ġu vs . set Vertex Position ( v 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġdelta UV 2 x Ġ= Ġu vs . get Float ( 0 ) Ġ- Ġu 1 ĊĠĠĠĠĠĠĠ Ġval Ġdelta UV 2 y Ġ= Ġu vs . get Float ( 4 ) Ġ- Ġv 1 1 ĊĊĠĠĠĠĠĠĠ Ġval Ġf Ġ= Ġ 1 . 0 f Ġ/ Ġ( delta UV 1 x Ġ* Ġdelta UV 2 y Ġ- Ġdelta UV 2 x Ġ* Ġdelta UV 1 y ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġf Ġ* Ġ( delta Pos 1 x Ġ* Ġdelta UV 2 y Ġ- Ġdelta Pos 2 x Ġ* Ġdelta UV 1 y ) ĊĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġf Ġ* Ġ( delta Pos 1 y Ġ* Ġdelta UV 2 y Ġ- Ġdelta Pos 2 y Ġ* Ġdelta UV 1 y ) ĊĠĠĠĠĠĠĠ Ġvar Ġz Ġ= Ġf Ġ* Ġ( delta Pos 1 z Ġ* Ġdelta UV 2 y Ġ- Ġdelta Pos 2 z Ġ* Ġdelta UV 1 y ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġlen 2 Ġ= ĠM ATH . len 2 ( x , Ġy , Ġz ) ĊĠĠĠĠĠĠĠ Ġif Ġ( len 2 Ġ!= Ġ 0 f Ġ&& Ġlen 2 Ġ!= Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinv Sqrt Ġ= ĠM ATH . inv Sqrt ( len 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ*= Ġinv Sqrt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ*= Ġinv Sqrt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġz Ġ*= Ġinv Sqrt ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( tang ents . attribute . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtang ents . put Float s Start ( v 1 , Ġx , Ġy , Ġz , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtang ents . put Float s Start ( v 2 , Ġx , Ġy , Ġz , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtang ents . put Float s Start ( v 3 , Ġx , Ġy , Ġz , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtang ents . put Float s Start ( v 1 , Ġx , Ġy , Ġz ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtang ents . put Float s Start ( v 2 , Ġx , Ġy , Ġz ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtang ents . put Float s Start ( v 3 , Ġx , Ġy , Ġz ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Mesh 3 D Tool : Ġtangent Ġmust Ġhave Ġ 3 Ġor Ġ 4 Ġcomponents ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( bit ang ents Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġf Ġ* Ġ( delta Pos 2 x Ġ* Ġdelta UV 1 x Ġ- Ġdelta Pos 1 x Ġ* Ġdelta UV 2 x ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġf Ġ* Ġ( delta Pos 2 y Ġ* Ġdelta UV 1 x Ġ- Ġdelta Pos 1 y Ġ* Ġdelta UV 2 x ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġz Ġ= Ġf Ġ* Ġ( delta Pos 2 z Ġ* Ġdelta UV 1 x Ġ- Ġdelta Pos 1 z Ġ* Ġdelta UV 2 x ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlen 2 Ġ= ĠM ATH . len 2 ( x , Ġy , Ġz ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( len 2 Ġ!= Ġ 0 f Ġ&& Ġlen 2 Ġ!= Ġ 1 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinv Sqrt Ġ= ĠM ATH . inv Sqrt ( len 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ*= Ġinv Sqrt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ*= Ġinv Sqrt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġz Ġ*= Ġinv Sqrt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( bit ang ents . attribute . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit ang ents . put Float s Start ( v 1 , Ġx , Ġy , Ġz , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit ang ents . put Float s Start ( v 2 , Ġx , Ġy , Ġz , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit ang ents . put Float s Start ( v 3 , Ġx , Ġy , Ġz , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit ang ents . put Float s Start ( v 1 , Ġx , Ġy , Ġz ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit ang ents . put Float s Start ( v 2 , Ġx , Ġy , Ġz ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbit ang ents . put Float s Start ( v 3 , Ġx , Ġy , Ġz ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" Mesh 3 D Tool : Ġbit ang ent Ġmust Ġhave Ġ 3 Ġor Ġ 4 Ġcomponents ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }