UNPKG

dreemgl

Version:

DreemGL is an open-source multi-screen prototyping framework for mediated environments, with a visual editor and shader styling for webGL and DALi runtimes written in JavaScript. As a toolkit for gpu-accelerated multiscreen development, DreemGL includes

1,312 lines (1,163 loc) 90.1 kB
/* DreemGL is a collaboration between Teeming Society & Samsung Electronics, sponsored by Samsung and others. Copyright 2015-2016 Teeming Society. 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.*/ define(function(){ // provide all the apis on our math types var color_wikipedia = { acidgreen:0xffB0BF1A,aero:0xff7CB9E8,aeroblue:0xffC9FFE5,africanviolet:0xffB284BE,airforceblueraf:0xff5D8AA8,airforceblueusaf:0xff00308F, airsuperiorityblue:0xff72A0C1,alabamacrimson:0xffAF002A,aliceblue:0xffF0F8FF,alizarincrimson:0xffE32636,alloyorange:0xffC46210, almond:0xffEFDECD,amaranth:0xffE52B50,amaranthpink:0xffF19CBB,amaranthpurple:0xffAB274F,amaranthred:0xffD3212D,amazon:0xff3B7A57, amber:0xffFFBF00,ambersaeece:0xffFF7E00,americanrose:0xffFF033E,amethyst:0xff9966CC,androidgreen:0xffA4C639,antiflashwhite:0xffF2F3F4, antiquebrass:0xffCD9575,antiquebronze:0xff665D1E,antiquefuchsia:0xff915C83,antiqueruby:0xff841B2D,antiquewhite:0xffFAEBD7,aoenglish:0xff008000, applegreen:0xff8DB600,apricot:0xffFBCEB1,aqua:0xff00FFFF,aquamarine:0xff7FFFD4,armygreen:0xff4B5320,artichoke:0xff8F9779,arylideyellow:0xffE9D66B, ashgrey:0xffB2BEB5,asparagus:0xff87A96B,atomictangerine:0xffFF9966,auburn:0xffA52A2A,aureolin:0xffFDEE00,aurometalsaurus:0xff6E7F80, avocado:0xff568203,azure:0xff007FFF,azurecolor:0xffF0FFFF,azuremist:0xffF0FFFF,azureishwhite:0xffDBE9F4,babyblue:0xff89CFF0,babyblueeyes:0xffA1CAF1, babypink:0xffF4C2C2,babypowder:0xffFEFEFA,bakermillerpink:0xffFF91AF,ballblue:0xff21ABCD,bananamania:0xffFAE7B5,bananayellow:0xffFFE135, bangladeshgreen:0xff006A4E,barbiepink:0xffE0218A,barnred:0xff7C0A02,battleshipgrey:0xff848482,bazaar:0xff98777B,beaublue:0xffBCD4E6, beaver:0xff9F8170,beige:0xffF5F5DC,bdazzledblue:0xff2E5894,bigdiporuby:0xff9C2542,bisque:0xffFFE4C4,bistre:0xff3D2B1F,bistrebrown:0xff967117, bitterlemon:0xffCAE00D,bitterlime:0xffBFFF00,bittersweet:0xffFE6F5E,bittersweetshimmer:0xffBF4F51,black:0xff000000,blackbean:0xff3D0C02, blackleatherjacket:0xff253529,blackolive:0xff3B3C36,blanchedalmond:0xffFFEBCD,blastoffbronze:0xffA57164,bleudefrance:0xff318CE7, blizzardblue:0xffACE5EE,blond:0xffFAF0BE,blue:0xff0000FF,bluecrayola:0xff1F75FE,bluemunsell:0xff0093AF,bluencs:0xff0087BD,bluepantone:0xff0018A8, bluepigment:0xff333399,blueryb:0xff0247FE,bluebell:0xffA2A2D0,bluegray:0xff6699CC,bluegreen:0xff0D98BA,bluemagentaviolet:0xff553592, bluesapphire:0xff126180,blueviolet:0xff8A2BE2,blueyonder:0xff5072A7,blueberry:0xff4F86F7,bluebonnet:0xff1C1CF0,blush:0xffDE5D83, bole:0xff79443B,bondiblue:0xff0095B6,bone:0xffE3DAC9,bostonuniversityred:0xffCC0000,bottlegreen:0xff006A4E,boysenberry:0xff873260, brandeisblue:0xff0070FF,brass:0xffB5A642,brickred:0xffCB4154,brightcerulean:0xff1DACD6,brightgreen:0xff66FF00,brightlavender:0xffBF94E4, brightlilac:0xffD891EF,brightmaroon:0xffC32148,brightnavyblue:0xff1974D2,brightpink:0xffFF007F,brightturquoise:0xff08E8DE,brightube:0xffD19FE8, brilliantazure:0xff3399FF,brilliantlavender:0xffF4BBFF,brilliantrose:0xffFF55A3,brinkpink:0xffFB607F,britishracinggreen:0xff004225, bronze:0xffCD7F32,bronzeyellow:0xff737000,browntraditional:0xff964B00,brown:0xffA52A2A,brownnose:0xff6B4423,brunswickgreen:0xff1B4D3E, bubblegum:0xffFFC1CC,bubbles:0xffE7FEFF,buff:0xffF0DC82,budgreen:0xff7BB661,bulgarianrose:0xff480607,burgundy:0xff800020,burlywood:0xffDEB887, burntorange:0xffCC5500,burntsienna:0xffE97451,burntumber:0xff8A3324,byzantine:0xffBD33A4,byzantium:0xff702963,cadet:0xff536872, cadetblue:0xff5F9EA0,cadetgrey:0xff91A3B0,cadmiumgreen:0xff006B3C,cadmiumorange:0xffED872D,cadmiumred:0xffE30022,cadmiumyellow:0xffFFF600, cafeaulait:0xffA67B5B,cafenoir:0xff4B3621,calpolypomonagreen:0xff1E4D2B,cambridgeblue:0xffA3C1AD,camel:0xffC19A6B,cameopink:0xffEFBBCC, camouflagegreen:0xff78866B,canaryyellow:0xffFFEF00,candyapplered:0xffFF0800,candypink:0xffE4717A,capri:0xff00BFFF,caputmortuum:0xff592720, cardinal:0xffC41E3A,caribbeangreen:0xff00CC99,carmine:0xff960018,carminemp:0xffD70040,carminepink:0xffEB4C42,carminered:0xffFF0038, carnationpink:0xffFFA6C9,carnelian:0xffB31B1B,carolinablue:0xff56A0D3,carrotorange:0xffED9121,castletongreen:0xff00563F,catalinablue:0xff062A78, catawba:0xff703642,cedarchest:0xffC95A49,ceil:0xff92A1CF,celadon:0xffACE1AF,celadonblue:0xff007BA7,celadongreen:0xff2F847C,celeste:0xffB2FFFF, celestialblue:0xff4997D0,cerise:0xffDE3163,cerisepink:0xffEC3B83,cerulean:0xff007BA7,ceruleanblue:0xff2A52BE,ceruleanfrost:0xff6D9BC3, cgblue:0xff007AA5,cgred:0xffE03C31,chamoisee:0xffA0785A,champagne:0xffF7E7CE,charcoal:0xff36454F,charlestongreen:0xff232B2B,charmpink:0xffE68FAC, chartreusetraditional:0xffDFFF00,chartreuse:0xff7FFF00,cherry:0xffDE3163,cherryblossompink:0xffFFB7C5,chestnut:0xff954535,chinapink:0xffDE6FA1, chinarose:0xffA8516E,chinesered:0xffAA381E,chineseviolet:0xff856088,chocolatetraditional:0xff7B3F00,chocolate:0xffD2691E,chromeyellow:0xffFFA700, cinereous:0xff98817B,cinnabar:0xffE34234,cinnamon:0xffD2691E,citrine:0xffE4D00A,citron:0xff9FA91F,claret:0xff7F1734,classicrose:0xffFBCCE7, cobalt:0xff0047AB,cocoabrown:0xffD2691E,coconut:0xff965A3E,coffee:0xff6F4E37,columbiablue:0xffC4D8E2,congopink:0xffF88379,coolblack:0xff000000, coolgrey:0xff8C92AC,copper:0xffB87333,coppercrayola:0xffDA8A67,copperpenny:0xffAD6F69,copperred:0xffCB6D51,copperrose:0xff996666, coquelicot:0xffFF3800,coral:0xffFF7F50,coralpink:0xffF88379,coralred:0xffFF4040,cordovan:0xff893F45,corn:0xffFBEC5D,cornellred:0xffB31B1B, cornflowerblue:0xff6495ED,cornsilk:0xffFFF8DC,cosmiclatte:0xffFFF8E7,coyotebrown:0xff81613e,cottoncandy:0xffFFBCD9,cream:0xffFFFDD0, crimson:0xffDC143C,crimsonglory:0xffBE0032,crimsonred:0xff990000,cyan:0xff00FFFF,cyanazure:0xff4E82b4,cyancobaltblue:0xff28589C, cyancornflowerblue:0xff188BC2,cyanprocess:0xff00B7EB,cybergrape:0xff58427C,cyberyellow:0xffFFD300,daffodil:0xffFFFF31,dandelion:0xffF0E130, darkblue:0xff00008B,darkbluegray:0xff666699,darkbrown:0xff654321,darkbyzantium:0xff5D3954,darkcandyapplered:0xffA40000,darkcerulean:0xff08457E, darkchestnut:0xff986960,darkcoral:0xffCD5B45,darkcyan:0xff008B8B,darkelectricblue:0xff536878,darkgoldenrod:0xffB8860B,darkgrayx11:0xffA9A9A9, darkgreen:0xff013220,darkgreenx11:0xff006400,darkimperialblue:0xff00416A,darkjunglegreen:0xff1A2421,darkkhaki:0xffBDB76B,darklava:0xff483C32, darklavender:0xff734F96,darkliver:0xff534B4F,darkliverhorses:0xff543D37,darkmagenta:0xff8B008B,darkmediumgray:0xffA9A9A9,darkmidnightblue:0xff003366, darkmossgreen:0xff4A5D23,darkolivegreen:0xff556B2F,darkorange:0xffFF8C00,darkorchid:0xff9932CC,darkpastelblue:0xff779ECB,darkpastelgreen:0xff03C03C, darkpastelpurple:0xff966FD6,darkpastelred:0xffC23B22,darkpink:0xffE75480,darkpowderblue:0xff003399,darkpuce:0xff4F3A3C,darkraspberry:0xff872657, darkred:0xff8B0000,darksalmon:0xffE9967A,darkscarlet:0xff560319,darkseagreen:0xff8FBC8F,darksienna:0xff3C1414,darkskyblue:0xff8CBED6, darkslateblue:0xff483D8B,darkslategray:0xff2F4F4F,darkspringgreen:0xff177245,darktan:0xff918151,darktangerine:0xffFFA812,darktaupe:0xff483C32, darkterracotta:0xffCC4E5C,darkturquoise:0xff00CED1,darkvanilla:0xffD1BEA8,darkviolet:0xff9400D3,darkyellow:0xff9B870C,dartmouthgreen:0xff00703C, davysgrey:0xff555555,debianred:0xffD70A53,deepcarmine:0xffA9203E,deepcarminepink:0xffEF3038,deepcarrotorange:0xffE9692C,deepcerise:0xffDA3287, deepchampagne:0xffFAD6A5,deepchestnut:0xffB94E48,deepcoffee:0xff704241,deepfuchsia:0xffC154C1,deepgreen:0xff056608,deepgreencyanturquoise:0xff0E7C61, deepjunglegreen:0xff004B49,deeplemon:0xffF5C71A,deeplilac:0xff9955BB,deepmagenta:0xffCC00CC,deepmauve:0xffD473D4,deepmossgreen:0xff355E3B, deeppeach:0xffFFCBA4,deeppink:0xffFF1493,deeppuce:0xffA95C68,deepruby:0xff843F5B,deepsaffron:0xffFF9933,deepskyblue:0xff00BFFF, deepspacesparkle:0xff4A646C,deepspringbud:0xff556B2F,deeptaupe:0xff7E5E60,deeptuscanred:0xff66424D,deer:0xffBA8759,denim:0xff1560BD, desaturatedcyan:0xff669999,desert:0xffC19A6B,desertsand:0xffEDC9AF,desire:0xffEA3C53,diamond:0xffB9F2FF,dimgray:0xff696969,dirt:0xff9B7653, dodgerblue:0xff1E90FF,dogwoodrose:0xffD71868,dollarbill:0xff85BB65,donkeybrown:0xff664C28,drab:0xff967117,dukeblue:0xff00009C,duststorm:0xffE5CCC9, dutchwhite:0xffEFDFBB,earthyellow:0xffE1A95F,ebony:0xff555D50,ecru:0xffC2B280,eerieblack:0xff1B1B1B,eggplant:0xff614051,eggshell:0xffF0EAD6, egyptianblue:0xff1034A6,electricblue:0xff7DF9FF,electriccrimson:0xffFF003F,electriccyan:0xff00FFFF,electricgreen:0xff00FF00,electricindigo:0xff6F00FF, electriclavender:0xffF4BBFF,electriclime:0xffCCFF00,electricpurple:0xffBF00FF,electricultramarine:0xff3F00FF,electricviolet:0xff8F00FF, electricyellow:0xffFFFF33,emerald:0xff50C878,eminence:0xff6C3082,englishgreen:0xff1B4D3E,englishlavender:0xffB48395,englishred:0xffAB4B52, englishviolet:0xff563C5C,etonblue:0xff96C8A2,eucalyptus:0xff44D7A8,fallow:0xffC19A6B,falured:0xff801818,fandango:0xffB53389,fandangopink:0xffDE5285, fashionfuchsia:0xffF400A1,fawn:0xffE5AA70,feldgrau:0xff4D5D53,feldspar:0xffFDD5B1,ferngreen:0xff4F7942,ferrarired:0xffFF2800,fielddrab:0xff6C541E, firebrick:0xffB22222,fireenginered:0xffCE2029,flame:0xffE25822,flamingopink:0xffFC8EAC,flattery:0xff6B4423,flavescent:0xffF7E98E, flax:0xffEEDC82,flirt:0xffA2006D,floralwhite:0xffFFFAF0,fluorescentorange:0xffFFBF00,fluorescentpink:0xffFF1493,fluorescentyellow:0xffCCFF00, folly:0xffFF004F,forestgreentraditional:0xff014421,forestgreen:0xff228B22,frenchbeige:0xffA67B5B,frenchbistre:0xff856D4D,frenchblue:0xff0072BB, frenchfuchsia:0xffFD3F92,frenchlilac:0xff86608E,frenchlime:0xff9EFD38,frenchmauve:0xffD473D4,frenchpink:0xffFD6C9E,frenchplum:0xff811453, frenchpuce:0xff4E1609,frenchraspberry:0xffC72C48,frenchrose:0xffF64A8A,frenchskyblue:0xff77B5FE,frenchviolet:0xff8806CE,frenchwine:0xffAC1E44, freshair:0xffA6E7FF,fuchsia:0xffFF00FF,fuchsiacrayola:0xffC154C1,fuchsiapink:0xffFF77FF,fuchsiapurple:0xffCC397B,fuchsiarose:0xffC74375, fulvous:0xffE48400,fuzzywuzzy:0xffCC6666,gainsboro:0xffDCDCDC,gamboge:0xffE49B0F,gambogeorangebrown:0xff996600,genericviridian:0xff007F66, ghostwhite:0xffF8F8FF,giantsorange:0xffFE5A1D,ginger:0xffB06500,glaucous:0xff6082B6,glitter:0xffE6E8FA,gogreen:0xff00AB66,goldmetallic:0xffD4AF37, goldgolden:0xffFFD700,goldfusion:0xff85754E,goldenbrown:0xff996515,goldenpoppy:0xffFCC200,goldenyellow:0xffFFDF00,goldenrod:0xffDAA520, grannysmithapple:0xffA8E4A0,grape:0xff6F2DA8,gray:0xff808080,grayx11:0xffBEBEBE,grayasparagus:0xff465945, grayblue:0xff8C92AC,greencolorwheelx11green:0xff00FF00,greencrayola:0xff1CAC78,green:0xff008000,greenmunsell:0xff00A877, greenncs:0xff009F6B,greenpantone:0xff00AD43,greenpigment:0xff00A550,greenryb:0xff66B032,greenyellow:0xffADFF2F,grizzly:0xff885818, grullo:0xffA99A86,guppiegreen:0xff00FF7F,halayaube:0xff663854,hanblue:0xff446CCF,hanpurple:0xff5218FA,hansayellow:0xffE9D66B,harlequin:0xff3FFF00, harlequingreen:0xff46CB18,harvardcrimson:0xffC90016,harvestgold:0xffDA9100,heartgold:0xff808000,heliotrope:0xffDF73FF,heliotropegray:0xffAA98A9, heliotropemagenta:0xffAA00BB,hollywoodcerise:0xffF400A1,honeydew:0xffF0FFF0,honolulublue:0xff006DB0,hookersgreen:0xff49796B,hotmagenta:0xffFF1DCE, hotpink:0xffFF69B4,huntergreen:0xff355E3B,iceberg:0xff71A6D2,icterine:0xffFCF75E,illuminatingemerald:0xff319177,imperial:0xff602F6B, imperialblue:0xff002395,imperialpurple:0xff66023C,imperialred:0xffED2939,inchworm:0xffB2EC5D,independence:0xff4C516D,indiagreen:0xff138808, indianred:0xffCD5C5C,indianyellow:0xffE3A857,indigo:0xff6F00FF,indigodye:0xff091F92,indigo:0xff4B0082,internationalkleinblue:0xff002FA7, internationalorangeaerospace:0xffFF4F00,internationalorangeengineering:0xffBA160C,internationalorangegoldengatebridge:0xffC0362C, iris:0xff5A4FCF,irresistible:0xffB3446C,isabelline:0xffF4F0EC,islamicgreen:0xff009000,italianskyblue:0xffB2FFFF,ivory:0xffFFFFF0, jade:0xff00A86B,japanesecarmine:0xff9D2933,japaneseindigo:0xff264348,japaneseviolet:0xff5B3256,jasmine:0xffF8DE7E,jasper:0xffD73B3E, jazzberryjam:0xffA50B5E,jellybean:0xffDA614E,jet:0xff343434,jonquil:0xffF4CA16,jordyblue:0xff8AB9F1,junebud:0xffBDDA57,junglegreen:0xff29AB87, kellygreen:0xff4CBB17,kenyancopper:0xff7C1C05,keppel:0xff3AB09E,khaki:0xffC3B091,jawad:0xffC3B091,lightkhaki:0xffF0E68C, kobe:0xff882D17,kobi:0xffE79FC4,kombugreen:0xff354230,kucrimson:0xffE8000D,lasallegreen:0xff087830,languidlavender:0xffD6CADD,lapislazuli:0xff26619C, laserlemon:0xffFFFF66,laurelgreen:0xffA9BA9D,lava:0xffCF1020,lavenderfloral:0xffB57EDC,lavender:0xffE6E6FA,lavenderblue:0xffCCCCFF, lavenderblush:0xffFFF0F5,lavendergray:0xffC4C3D0,lavenderindigo:0xff9457EB,lavendermagenta:0xffEE82EE,lavendermist:0xffE6E6FA, lavenderpink:0xffFBAED2,lavenderpurple:0xff967BB6,lavenderrose:0xffFBA0E3,lawngreen:0xff7CFC00,lemon:0xffFFF700,lemonchiffon:0xffFFFACD, lemoncurry:0xffCCA01D,lemonglacier:0xffFDFF00,lemonlime:0xffE3FF00,lemonmeringue:0xffF6EABE,lemonyellow:0xffFFF44F,lenurple:0xffBA93D8, licorice:0xff1A1110,liberty:0xff545AA7,lightapricot:0xffFDD5B1,lightblue:0xffADD8E6,lightbrown:0xffB5651D,lightcarminepink:0xffE66771, lightcoral:0xffF08080,lightcornflowerblue:0xff93CCEA,lightcrimson:0xffF56991,lightcyan:0xffE0FFFF,lightdeeppink:0xffFF5CCD,lightfrenchbeige:0xffC8AD7F, lightfuchsiapink:0xffF984EF,lightgoldenrodyellow:0xffFAFAD2,lightgray:0xffD3D3D3,lightgrayishmagenta:0xffCC99CC,lightgreen:0xff90EE90, lighthotpink:0xffFFB3DE,lightkhaki:0xffF0E68C,lightmediumorchid:0xffD39BCB,lightmossgreen:0xffADDFAD,lightorchid:0xffE6A8D7,lightpastelpurple:0xffB19CD9, lightpink:0xffFFB6C1,lightredochre:0xffE97451,lightsalmon:0xffFFA07A,lightsalmonpink:0xffFF9999,lightseagreen:0xff20B2AA,lightskyblue:0xff87CEFA, lightslategray:0xff778899,lightsteelblue:0xffB0C4DE,lighttaupe:0xffB38B6D,lightthulianpink:0xffE68FAC,lightyellow:0xffFFFFE0,lilac:0xffC8A2C8, limecolorwheel:0xffBFFF00,limex11green:0xff00FF00,limegreen:0xff32CD32,limerick:0xff9DC209,lincolngreen:0xff195905,linen:0xffFAF0E6, lion:0xffC19A6B,liseranpurple:0xffDE6FA1,littleboyblue:0xff6CA0DC,liver:0xff674C47,liverdogs:0xffB86D29,liverorgan:0xff6C2E1F,liverchestnut:0xff987456, livid:0xff6699CC,lumber:0xffFFE4CD,lust:0xffE62020,magenta:0xffFF00FF,magentacrayola:0xffFF55A3,magentadye:0xffCA1F7B,magentapantone:0xffD0417E, magentaprocess:0xffFF0090,magentahaze:0xff9F4576,magentapink:0xffCC338B,magicmint:0xffAAF0D1,magnolia:0xffF8F4FF,mahogany:0xffC04000, maize:0xffFBEC5D,majorelleblue:0xff6050DC,malachite:0xff0BDA51,manatee:0xff979AAA,mangotango:0xffFF8243,mantis:0xff74C365,mardigras:0xff880085, marooncrayola:0xffC32148,maroon:0xff800000,maroonx11:0xffB03060,mauve:0xffE0B0FF,mauvetaupe:0xff915F6D,mauvelous:0xffEF98AA, maygreen:0xff4C9141,mayablue:0xff73C2FB,meatbrown:0xffE5B73B,mediumaquamarine:0xff66DDAA,mediumblue:0xff0000CD,mediumcandyapplered:0xffE2062C, mediumcarmine:0xffAF4035,mediumchampagne:0xffF3E5AB,mediumelectricblue:0xff035096,mediumjunglegreen:0xff1C352D,mediumlavendermagenta:0xffDDA0DD, mediumorchid:0xffBA55D3,mediumpersianblue:0xff0067A5,mediumpurple:0xff9370DB,mediumredviolet:0xffBB3385,mediumruby:0xffAA4069, mediumseagreen:0xff3CB371,mediumskyblue:0xff80DAEB,mediumslateblue:0xff7B68EE,mediumspringbud:0xffC9DC87,mediumspringgreen:0xff00FA9A, mediumtaupe:0xff674C47,mediumturquoise:0xff48D1CC,mediumtuscanred:0xff79443B,mediumvermilion:0xffD9603B,mediumvioletred:0xffC71585, mellowapricot:0xffF8B878,mellowyellow:0xffF8DE7E,melon:0xffFDBCB4,metallicseaweed:0xff0A7E8C,metallicsunburst:0xff9C7C38,mexicanpink:0xffE4007C, midnightblue:0xff191970,midnightgreeneaglegreen:0xff004953,mikadoyellow:0xffFFC40C,mindaro:0xffE3F988,mint:0xff3EB489,mintcream:0xffF5FFFA, mintgreen:0xff98FF98,mistyrose:0xffFFE4E1,moccasin:0xffFAEBD7,modebeige:0xff967117,moonstoneblue:0xff73A9C2,mordantred19:0xffAE0C00, mossgreen:0xff8A9A5B,mountainmeadow:0xff30BA8F,mountbattenpink:0xff997A8D,msugreen:0xff18453B,mughalgreen:0xff306030,mulberry:0xffC54B8C, mustard:0xffFFDB58,myrtlegreen:0xff317873,nadeshikopink:0xffF6ADC6,napiergreen:0xff2A8000,naplesyellow:0xffFADA5E,navajowhite:0xffFFDEAD, navy:0xff000080,navypurple:0xff9457EB,neoncarrot:0xffFFA343,neonfuchsia:0xffFE4164,neongreen:0xff39FF14,newcar:0xff214FC6,newyorkpink:0xffD7837F, nonphotoblue:0xffA4DDED,northtexasgreen:0xff059033,nyanza:0xffE9FFDB,oceanboatblue:0xff0077BE,ochre:0xffCC7722,officegreen:0xff008000, oldburgundy:0xff43302E,oldgold:0xffCFB53B,oldheliotrope:0xff563C5C,oldlace:0xffFDF5E6,oldlavender:0xff796878,oldmauve:0xff673147, oldmossgreen:0xff867E36,oldrose:0xffC08081,oldsilver:0xff848482,olive:0xff808000,olivedrab3:0xff6B8E23,olivedrab7:0xff3C341F, olivine:0xff9AB973,onyx:0xff353839,operamauve:0xffB784A7,orangecolorwheel:0xffFF7F00,orangecrayola:0xffFF7538,orangepantone:0xffFF5800, orangeryb:0xffFB9902,orange:0xffFFA500,orangepeel:0xffFF9F00,orangered:0xffFF4500,orchid:0xffDA70D6,orchidpink:0xffF2BDCD,oriolesorange:0xffFB4F14, otterbrown:0xff654321,outerspace:0xff414A4C,outrageousorange:0xffFF6E4A,oxfordblue:0xff002147,oucrimsonred:0xff990000,pakistangreen:0xff006600, palatinateblue:0xff273BE2,palatinatepurple:0xff682860,paleaqua:0xffBCD4E6,paleblue:0xffAFEEEE,palebrown:0xff987654,palecarmine:0xffAF4035, palecerulean:0xff9BC4E2,palechestnut:0xffDDADAF,palecopper:0xffDA8A67,palecornflowerblue:0xffABCDEF,palegold:0xffE6BE8A,palegoldenrod:0xffEEE8AA, palegreen:0xff98FB98,palelavender:0xffDCD0FF,palemagenta:0xffF984E5,palepink:0xffFADADD,paleplum:0xffDDA0DD,paleredviolet:0xffDB7093, palerobineggblue:0xff96DED1,palesilver:0xffC9C0BB,palespringbud:0xffECEBBD,paletaupe:0xffBC987E,paleturquoise:0xffAFEEEE,paleviolet:0xffCC99FF, palevioletred:0xffDB7093,pansypurple:0xff78184A,paoloveronesegreen:0xff009B7D,papayawhip:0xffFFEFD5,paradisepink:0xffE63E62,parisgreen:0xff50C878, pastelblue:0xffAEC6CF,pastelbrown:0xff836953,pastelgray:0xffCFCFC4,pastelgreen:0xff77DD77,pastelmagenta:0xffF49AC2,pastelorange:0xffFFB347, pastelpink:0xffDEA5A4,pastelpurple:0xffB39EB5,pastelred:0xffFF6961,pastelviolet:0xffCB99C9,pastelyellow:0xffFDFD96,patriarch:0xff800080, paynesgrey:0xff536878,peach:0xffFFE5B4,peach:0xffFFCBA4,peachorange:0xffFFCC99,peachpuff:0xffFFDAB9,peachyellow:0xffFADFAD,pear:0xffD1E231, pearl:0xffEAE0C8,pearlaqua:0xff88D8C0,pearlypurple:0xffB768A2,peridot:0xffE6E200,periwinkle:0xffCCCCFF,persianblue:0xff1C39BB,persiangreen:0xff00A693, persianindigo:0xff32127A,persianorange:0xffD99058,persianpink:0xffF77FBE,persianplum:0xff701C1C,persianred:0xffCC3333,persianrose:0xffFE28A2, persimmon:0xffEC5800,peru:0xffCD853F,phlox:0xffDF00FF,phthaloblue:0xff000F89,phthalogreen:0xff123524,pictonblue:0xff45B1E8,pictorialcarmine:0xffC30B4E, piggypink:0xffFDDDE6,pinegreen:0xff01796F,pineapple:0xff563C5C,pink:0xffFFC0CB,pinkpantone:0xffD74894,pinklace:0xffFFDDF4,pinklavender:0xffD8B2D1, pinkpearl:0xffE7ACCF,pinksherbet:0xffF78FA7,pistachio:0xff93C572,platinum:0xffE5E4E2,plum:0xff8E4585,plum:0xffDDA0DD,pompandpower:0xff86608E, popstar:0xffBE4F62,portlandorange:0xffFF5A36,powderblue:0xffB0E0E6,princetonorange:0xffF58025,prune:0xff701C1C,prussianblue:0xff003153, psychedelicpurple:0xffDF00FF,puce:0xffCC8899,pucered:0xff722F37,pullmanbrownupsbrown:0xff644117,pumpkin:0xffFF7518,purple:0xff800080, purplemunsell:0xff9F00C5,purplex11:0xffA020F0,purpleheart:0xff69359C,purplemountainmajesty:0xff9678B6,purplenavy:0xff4E5180,purplepizzazz:0xffFE4EDA, purpletaupe:0xff50404D,purpureus:0xff9A4EAE,quartz:0xff51484F,queenblue:0xff436B95,queenpink:0xffE8CCD7,quinacridonemagenta:0xff8E3A59, rackley:0xff5D8AA8,radicalred:0xffFF355E,rajah:0xffFBAB60,raspberry:0xffE30B5D,raspberryglace:0xff915F6D,raspberrypink:0xffE25098, raspberryrose:0xffB3446C,rawumber:0xff826644,razzledazzlerose:0xffFF33CC,razzmatazz:0xffE3256B,razzmicberry:0xff8D4E85,red:0xffFF0000, redcrayola:0xffEE204D,redmunsell:0xffF2003C,redncs:0xffC40233,redpantone:0xffED2939,redpigment:0xffED1C24,redryb:0xffFE2712,redbrown:0xffA52A2A, reddevil:0xff860111,redorange:0xffFF5349,redpurple:0xffE40078,redviolet:0xffC71585,redwood:0xffA45A52,regalia:0xff522D80,resolutionblue:0xff002387, rhythm:0xff777696,richblack:0xff004040,richbrilliantlavender:0xffF1A7FE,richcarmine:0xffD70040,richelectricblue:0xff0892D0,richlavender:0xffA76BCF, richlilac:0xffB666D2,richmaroon:0xffB03060,riflegreen:0xff444C38,roastcoffee:0xff704241,robineggblue:0xff00CCCC,rocketmetallic:0xff8A7F80, romansilver:0xff838996,rose:0xffFF007F,rosebonbon:0xffF9429E,roseebony:0xff674846,rosegold:0xffB76E79,rosemadder:0xffE32636,rosepink:0xffFF66CC, rosequartz:0xffAA98A9,rosered:0xffC21E56,rosetaupe:0xff905D5D,rosevale:0xffAB4E52,rosewood:0xff65000B,rossocorsa:0xffD40000,rosybrown:0xffBC8F8F, royalazure:0xff0038A8,royalblue1:0xff002366,royalblue2:0xff4169E1,royalfuchsia:0xffCA2C92,royalpurple:0xff7851A9,royalyellow:0xffFADA5E, ruber:0xffCE4676,rubinered:0xffD10056,ruby:0xffE0115F,rubyred:0xff9B111E,ruddy:0xffFF0028,ruddybrown:0xffBB6528,ruddypink:0xffE18E96, rufous:0xffA81C07,russet:0xff80461B,russiangreen:0xff679267,russianviolet:0xff32174D,rust:0xffB7410E,rustyred:0xffDA2C43,sacramentostategreen:0xff00563F, saddlebrown:0xff8B4513,safetyorangeblazeorange:0xffFF6700,safetyyellow:0xffEED202,saffron:0xffF4C430,sage:0xffBCB88A,stpatricksblue:0xff23297A, salmon:0xffFA8072,salmonpink:0xffFF91A4,sand:0xffC2B280,sanddune:0xff967117,sandstorm:0xffECD540,sandybrown:0xffF4A460,sandytaupe:0xff967117, sangria:0xff92000A,sapgreen:0xff507D2A,sapphire:0xff0F52BA,sapphireblue:0xff0067A5,satinsheengold:0xffCBA135,scarlet:0xffFF2400, scarlet:0xffFD0E35,schausspink:0xffFF91AF,schoolbusyellow:0xffFFD800,screamingreen:0xff76FF7A,seablue:0xff006994,seagreen:0xff2E8B57, sealbrown:0xff321414,seashell:0xffFFF5EE,selectiveyellow:0xffFFBA00,sepia:0xff704214,shadow:0xff8A795D,shadowblue:0xff778BA5,shampoo:0xffFFCFF1, shamrockgreen:0xff009E60,sheengreen:0xff8FD400,shimmeringblush:0xffD98695,shockingpink:0xffFC0FC0,shockingpinkcrayola:0xffFF6FFF, sienna:0xff882D17,silver:0xffC0C0C0,silverchalice:0xffACACAC,silverlakeblue:0xff5D89BA,silverpink:0xffC4AEAD,silversand:0xffBFC1C2, sinopia:0xffCB410B,skobeloff:0xff007474,skyblue:0xff87CEEB,skymagenta:0xffCF71AF,slateblue:0xff6A5ACD,slategray:0xff708090,smaltdarkpowderblue:0xff003399, smitten:0xffC84186,smoke:0xff738276,smokyblack:0xff100C08,smokytopaz:0xff933D41,snow:0xffFFFAFA,soap:0xffCEC8EF,solidpink:0xff893843, sonicsilver:0xff757575,spartancrimson:0xff9E1316,spacecadet:0xff1D2951,spanishbistre:0xff807532,spanishblue:0xff0070B8,spanishcarmine:0xffD10047, spanishcrimson:0xffE51A4C,spanishgray:0xff989898,spanishgreen:0xff009150,spanishorange:0xffE86100,spanishpink:0xffF7BFBE,spanishred:0xffE60026, spanishskyblue:0xff00FFFF,spanishviolet:0xff4C2882,spanishviridian:0xff007F5C,spirodiscoball:0xff0FC0FC,springbud:0xffA7FC00,springgreen:0xff00FF7F, starcommandblue:0xff007BB8,steelblue:0xff4682B4,steelpink:0xffCC33CC,stildegrainyellow:0xffFADA5E,stizza:0xff990000,stormcloud:0xff4F666A, straw:0xffE4D96F,strawberry:0xffFC5A8D,sunglow:0xffFFCC33,sunray:0xffE3AB57,sunset:0xffFAD6A5,sunsetorange:0xffFD5E53,superpink:0xffCF6BA9, tan:0xffD2B48C,tangelo:0xffF94D00,tangerine:0xffF28500,tangerineyellow:0xffFFCC00,tangopink:0xffE4717A,taupe:0xff483C32,taupegray:0xff8B8589, teagreen:0xffD0F0C0,tearose:0xffF88379,tearose:0xffF4C2C2,teal:0xff008080,tealblue:0xff367588,tealdeer:0xff99E6B3,tealgreen:0xff00827F, telemagenta:0xffCF3476,tenne:0xffCD5700,terracotta:0xffE2725B,thistle:0xffD8BFD8,thulianpink:0xffDE6FA1,ticklemepink:0xffFC89AC, tiffanyblue:0xff0ABAB5,tigerseye:0xffE08D3C,timberwolf:0xffDBD7D2,titaniumyellow:0xffEEE600,tomato:0xffFF6347,toolbox:0xff746CC0, topaz:0xffFFC87C,tractorred:0xffFD0E35,trolleygrey:0xff808080,tropicalrainforest:0xff00755E,trueblue:0xff0073CF,tuftsblue:0xff417DC1, tulip:0xffFF878D,tumbleweed:0xffDEAA88,tumblr:0xff2C4762,turkishrose:0xffB57281,turquoise:0xff40E0D0,turquoiseblue:0xff00FFEF,turquoisegreen:0xffA0D6B4, tuscan:0xffFAD6A5,tuscanbrown:0xff6F4E37,tuscanred:0xff7C4848,tuscantan:0xffA67B5B,tuscany:0xffC09999,twilightlavender:0xff8A496B, tyrianpurple:0xff66023C,uablue:0xff0033AA,uared:0xffD9004C,ube:0xff8878C3,uclablue:0xff536895,uclagold:0xffFFB300,ufogreen:0xff3CD070, ultramarine:0xff120A8F,ultramarineblue:0xff4166F5,ultrapink:0xffFF6FFF,ultrared:0xffFC6C85,umber:0xff635147,unbleachedsilk:0xffFFDDCA, unitednationsblue:0xff5B92E5,universityofcaliforniagold:0xffB78727,unmellowyellow:0xffFFFF66,upforestgreen:0xff014421,upmaroon:0xff7B1113, upsdellred:0xffAE2029,urobilin:0xffE1AD21,usafablue:0xff004F98,usccardinal:0xff990000,uscgold:0xffFFCC00,universityoftennesseeorange:0xffF77F00, utahcrimson:0xffD3003F,vanilla:0xffF3E5AB,vanillaice:0xffF38FA9,vegasgold:0xffC5B358,venetianred:0xffC80815,verdigris:0xff43B3AE, vermilion:0xffE34234,vermilion:0xffD9381E,veronica:0xffA020F0,verylightblue:0xff6666FF,verylightmalachitegreen:0xff64E986,verypaleorange:0xffFFDFBF, verypaleyellow:0xffFFFFBF,violet:0xff8F00FF,violetcolorwheel:0xff7F00FF,violetryb:0xff8601AF,violet:0xffEE82EE,violetblue:0xff324AB2, violetred:0xffF75394,viridian:0xff40826D,viridiangreen:0xff009698,vistablue:0xff7C9ED9,vividauburn:0xff922724,vividburgundy:0xff9F1D35, vividcerise:0xffDA1D81,vividgamboge:0xffFF9900,vividmulberry:0xffB80CE3,vividorange:0xffFF5F00,vividorchid:0xffCC00FF,vividraspberry:0xffFF006C, vividred:0xffF70D1A,vividredtangelo:0xffDF6124,vividskyblue:0xff00CCFF,vividtangelo:0xffF07427,vividtangerine:0xffFFA089,vividviolet:0xff9F00FF, vividyellow:0xffFFE302,warmblack:0xff004242,waterspout:0xffA4F4F9,wenge:0xff645452,wheat:0xffF5DEB3,white:0xffFFFFFF,whitesmoke:0xffF5F5F5, wildblueyonder:0xffA2ADD0,wildorchid:0xffD470A2,wildstrawberry:0xffFF43A4,wildwatermelon:0xffFC6C85,willpowerorange:0xffFD5800, windsortan:0xffA75502,wine:0xff722F37,winedregs:0xff673147,wisteria:0xffC9A0DC,woodbrown:0xffC19A6B,xanadu:0xff738678,yaleblue:0xff0F4D92, yankeesblue:0xff1C2841,yellow:0xffFFFF00,yellowcrayola:0xffFCE883,yellowmunsell:0xffEFCC00,yellowncs:0xffFFD300,yellowpantone:0xffFEDF00, yellowprocess:0xffFFEF00,yellowryb:0xffFEFE33,yellowgreen:0xff9ACD32,yelloworange:0xffFFAE42,yellowrose:0xffFFF000,zaffre:0xff0014A8, zinnwalditebrown:0xff2C1608,zomp:0xff39A78E, transparent:0x0 } vec2.parse = function(str, o){ var a = o || vec4() var fcol = parseFloat(str) if (fcol == str) { return vec2(fcol) } var vec2m = str.match(/^vec2\s*\(\s*(\d+)\s*,\s*(\d+)\s*\)$/i) if( vec2m ) { a[0] = vec2m[1] a[1] = vec2m[2] return a } var vec2m = str.match(/^\s*(\d+)\s*,\s*(\d+)\s*$/i) if( vec2m ) { a[0] = vec2m[1] a[1] = vec2m[2] return a } } vec3.parse = function(str, o){ var a = o || vec4() var fcol = parseFloat(str) if (fcol == str) { a[0] = fcol a[1] = fcol a[2] = fcol return a } var vec3m = str.match(/^vec4\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i) if( vec3m ) { a[0] = vec3m[1] a[1] = vec3m[2] a[2] = vec3m[3] return a; } var vec3m = str.match(/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*$/i) if( vec3m ) { a[0] = vec3m[1] a[1] = vec3m[2] a[2] = vec3m[3] return a; } } // color parser vec4.parse = function(col, o, noerror) { if(col && col.struct) return col // pass through col = col.trim().toLowerCase(); var c = color_wikipedia[col] // color LUT var a = o || vec4() if (c !== undefined){ a[0] = ((c >> 16)&0xff) /255 a[1] = ((c >> 8)&0xff) /255 a[2] = (c&0xff) /255 a[3] = ((c >> 24)&0xff) /255 // alpha return a } var fcol = parseFloat(col) if (fcol == col) { a[0] = fcol a[1] = fcol a[2] = fcol a[3] = fcol return a } var hex3 = col.match(/^#([0-9a-f]{3})$/i); if (hex3) { hex3 = hex3[1]; a[0] = parseInt(hex3.charAt(0),16)*0x11/255.0; a[1] = parseInt(hex3.charAt(1),16)*0x11/255.0; a[2] = parseInt(hex3.charAt(2),16)*0x11/255.0; a[3] = 1.0; return a; } var hex6 = col.match(/^#([0-9a-f]{6})$/i); if (hex6) { hex6 = hex6[1]; a[0] = parseInt(hex6.substr(0,2),16)/255.0; a[1] = parseInt(hex6.substr(2,2),16)/255.0; a[2] = parseInt(hex6.substr(4,2),16)/255.0; a[3] = 1.0; // console.log("hex6" ,a); return a; } var rgba = col.match(/^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+.*\d*)\s*\)$/i) || col.match(/^rgba\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i); if( rgba ) { a[0] = rgba[1]/255.0; a[1] = rgba[2]/255.0; a[2] = rgba[3]/255.0; a[3] = rgba[4]===undefined?1:rgba[4]/255.0; // console.log("rgba" ,a); return a; } var rgb = col.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i); if( rgb ) { a[0] = rgb[1]/255.0; a[1] = rgb[2]/255.0; a[2] = rgb[3]/255.0; a[3] = 1.0; // console.log("rgb" ,a); return a; } var vec4m = col.match(/^vec4\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i); if( vec4m ) { a[0] = vec4m[1]; a[1] = vec4m[2]; a[2] = vec4m[3]; a[3] = vec4m[4]; return a; } var vec4m = col.match(/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*$/i); if( vec4m ) { a[0] = vec4m[1]; a[1] = vec4m[2]; a[2] = vec4m[3]; a[3] = vec4m[4]; return a; } var vec4m = col.match(/^\s*(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s*$/i); if( vec4m ) { a[0] = vec4m[1]; a[1] = vec4m[2]; a[2] = vec4m[3]; a[3] = vec4m[4]; return a; } // lets parse the color if(!noerror) console.error("Cannot parse color "+col) a[0] = -1 a[1] = 1 a[2] = 0.85 a[3] = 1 return a /* var len = col.length var i = 0 if (col.charAt(0) == '#') i++; c = 0 while(i<len) { var ch = col.charCodeAt(i++) if(ch >= 48 && ch <= 57) { // hex color c = c << 4 c += ch - 48 } else if(ch >= 97 && ch <= 102) { c = c << 4 c += ch - 87 } else if(ch >= 65 && ch <= 70) { c = c << 4 c += ch - 55 } else { // try to find the nearest color col = col.toLowerCase() c = color_wikipedia[col] if(c === undefined) for(var k in color_wikipedia){ if(k.indexOf(col) != -1){ c = color_wikipedia[k] // cache it color_wikipedia[col] = c break } } len = 0 } } if(len == 3){ a[0] = ((c&0xf00)>>8|(c&0xf00)>>4) /255 a[1] = ((c&0xf0)|(c&0xf0)>>4) /255 a[2] = ((c&0xf)|(c&0xf)<<4) /255 console.log("here", col, a) return a } a[0] = ((c >> 16)&0xff) /255 a[1] = ((c >> 8)&0xff) /255 a[2] = (c&0xff) /255 a[3] = 1.0; console.log("ho", col, a) //return [1,1,1,1] //console.log(c) return undefined //a[3] = ((c >> 24)&0xff) /255 // alpha return a*/ } function matApi(exports){ } // shared vector api function vecApi(exports){ function vecFn(fn){ return function(a, o){ if(!o) o = exports() for(var i = 0; i < a.length; i++) o[i] = fn(a[i]) return o } } function vecFn2(fn){ return function(a, b, o){ if(!o) o = exports() for(var i = 0; i < a.length; i++) o[i] = fn(a[i], b[i]) return o } } exports.sin = vecFn(Math.sin) exports.cos = vecFn(Math.cos) exports.tan = vecFn(Math.tan) exports.asin = vecFn(Math.asin) exports.acos = vecFn(Math.acos) exports.atan = vecFn(Math.atan) exports.pow = vecFn(Math.pow) exports.exp = vecFn(Math.exp) exports.log = vecFn(Math.log) exports.exp2 = vecFn(function(v){return Math.pow(2, v)}) exports.log2 = vecFn(Math.log2) exports.sqrt = vecFn(Math.sqrt) exports.inversesqrt = vecFn(function(v){ return 1/Math.sqrt(v)}) exports.abs = vecFn(Math.abs) exports.floor = vecFn(Math.floor) exports.ceil = vecFn(Math.ceil) exports.min = vecFn(Math.min) exports.max = vecFn(Math.max) exports.mod = vecFn2(function(a,b){ return a%b }) exports.identity = function(o){ if(!o) o = exports() for(var i = 0;i<o.length;i++) o[i] = 0 return o } exports.distance = function(a, b){ var d = 0 for(var i = 0; i < a.length; i++){ d+= Math.pow(a[i] - b[i], 2) } return Math.sqrt(d) } exports.len = function(a){ var d = 0 for(var i = 0; i < a.length; i++) d += Math.pow(a[i], 2) return Math.sqrt(d) } exports.negate = function(a, o){ if(!o) o = exports() for(var i = 0; i < a.length; i++) o[i] = -a[i] return o } exports.inverse = function(a, o){ if(!o) o = exports() for(var i = 0; i < a.length; i++) o[i] = 1 / a[i] return o } exports.mix = function(a, b, f, o){ if(!o) o = exports() for(var i = 0; i < a.length; i++) o[i] = a[i] + f * (b[i] - a[i]) return o } exports.mix2 = function(a, b, f, o){ if(!o) o = exports() for(var i = 0; i < a.length; i++) o[i] = a[i] + f[i] * (b[i] - a[i]) return o } exports.greater = function(a, b){ if(a[i] < b[i]) return false return true } exports.normalize = function(a, o){ if(!o) o = exports() var d = 0 for(var i = 0; i < a.length; i++) d += Math.pow(a[i], 2) d = Math.sqrt(d) for(var i = 0; i < a.length; i++) o[i] = a[i] / d return o } } vecApi(vec2) vec2.fromString = function(color){ var o = this if(this === vec2) o = vec2() return vec2.parse(color, o) } vec2.random = function( scale, o){ if(scale === undefined) scale = 1 if(!o) o = vec2() var r = exports.PI2 * Math.random() o[0] = cos(r) * scale o[1] = sin(r) * scale return o } vec2.mul = vec2.vec2_mul_vec2 = function(a, b, o){ if(!o) o = vec2() o[0] = a[0] * b[0] o[1] = a[1] * b[1] return o } vec2.add = vec2.vec2_add_vec2 = function(a, b, o){ if(!o) o = vec2() o[0] = a[0] + b[0] o[1] = a[1] + b[1] return o; } vec2.sub = vec2.vec2_sub_vec2 = function(a, b, o){ if(!o) o = vec2() o[0] = a[0] - b[0] o[1] = a[1] - b[1] return o } vec2.div = vec2.vec2_div_vec2 = function(a, b, o){ if(!o) o = vec2() o[0] = a[0] / b[0] o[1] = a[1] / b[1] return o } vec2.mul_mat2 = vec2.vec2_mul_mat2 = function(v, m, o){ if(!o) o = vec2() o[0] = m[0] * v[0] + m[2] * v[1] o[1] = m[1] * v[0] + m[3] * v[1] return o } vec2.mul_mat3 = vec2.vec2_mul_mat3 = function(v, m, o){ if(!o) o = vec2() o[0] = m[0] * v[0] + m[2] * v[1] + m[4] o[1] = m[1] * v[0] + m[3] * v[1] + m[5] return o } vec2.mul_mat4 = vec2.vec2_mul_mat4 = function(v, m, o){ if(!o) o = vec2() o[0] = m[0] * v[0] + m[4] * v[1] + m[12] o[1] = m[1] * v[0] + m[5] * v[1] + m[13] return o } vec2.mul_mat4_t = vec2.vec2_mul_mat4_t = function(v, m, o){ if(!o) o = vec2() o[0] = m[0] * v[0] + m[1] * v[1] + m[3] o[1] = m[4] * v[0] + m[5] * v[1] + m[7] return o } vec2.mul_float32 = vec2.vec2_mul_float32 = function(v, f, o){ if(!o) o = vec2() o[0] = v[0] * f o[1] = v[1] * f return o } vec2.lessThan = function(a, b, o){ if(!o) o = exports.bvec2() o[0] = a[0] < b[0] o[1] = a[1] < b[1] return o } vec2.lessThanEqual = function(a, b, o){ if(!o) o = exports.bvec2() o[0] = a[0] <= b[0] o[1] = a[1] <= b[1] return o } vec2.greaterThan = function(a, b, o){ if(!o) o = exports.bvec2() o[0] = a[0] > b[0] o[1] = a[1] > b[1] return o } vec2.greaterThanEqual = function(a, b, o){ if(!o) o = exports.bvec2() o[0] = a[0] >= b[0] o[1] = a[1] >= b[1] return o } vec2.equal = function(a, b, o){ if(!o) o = exports.bvec2() o[0] = a[0] == b[0] o[1] = a[1] == b[1] return o } vec2.equals = function(a, b){ return a[0] === b[0] && a[1] === b[1] } vec2.notEqual = function(a, b, o){ if(!o) o = exports.bvec2() o[0] = a[0] != b[0] o[1] = a[1] != b[1] return o } vec2.ortho = function(a, o){ if(!o) o = vec2() var x = -a[1]; var y = a[0]; o[0] = x; o[1] = y; return o; } vec2.rotate = function(a, ang, o){ if(!o) o = vec2() var sa = Math.sin(ang); var ca = Math.cos(ang); o = vec2(ca*a[0] - sa * a[1],sa*a[0] + ca * a[1]) return o; } vecApi(vec3) vec3.intersectplane = function(origin, direction, normal, dist) { var denom = vec3.dot(direction, normal) if (denom !== 0) { var t = -(vec3.dot(origin, normal) + dist) / denom if (t < 0) { console.log("t = 0?") return null } var diradd = vec3.vec3_mul_float(direction, t); var res = vec3.add(origin, diradd); // console.log(origin, direction, t,diradd, res); return res; } else { if (vec3.dot(normal, origin) + dist === 0) { return origin } else { return null } } } vec2.dot = function(a,b){ return a[0] * b[0] + a[1] * b[1] ; } vec3.dot = function(a,b){ // console.log(a,b); return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; } vec3.fromString = function(color){ var o = this if(this === vec3) o = vec3() return vec3.parse(color, o) } vec3.random = function(scale, o){ if(scale === undefined) scale = 1 if(!o) o = vec3() var r = 2*exports.PI * Math.random() var zr = (Math.random() * 2.0) - 1.0 o[0] = cos(r) * zr o[1] = sin(r) * zr o[2] = sqrt(1.0 - zr*zr) * scale return o } vec3.mul = vec3.vec3_mul_vec3 = function(a, b, o){ if(!o) o = vec3() o[0] = a[0] * b[0] o[1] = a[1] * b[1] o[2] = a[2] * b[2] return o } vec3.mulfloat = vec3.vec3_mul_float = function(a, b, o){ if(!o) o = vec3() o[0] = a[0] * b o[1] = a[1] * b o[2] = a[2] * b return o } vec3.add = vec3.vec3_add_vec3 = function(a, b, o){ if(!o) o = vec3() o[0] = a[0] + b[0] o[1] = a[1] + b[1] o[2] = a[2] + b[2] return o } vec3.sub = vec3.vec3_sub_vec3 = function(a, b, o){ if(!o) o = vec3() o[0] = a[0] - b[0] o[1] = a[1] - b[1] o[2] = a[2] - b[2] return o } vec3.div = vec3.vec3_div_vec3 = function(a, b, o){ if(!o) o = vec3() o[0] = a[0] / b[0] o[1] = a[1] / b[1] o[2] = a[2] / b[2] return o } vec3.mul_mat3 = vec3.vec3_mul_mat3 = function(v, m, o){ if(!o) o = vec3() o[0] = v[0] * m[0] + v[1] * m[1] + v[2] * m[2] o[1] = v[0] * m[3] + v[1] * m[4] + v[2] * m[5] o[2] = v[0] * m[6] + v[1] * m[7] + v[2] * m[8] return o } vec3.mul_mat4 = vec3.vec3_mul_mat4 = function(v, m, o){ if(!o) o = vec3() var vx = v[0], vy = v[1], vz = v[2], vw = m[12] * vx + m[13] * vy + m[14] * vz + m[15] vw = vw || 1.0 o[0] = (m[0] * vx + m[1] * vy + m[2] * vz + m[3]) / vw o[1] = (m[4] * vx + m[5] * vy + m[6] * vz + m[7]) / vw o[2] = (m[8] * vx + m[9] * vy + m[10] * vz + m[11]) / vw return o } vec2.mul_mat4 = vec2.vec2_mul_mat4 = function(v, m, o){ if(!o) o = vec2() o[0] = m[0] * v[0] + m[1] * v[1] + m[3] o[1] = m[4] * v[0] + m[5] * v[1] + m[7] return o } vec3.mul_mat4_minor = vec3.vec3_mul_mat4_minor = function(v, m, o){ if(!o) o = vec3() var vx = v[0], vy = v[1], vz = v[2] o[0] = vx * m[0] + vy * m[1] + vz * m[2] o[1] = vx * m[4] + vy * m[5] + vz * m[6] o[2] = vx * m[8] + vy * m[9] + vz * m[10] return o } vec3.cross = vec3.vec3_cross_vec3 = function(a, b, o){ if(!o) o = vec3() var ax = a[0], ay = a[1], az = a[2] var bx = b[0], by = b[1], bz = b[2] o[0] = ay * bz - az * by o[1] = az * bx - ax * bz o[2] = ax * by - ay * bx return o } vec3.lessThan = function(a, b, o){ if(!o) o = exports.bvec3() o[0] = a[0] < b[0] o[1] = a[1] < b[1] o[2] = a[2] < b[2] return o } vec3.lessThanEqual = function(a, b, o){ if(!o) o = exports.bvec3() o[0] = a[0] <= b[0] o[1] = a[1] <= b[1] o[2] = a[2] <= b[2] return o } vec3.greaterThan = function(a, b, o){ if(!o) o = exports.bvec3() o[0] = a[0] > b[0] o[1] = a[1] > b[1] o[2] = a[2] > b[2] return o } vec3.greaterThanEqual = function(a, b, o){ if(!o) o = exports.bvec3() o[0] = a[0] >= b[0] o[1] = a[1] >= b[1] o[2] = a[2] >= b[2] return o } vec3.equal = function(a, b, o){ if(!o) o = exports.bvec3() o[0] = a[0] == b[0] o[1] = a[1] == b[1] o[2] = a[2] == b[2] return o } vec3.equals = function(a, b){ return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] } vec3.notEqual = function(a, b, o){ if(!o) o = exports.bvec3() o[0] = a[0] != b[0] o[1] = a[1] != b[1] o[2] = a[2] != b[2] return o } vecApi(vec4) vec4.dot = function(a,b){ return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; } vec4.desaturate = function(incolor, amt){ if (!amt) amt = 1.0 var hsv = vec4.toHSV(incolor); return vec4.fromHSV(hsv[0], hsv[1] * (1.0-amt), hsv[2]); } vec4.contrastcolor = function(incolor){ var hsl = vec4.toHSV(incolor); var l = 0; if (hsl[2] > 0.5) { if (hsl[1] > 0.7) { l = 1; } else { l = 0; } } else { l = 1; } return vec4.fromHSV(0,0,l,1); } // converts standard vec4 color in to HSL space (not to be confused with HSV space!) vec4.toHSL = function(inp){ var max = Math.max(inp[0], inp[1], inp[2]), min = Math.min(inp[0], inp[1], inp[2]); var h, s, l = (max + min) / 2; var r = inp[0]; var g = inp[1]; var b = inp[2]; if(max == min){ h = s = 0; // achromatic }else{ var d = max - min; s = l > 0.5 ? d / (2 - max - min) : d / (max + min); if (max == inp[0]){ h = (g - b) / d + (g < b ? 6 : 0); } else{ if (max == inp[1]){ h = (b - r) / d + 2; } else{ h = (r - g) / d + 4; } } h /= 6; } return [h, s, l, inp[3]];; } // calculate an RGBA color from an HSLA color // h/s/l/a = [0..1] range. vec4.fromHSL = function(h,s,l,a,o){ if(!o) o = vec4() var r, g, b; if(s == 0){ r = g = b = l; // achromatic }else{ var hue2rgb = function hue2rgb(p, q, t){ if(t < 0) { t += 1; } else { if(t > 1) t -= 1; } if(t < 1/6) return p + (q - p) * 6 * t; if(t < 1/2) return q; if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; return p; } var q = l < 0.5 ? l * (1 + s) : l + s - l * s; var p = 2 * l - q; r = hue2rgb(p, q, h + 1/3); g = hue2rgb(p, q, h); b = hue2rgb(p, q, h - 1/3); } o[0] = r; o[1] = g; o[2] = b; o[3] = a !== undefined?a: 1.0 return o; } // converts standard vec4 color in to HSL space (not to be confused with HSV space!) vec4.toHSV = function(inp){ var r = inp[0]; var g = inp[1]; var b = inp[2]; var max = Math.max(r, Math.max(g, b)), min = Math.min(r, Math.min(g, b)); var h, s, v = max; var d = max - min; s = max === 0 ? 0 : d / max; if(max == min) { h = 0; // achromatic } else { switch(max) { case r: h = (g - b) / d + (g < b ? 6 : 0); break; case g: h = (b - r) / d + 2; break; case b: h = (r - g) / d + 4; break; } h /= 6; } // return { h: h, s: s, v: v }; return [h, s, v, inp[3]];; } // calculate an RGBA color from an HSVA color // h/s/l/a = [0..1] range. vec4.fromHSV = function(h,s,v,a,o){ if(!o) o = vec4() h *= 360; if (h < 0) h+=360; var r = 0.0; var g = 0.0; var b = 0.0; if(s == 0.0){ r = g = b = v; // achromatic }else{ var t1 = v; var t2 = (1. - s) * v; var t3 = (t1 - t2) * (h %60 ) / 60.; if (h == 360.) h = 0.; if (h < 60.) { r = t1; b = t2; g = t2 + t3 } else if (h < 120.) { g = t1; b = t2; r = t1 - t3 } else if (h < 180.) { g = t1; r = t2; b = t2 + t3 } else if (h < 240.) { b = t1; r = t2; g = t1 - t3 } else if (h < 300.) { b = t1; g = t2; r = t2 + t3 } else if (h < 360.) { r = t1; g = t2; b = t1 - t3 } else { r = 0.; g = 0.; b = 0. } } o[0] = r; o[1] = g; o[2] = b; o[3] = a !== undefined? a: 1.0 return o; } vec4.equals = function(a,b) { if (a[0] != b[0]) return false; if (a[1] != b[1]) return false; if (a[2] != b[2]) return false; if (a[3] != b[3]) return false; return true; } vec4.fromString = function(color, alpha){ var o = this if(this === vec4) o = vec4() return vec4.parse(color, o) } // TODO wrong vec4.random = function(scale, o){ if(scale === undefined) scale = 1 if(!o) o = vec3() o[0] = Math.random() o[1] = Math.random() o[2] = Math.random() o[3] = Math.random() vec4.normalize(o, o) return o } vec4.mul = vec4.vec4_mul_vec4 = function(a, b, o){ if(!o) o = vec4() o[0] = a[0] * b[0] o[1] = a[1] * b[1] o[2] = a[2] * b[2] o[3] = a[3] * b[3] return o } vec4.mul_float32 = vec4.vec4_mul_float32 = function(a, b, o){ if(!o) o = vec4() o[0] = a[0] * b o[1] = a[1] * b o[2] = a[2] * b o[3] = a[3] * b return o } vec4.vec4_mul_float32_rgb = function(a, b, o){ if(!o) o = vec4() o[0] = a[0] * b o[1] = a[1] * b o[2] = a[2] * b o[3] = a[3] return o } vec4.add = vec4.vec4_add_vec4 = function(a, b, o){ if(!o) o = vec4() o[0] = a[0] + b[0] o[1] = a[1] + b[1] o[2] = a[2] + b[2] o[3] = a[3] + b[3] return o } vec4.sub = vec4.vec4_sub_vec4 = function(a, b, o){ if(!o) o = vec4() o[0] = a[0] - b[0] o[1] = a[1] - b[1] o[2] = a[2] - b[2] o[3] = a[3] - b[3] return o } vec4.div = vec4.vec4_div_vec4 = function(a, b, o){ if(!o) o = vec4() o[0] = a[0] / b[0] o[1] = a[1] / b[1] o[2] = a[2] / b[2] o[3] = a[3] / b[3] return o } vec4.mul_mat4 = vec4.vec4_mul_mat4 = function(v, m, o){ if(!o) o = vec4() var vx = v[0], vy = v[1], vz = v[2], vw = v[3] o[0] = m[0] * vx + m[1] * vy + m[2] * vz + m[3] * vw o[1] = m[4] * vx + m[5] * vy + m[6] * vz + m[7] * vw o[2] = m[8] * vx + m[9] * vy + m[10] * vz + m[11] * vw o[3] = m[12] * vx + m[13] * vy + m[14] * vz + m[15] * vw return o } vec4.mul_quat = vec4.vec4_mul_quat = function(v, q, o){ if(!o) o = vec4() var vx = v[0], vy = v[1], vz = v[2], qx = q[0], qy = q[1], qz = q[2], qw = q[3], // calculate quat * vec ix = qw * vx + qy * vz - qz * vy, iy = qw * vy + qz * vx - qx * vz, iz = qw * vz + qx * vy - qy * vx, iw = -qx * vx - qy * vy - qz * vz // calculate result * inverse quat o[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy o[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz o[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx o[3] = v[3] return o } vec4.lessThan = function(a, b, o){ if(!o) o = exports.bvec4() o[0] = a[0] < b[0] o[1] = a[1] < b[1] o[2] = a[2] < b[2] o[3] = a[3] < b[3] return o } vec4.lessThanEqual = function(a, b, o){ if(!o) o = exports.bvec4() o[0] = a[0] <= b[0] o[1] = a[1] <= b[1] o[2] = a[2] <= b[2] o[3] = a[3] <= b[3] return o } vec4.greaterThan = function(a, b, o){ if(!o) o = exports.bvec4() o[0] = a[0] > b[0] o[1] = a[1] > b[1] o[2] = a[2] > b[2] o[3] = a[3] > b[3] return o } vec4.greaterThanEqual = function(a, b, o){ if(!o) o = exports.bvec4() o[0] = a[0] >= b[0] o[1] = a[1] >= b[1] o[2] = a[2] >= b[2] o[3] = a[3] >= b[3] return o } vec4.equal = function(a, b, o){ if(!o) o = exports.bvec4() o[0] = a[0] == b[0] o[1] = a[1] == b[1] o[2] = a[2] == b[2] o[3] = a[3] == b[3] return o } vec4.notEqual = function(a, b, o){ if(!o) o = exports.bvec4() o[0] = a[0] != b[0] o[1] = a[1] != b[1] o[2] = a[2] != b[2] o[3] = a[3] != b[3] return o } vecApi(quat) quat.identity = function(o){ if(!o) o = quat() o[0] = o[1] = o[2] = 0, o[3] = 1 return o } quat.mul = quat.quat_mul_quat = function(a, b, o){ if(!o) o = quat() var ax = a[0], ay = a[1], az = a[2], aw = a[3], bx = b[0], by = b[1], bz = b[2], bw = b[3] o[0] = ax * bw + aw * bx + ay * bz - az * by o[1] = ay * bw + aw * by + az * bx - ax * bz o[2] = az * bw + aw * bz + ax * by - ay * bx o[3] = aw * bw - ax * bx - ay * by - az * bz return o } quat.rotateX = function(q, angle, o){ if(!o) o = quat() angle *= 0.5 var ax = q[0], ay = q[1], az = q[2], aw = q[3], bx = sin(angle), bw = cos(angle) o[0] = ax * bw + aw * bx o[1] = ay * bw + az * bx o[2] = az * bw - ay * bx o[3] = aw * bw - ax * bx return o } // rotate quaternion Q with angle A around y axis quat.rotateY = function(q, angle, o){ if(!o) o = quat() angle *= 0.5 var ax = q[0], ay = q[1], az = q[2], aw = q[3], by = sin(angle), bw = cos(angle) o[0] = ax * bw - az * by o[1] = ay * bw + aw * by o[2] = az * bw + ax * by o[3] = aw * bw - ay * by return o } // rotate quaternion Q with angle A around z axis quat.rotateZ = function(q, angle, o){ if(!o) o = quat() angle *= 0.5 var ax = q.x, ay = q.y, az = q.z, aw = q.w, bz = sin(angle), bw = cos(angle) o[0] = ax * bw + ay * bz o[1] = ay * bw - ax * bz o[2] = az * bw + aw * bz o[3] = aw * bw - az * bz return o } // Calculate w from xyz quat.calculateW = function(q, o){ if(!o) o = quat() o[0] = q[0] o[1] = q[1] o[2] = q[2] o[3] = -sqrt(abs(1.0 - x * x - y * y - z * z)) return o } // spherelical linear interpolation between quat A and B with f (0-1) quat.slerp = function(a, b, f, o){ if(!o) o = quat() var ax = a[0], ay = a[1], az = a[2], aw = a[3], bx = b[0], by = b[1], bz = b[2], bw = b[3] var omega, cosom, sinom, scale0, scale1 // calc cosine cosom = ax * bx + ay * by + az * bz + aw * bw // adjust signs (if necessary) if (cosom < 0.0) { cosom = -cosom bx = - bx, by = - by, bz = - bz, bw = - bw } // calculate coefficients if ( (1.0 - cosom) > 0.000001 ) { // standard case (slerp) omega = acos(cosom) sinom = sin(omega) scale0 = sin((1.0 - f) * omega) / sinom scale1 = sin(f * omega) / sinom } else { // linear interpolate if very close scale0 = 1.0 - f scale1 = f } // calculate final values o[0] = scale0 * ax + scale1 * bx o[1] = scale0 * ay + scale1 * by o[2] = scale0 * az + scale1 * bz o[3] = scale0 * aw + scale1 * bw return o } // invert Q quat.invert = function(q, o){ if(!o) o = quat() var a0 = q[0], a1 = q[1], a2 = q[2], a3 = q[3], d = a0*a0 + a1*a1 + a2*a2 + a3*a3, i = d ? 1.0/d : 0 o[0] = -a0*i, o[1] = -a1*i, o[2] = -a2*i, o[3] = a3*i } // Calculates the