STORY   LOOP   FURRY   PORN   GAMES
• C •   SERVICES [?] [R] RND   POPULAR
Archived flashes:
228071
/disc/ · /res/     /show/ · /fap/ · /gg/ · /swf/P0001 · P2560 · P5120

<div style="position:absolute;top:-99px;left:-99px;"><img src="http://swfchan.com:57475/27039827?noj=FRM27039827-28DC" width="1" height="1"></div>

Amber in 3D by Doom-the-wolf.swf

This is the info page for
Flash #163382

(Click the ID number above for more basic data on this flash file.)


ActionScript [AS3]
Section 1
//MainTimeline (modelViewer_fla.MainTimeline) package modelViewer_fla { import pixels3d.*; import flash.geom.*; import flash.display.*; import flash.events.*; import flash.text.*; import flash.utils.*; import flash.net.*; import flash.ui.*; import adobe.utils.*; import flash.accessibility.*; import flash.errors.*; import flash.external.*; import flash.filters.*; import flash.media.*; import flash.printing.*; import flash.system.*; import flash.xml.*; public dynamic class MainTimeline extends MovieClip { public var stage3d:Stage3D; public var bgColor:uint; public var OLD_X:Number; public var OLD_Y:Number; public var OLD_Z:Number; public var copyText:String; public var tF:TextFormat; public var initHeight:int; public var perspectiveDistance:Number; public var center:Array; public var txt:TextField; public var MODEL_TEXT:Array; public var resolution:Number; public var EDIT_MODE:int; public var VAR_NAME:String; public var OLD_DIST:Number; public var OLD_MX:Number; public var OLD_MY:Number; public var orthographicScale:Number; public var curResolution:int; public var defMat:Material3D; public var camera:Camera3D; public var model:Model3D; public var light:Light3D; public var position:Array; public var resolutions:Array; public var hAngle:Number; public var modelName:String; public var scale:Number; public var bmp:Bitmap; public var initCenter:Array; public var dist:Number; public var light2:Light3D; public var light3:Light3D; public var perspectiveAngle:Number; public var vAngle:Number; public function MainTimeline(){ addFrameScript(0, frame1); } function frame1(){ stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; txt = new TextField(); tF = new TextFormat(); MODEL_TEXT = []; MODEL_TEXT[MODEL_TEXT.length] = <![CDATA[ s 1 g Eye1 usemtl Eye v -0.27478 5.09026 0.25027 v -0.39502 5.09998 0.0388 v -0.21614 5.43267 0.29751 v -0.4059 5.46848 -0.03123 v -0.17919 5.32731 0.10726 v -0.32577 5.4508 0.17515 v -0.20436 5.24156 0.31399 v -0.44214 5.27901 -0.06779 v -0.32845 5.53506 0.14162 v -0.29609 5.21151 0.24259 v -0.36778 5.22182 0.08025 v -0.27834 5.38142 0.24063 v -0.37659 5.38053 0.08702 v -0.32734 5.1668 0.16041 f 3 7 5 f 3 9 6 f 5 7 1 f 2 11 8 f 6 9 4 f 3 5 9 f 4 9 5 f 4 5 8 f 5 1 2 f 8 5 2 f 7 10 1 f 11 13 8 f 7 12 10 f 2 14 11 f 13 6 4 f 4 8 13 f 3 6 12 f 12 7 3 f 1 10 14 f 1 14 2 s 1 g Amber usemtl Fur v -0.38235 2.41157 0.37177 v -0.47161 2.41157 -0.46306 v -0.33138 3.28393 0.42316 v -0.33138 3.28393 -0.33127 v 0 3.0156 0.65197 v 0 2.94522 -0.57384 v 0 3.28393 0.53451 v 0 3.28393 -0.45054 v -0.41513 2.94522 0.43947 v -0.4515 2.94522 -0.45249 v -0.48013 3.28393 -0.0437 v -0.23165 3.64582 0.30265 v -0.23165 3.64582 -0.14076 v 0 3.64582 0.38772 v 0 3.64582 -0.22582 v -0.35751 3.64582 0.08095 v -0.24977 3.89009 0.24204 v -0.25065 3.8906 -0.19975 v -0.00003 3.89063 0.33414 v 0 3.8906 -0.28941 v -0.37724 3.8906 0.02233 v -0.33725 3.98922 0.22085 v -0.29646 3.9888 -0.27888 v 0 3.9888 -0.3552 v -0.43906 3.9888 0.00162 v -0.27774 4.39431 0.20098 v -0.45141 4.27131 -0.25238 v 0 4.28587 0.31133 v 0 4.24436 -0.36502 v -0.26479 4.54047 0.05392 v -0.56446 4.51794 -0.25238 v 0 4.54047 0.1865 v 0 4.54047 -0.33458 v -0.56446 4.51794 -0.02769 v 0 2.41157 0.50992 v -0.28712 1.94539 -0.25946 v -0.3128 1.94539 0.10588 v 0 1.94539 0.18736 v 0 1.94539 -0.35625 v -0.12529 4.60075 0.00964 v -0.12529 4.60075 -0.23149 v 0 4.60075 0.04245 v 0 4.60075 -0.2643 v -0.18968 4.60075 -0.11092 v -0.12455 4.74691 -0.00855 v -0.12455 4.74691 -0.22618 v 0 4.74691 0.02105 v 0 4.74691 -0.25579 v -0.18855 4.74691 -0.11737 v -0.26285 4.78698 0.13877 v -0.3847 4.83576 -0.39643 v 0 4.74858 0.21493 v 0 4.83576 -0.46252 v -0.46798 4.82909 -0.14193 v -0.20351 5.24122 0.31391 v -0.37927 5.05511 -0.5352 v 0 5.23998 0.42388 v 0 5.10246 -0.627 v -0.44182 5.27861 -0.06796 v -0.20216 5.50812 0.3577 v -0.35601 5.45635 -0.45955 v 0 5.50606 0.42902 v 0 5.48157 -0.56319 v -0.39401 5.52268 -0.13253 v -0.18616 5.67894 0.14757 v -0.29169 5.59162 -0.41354 v 0 5.6492 0.26057 v 0 5.6583 -0.41175 v -0.33059 5.63646 -0.15279 v -0.45141 4.27131 -0.02769 v 0 5.727 0.03809 v 0 5.74029 -0.23722 v -0.19889 5.72402 -0.11666 v -0.08401 4.73749 0.44337 v 0 4.73384 0.4712 v -0.17273 5.08082 0.6797 v -0.48342 5.67935 -0.54972 v -0.50802 5.79639 -0.28282 v -0.39673 5.78879 -0.54601 v -0.4211 5.87492 -0.3548 v -0.64946 5.85726 -0.69513 v -0.63511 6.03544 -0.31556 v -0.48793 6.024 -0.65463 v -0.52462 6.09307 -0.41714 v -0.69404 6.09511 -0.69845 v -0.67133 6.18826 -0.4345 v -0.62276 6.16129 -0.68664 v -0.61376 6.20471 -0.49892 v -0.6757 6.226 -0.6107 v -0.59544 6.21015 -0.58878 v -0.69404 6.14748 -0.5779 v -0.39384 5.87037 -0.45865 v -0.47476 6.09681 -0.54262 v -0.45345 5.37317 -0.31226 v -0.29322 5.65036 -0.28928 v -2.08839 4.29531 -0.27658 v -2.08839 4.47158 -0.27658 v -2.08839 4.47158 -0.03944 v -2.08839 4.29531 -0.03944 v -0.44923 2.0233 -1.18411 v 0 2.41182 -1.31633 v 0 1.64167 -1.05422 v -0.33594 1.68421 -2.07574 v 0 1.96549 -2.13253 v 0 1.40791 -1.9829 v -0.1186 1.42886 -3.02392 v 0 1.55129 -3.02394 v 0 1.30859 -3.0239 v 0 1.87037 -0.07649 v 0 1.42994 -3.19498 v -0.5731 4.58343 -0.13804 v -0.45816 4.30272 -0.13804 v -0.62958 2.31056 -0.31597 v -0.62366 2.79215 -0.29863 v -0.60878 3.06286 -0.04418 v -0.65984 2.79215 0.30349 v -0.68916 2.38964 0.43279 v -0.29159 1.44771 -0.24694 v -0.4071 1.79782 0.46921 v -0.68883 1.78437 0.40588 v -0.59797 1.44771 -0.24898 v -1.30673 4.35443 -0.02137 v -1.30673 4.52709 -0.17788 v -1.30673 4.27131 -0.05245 v -1.30673 4.46429 -0.25238 v -1.30673 4.24726 -0.15015 v -1.30673 4.25313 -0.2674 v -0.32638 1.19071 -0.2298 v -0.41713 1.43543 0.33551 v -0.65488 1.42468 0.28758 v -0.56528 1.17595 -0.25406 v -0.23947 1.3469 -0.46588 v -0.50125 1.35848 -0.48392 v -0.24155 1.14855 -0.48185 v -0.52368 1.14455 -0.48517 v -0.3637 0.32914 -0.09312 v -0.71218 0.32914 -0.13618 v -0.29527 0.32914 -0.35098 v -0.64372 0.32914 -0.39004 v -2.26883 4.33308 -0.36204 v -2.24477 4.47407 -0.36204 v -2.24477 4.47407 0.04601 v -2.26883 4.33308 0.04601 v -2.3285 4.48921 -0.23629 v -2.3285 4.31978 -0.23629 v -2.3285 4.48921 -0.07974 v -2.3285 4.31978 -0.07974 v -2.08839 4.49616 -0.15801 v -2.08839 4.28172 -0.15801 v -2.38993 4.30246 -0.45836 v -2.38993 4.47407 -0.45836 v -2.38992 4.47407 0.14234 v -2.38992 4.30246 0.14234 v -2.49923 4.48921 -0.2823 v -2.49923 4.30246 -0.2823 v -2.50012 4.48921 -0.04508 v -2.50012 4.30246 -0.04508 v -2.504 4.48921 -0.2702 v -2.504 4.30246 -0.2702 v -2.504 4.48921 -0.05315 v -2.504 4.30246 -0.05315 v -0.32309 0 -0.21333 v -0.67189 0 -0.24288 v -0.26078 0 -0.0585 v -0.83918 0 -0.15994 v -0.70075 0 0.0026 v -0.68255 0.37716 -0.03416 v -0.45941 0.37716 0.0036 v -0.46295 0 0.03593 v -0.53794 0.40256 -0.08644 v 0 4.84719 0.61669 v 0 4.78715 0.53452 v -0.15372 4.83095 0.4194 v -0.22777 0.3133 0.16514 v -0.94404 0.31452 0.06048 v -0.20152 0 0.20453 v -0.99565 0 0.08573 v -0.78188 0 0.27188 v -0.7822 0.31452 0.22694 v -0.44374 0.31645 0.27584 v -0.45272 0 0.30936 v -0.76257 0 0.28808 v -0.73615 0.31735 0.25654 v -0.47863 0.31419 0.27672 v -0.47026 0 0.31689 v -0.55857 2.41934 0.56043 v -0.4534 1.14051 -0.17252 v -0.56698 1.74351 0.60129 v -0.53251 1.39839 0.35188 v -0.53748 2.88725 0.39469 v -0.48358 0.16435 -0.34093 v -0.53758 2.89169 -0.4066 v -0.5506 2.33264 -0.42482 v -0.44478 1.49069 -0.27304 v -0.41835 2.41546 0.48777 v -0.07826 4.78715 0.53452 v -0.3632 1.40438 -0.54481 v -0.38262 1.14055 -0.51951 v -0.4695 0.32914 -0.40451 v -0.65964 5.98363 -0.63297 v -0.65096 6.08537 -0.43544 v -0.49622 5.73218 -0.50001 v -0.39122 5.4766 -0.40256 v -0.39794 5.52048 -0.22967 v -0.51234 5.78648 -0.34391 v -0.11703 4.80972 0.47872 v -0.11153 4.84 0.57135 v -0.20139 4.90745 0.43105 v 0 4.79292 0.50742 v -0.0708 4.79418 0.50739 v -0.10013 4.81225 0.46396 v -0.1387 4.84267 0.41298 v -0.10701 4.84013 0.54357 v 0 4.84749 0.58146 v -0.12973 4.84083 0.47942 v -0.14576 4.83322 0.49652 v 0 5.0089 0.68284 v 0 5.11867 0.66328 v -0.05992 5.08404 0.69519 v -0.05954 4.84041 0.60774 v -0.05615 4.84063 0.57623 v -0.44868 5.87283 -0.44829 v -0.54495 4.28558 0.41554 v -0.15046 4.39241 0.22978 v 0 4.47622 0.5738 v -2.21763 4.27723 -0.15801 v -2.41625 4.30085 -0.15801 v -2.3285 4.308 -0.15801 v -0.02098 3.87721 0.46454 v -0.41982 4.28698 0.14871 v 0 3.98942 0.3477 v -0.55469 4.04999 0.18448 v -0.013 4.0657 0.42605 v -0.59886 4.05772 0.52092 v -0.52502 3.87721 0.34654 v -0.0544 4.05772 0.64834 v -0.04459 4.28558 0.53274 v -0.2533 4.40069 0.35354 v -0.34101 4.24067 0.6486 v -0.34305 3.79547 0.64533 v -0.22932 3.95353 0.26432 v -0.36455 4.03573 0.73745 v -0.29756 4.3503 0.49796 v -0.27355 3.72196 0.39555 v 0 4.26228 0.69119 v 0 3.8775 0.65951 v -0.15022 4.35577 0.49182 v -0.11249 4.29413 0.55438 v -0.07948 4.54728 0.34501 v -0.09979 4.47713 0.45381 v 0 4.57788 0.38535 v 0 4.28871 0.60252 v 0 4.44082 0.47625 v -0.17914 4.49873 0.36154 v -0.24483 4.35268 0.5908 v 0 4.1438 0.69783 v 0 4.09941 0.5189 v 0 4.40988 0.59139 v -0.06367 4.09345 0.65652 v -0.13661 4.48993 0.16308 v -0.6669 4.54271 -0.14441 v -1.68052 4.49836 -0.16611 v -1.68052 4.41054 -0.04365 v -0.97386 4.42894 -0.03873 v -0.97369 4.28643 -0.0524 v -1.68052 4.45945 -0.25207 v -1.68052 4.31147 -0.05748 v -0.9737 4.27011 -0.14387 v -1.68052 4.28266 -0.15377 v -0.97401 4.50866 -0.15886 v -1.68052 4.31146 -0.25875 v -0.97369 4.28642 -0.24569 v -0.97386 4.4733 -0.23909 v -0.28339 5.09751 0.25048 v -0.40286 5.10721 0.04076 v -0.21535 5.43305 0.29573 v -0.40431 5.46564 -0.02984 v -0.33058 5.52987 0.14142 v -0.22993 5.14482 -0.01168 v -0.19566 5.4824 0.0681 v -0.15076 5.13813 0.21539 v -0.47515 5.36016 -0.14324 v -0.56977 5.09133 -0.22133 v -0.43135 4.92893 0.14347 v -0.54705 0 -0.09926 v -0.51735 0 -0.22964 v -0.22771 4.54984 0.2731 v -0.26053 4.47192 0.26499 v -0.25993 4.41264 0.42771 v -0.15556 4.46521 0.47893 v -0.3083 2.94522 0.47669 v 0 2.81115 0.565 v 0 3.06233 0.56558 v -0.22497 3.06361 0.49232 v -0.25721 2.84145 0.48347 v -0.22951 3.01221 0.59854 v -0.23604 2.90075 0.55645 v 0 2.87892 0.6192 v -0.33444 5.11959 0.17994 v -0.07652 4.91411 0.65549 v -0.16076 4.91373 0.63994 v 0 4.91321 0.66325 v -0.14195 5.16263 0.50455 v 0 5.14912 0.60274 v -0.22207 5.08916 0.46595 v 0 5.33343 0.39892 v -0.35034 5.5939 0.12781 v -0.42884 5.50083 -0.05452 v 0.38235 2.41157 0.37177 v 0.47161 2.41157 -0.46306 v 0.33138 3.28393 0.42316 v 0.33138 3.28393 -0.33127 v 0.41513 2.94522 0.43947 v 0.4515 2.94522 -0.45249 v 0.48013 3.28393 -0.0437 v 0.23165 3.64582 0.30265 v 0.23165 3.64582 -0.14076 v 0.35751 3.64582 0.08095 v 0.24977 3.89009 0.24204 v 0.25065 3.8906 -0.19975 v 0.37724 3.8906 0.02233 v 0.33725 3.98922 0.22085 v 0.29646 3.9888 -0.27888 v 0.43906 3.9888 0.00162 v 0.27774 4.39431 0.20098 v 0.45141 4.27131 -0.25238 v 0.26479 4.54047 0.05392 v 0.56446 4.51794 -0.25238 v 0.56446 4.51794 -0.02769 v 0.28712 1.94539 -0.25946 v 0.3128 1.94539 0.10588 v 0.12529 4.60075 0.00964 v 0.12529 4.60075 -0.23149 v 0.18968 4.60075 -0.11092 v 0.12455 4.74691 -0.00855 v 0.12455 4.74691 -0.22618 v 0.18855 4.74691 -0.11737 v 0.26285 4.78698 0.13877 v 0.3847 4.83576 -0.39643 v 0.46798 4.82909 -0.14193 v 0.20351 5.24122 0.31391 v 0.37927 5.05511 -0.5352 v 0.44182 5.27861 -0.06796 v 0.20216 5.50812 0.3577 v 0.35601 5.45635 -0.45955 v 0.39401 5.52268 -0.13253 v 0.18616 5.67894 0.14757 v 0.29169 5.59162 -0.41354 v 0.33059 5.63646 -0.15279 v 0.45141 4.27131 -0.02769 v 0.19889 5.72402 -0.11666 v 0.08401 4.73749 0.44337 v 0.17273 5.08082 0.6797 v 0.48342 5.67935 -0.54972 v 0.50802 5.79639 -0.28282 v 0.39673 5.78879 -0.54601 v 0.4211 5.87492 -0.3548 v 0.64946 5.85726 -0.69513 v 0.63511 6.03544 -0.31556 v 0.48793 6.024 -0.65463 v 0.52462 6.09307 -0.41714 v 0.69404 6.09511 -0.69845 v 0.67133 6.18826 -0.4345 v 0.62276 6.16129 -0.68664 v 0.61376 6.20471 -0.49892 v 0.6757 6.226 -0.6107 v 0.59544 6.21015 -0.58878 v 0.69404 6.14748 -0.5779 v 0.39384 5.87037 -0.45865 v 0.47476 6.09681 -0.54262 v 0.45345 5.37317 -0.31226 v 0.29322 5.65036 -0.28928 v 2.08839 4.29531 -0.27658 v 2.08839 4.47158 -0.27658 v 2.08839 4.47158 -0.03944 v 2.08839 4.29531 -0.03944 v 0.44923 2.0233 -1.18411 v 0.33594 1.68421 -2.07574 v 0.1186 1.42886 -3.02392 v 0.5731 4.58343 -0.13804 v 0.45816 4.30272 -0.13804 v 0.62958 2.31056 -0.31597 v 0.62366 2.79215 -0.29863 v 0.60878 3.06286 -0.04418 v 0.65984 2.79215 0.30349 v 0.68916 2.38964 0.43279 v 0.29159 1.44771 -0.24694 v 0.4071 1.79782 0.46921 v 0.68883 1.78437 0.40588 v 0.59797 1.44771 -0.24898 v 1.30673 4.35443 -0.02137 v 1.30673 4.52709 -0.17788 v 1.30673 4.27131 -0.05245 v 1.30673 4.46429 -0.25238 v 1.30673 4.24726 -0.15015 v 1.30673 4.25313 -0.2674 v 0.32638 1.19071 -0.2298 v 0.41713 1.43543 0.33551 v 0.65488 1.42468 0.28758 v 0.56528 1.17595 -0.25406 v 0.23947 1.3469 -0.46588 v 0.50125 1.35848 -0.48392 v 0.24155 1.14855 -0.48185 v 0.52368 1.14455 -0.48517 v 0.3637 0.32914 -0.09312 v 0.71218 0.32914 -0.13618 v 0.29527 0.32914 -0.35098 v 0.64372 0.32914 -0.39004 v 2.26883 4.33308 -0.36204 v 2.24477 4.47407 -0.36204 v 2.24477 4.47407 0.04601 v 2.26883 4.33308 0.04601 v 2.3285 4.48921 -0.23629 v 2.3285 4.31978 -0.23629 v 2.3285 4.48921 -0.07974 v 2.3285 4.31978 -0.07974 v 2.08839 4.49616 -0.15801 v 2.08839 4.28172 -0.15801 v 2.38993 4.30246 -0.45836 v 2.38993 4.47407 -0.45836 v 2.38992 4.47407 0.14234 v 2.38992 4.30246 0.14234 v 2.49923 4.48921 -0.2823 v 2.49923 4.30246 -0.2823 v 2.50012 4.48921 -0.04508 v 2.50012 4.30246 -0.04508 v 2.504 4.48921 -0.2702 v 2.504 4.30246 -0.2702 v 2.504 4.48921 -0.05315 v 2.504 4.30246 -0.05315 v 0.32309 0 -0.21333 v 0.67189 0 -0.24288 v 0.26078 0 -0.0585 v 0.83918 0 -0.15994 v 0.70075 0 0.0026 v 0.68255 0.37716 -0.03416 v 0.45941 0.37716 0.0036 v 0.46295 0 0.03593 v 0.53794 0.40256 -0.08644 v 0.15372 4.83095 0.4194 v 0.22777 0.3133 0.16514 v 0.94404 0.31452 0.06048 v 0.20152 0 0.20453 v 0.99565 0 0.08573 v 0.78188 0 0.27188 v 0.7822 0.31452 0.22694 v 0.44374 0.31645 0.27584 v 0.45272 0 0.30936 v 0.76257 0 0.28808 v 0.73615 0.31735 0.25654 v 0.47863 0.31419 0.27672 v 0.47026 0 0.31689 v 0.55857 2.41934 0.56043 v 0.4534 1.14051 -0.17252 v 0.56698 1.74351 0.60129 v 0.53251 1.39839 0.35188 v 0.53748 2.88725 0.39469 v 0.48358 0.16435 -0.34093 v 0.53758 2.89169 -0.4066 v 0.5506 2.33264 -0.42482 v 0.44478 1.49069 -0.27304 v 0.41835 2.41546 0.48777 v 0.07826 4.78715 0.53452 v 0.3632 1.40438 -0.54481 v 0.38262 1.14055 -0.51951 v 0.4695 0.32914 -0.40451 v 0.65964 5.98363 -0.63297 v 0.65096 6.08537 -0.43544 v 0.49622 5.73218 -0.50001 v 0.39122 5.4766 -0.40256 v 0.39794 5.52048 -0.22967 v 0.51234 5.78648 -0.34391 v 0.11703 4.80972 0.47872 v 0.11153 4.84 0.57135 v 0.20139 4.90745 0.43105 v 0.0708 4.79418 0.50739 v 0.10013 4.81225 0.46396 v 0.1387 4.84267 0.41298 v 0.10701 4.84013 0.54357 v 0.12973 4.84083 0.47942 v 0.14576 4.83322 0.49652 v 0.05992 5.08404 0.69519 v 0.05954 4.84041 0.60774 v 0.05615 4.84063 0.57623 v 0.44868 5.87283 -0.44829 v 0.54495 4.28558 0.41554 v 0.15046 4.39241 0.22978 v 2.21763 4.27723 -0.15801 v 2.41625 4.30085 -0.15801 v 2.3285 4.308 -0.15801 v 0.02098 3.87721 0.46454 v 0.41982 4.28698 0.14871 v 0.55469 4.04999 0.18448 v 0.013 4.0657 0.42605 v 0.59886 4.05772 0.52092 v 0.52502 3.87721 0.34654 v 0.0544 4.05772 0.64834 v 0.04459 4.28558 0.53274 v 0.2533 4.40069 0.35354 v 0.34101 4.24067 0.6486 v 0.34305 3.79547 0.64533 v 0.22932 3.95353 0.26432 v 0.36455 4.03573 0.73745 v 0.29756 4.3503 0.49796 v 0.27355 3.72196 0.39555 v 0.15022 4.35577 0.49182 v 0.11249 4.29413 0.55438 v 0.07948 4.54728 0.34501 v 0.09979 4.47713 0.45381 v 0.17914 4.49873 0.36154 v 0.24483 4.35268 0.5908 v 0.06367 4.09345 0.65652 v 0.13661 4.48993 0.16308 v 0.6669 4.54271 -0.14441 v 1.68052 4.49836 -0.16611 v 1.68052 4.41054 -0.04365 v 0.97386 4.42894 -0.03873 v 0.97369 4.28643 -0.0524 v 1.68052 4.45945 -0.25207 v 1.68052 4.31147 -0.05748 v 0.9737 4.27011 -0.14387 v 1.68052 4.28266 -0.15377 v 0.97401 4.50866 -0.15886 v 1.68052 4.31146 -0.25875 v 0.97369 4.28642 -0.24569 v 0.97386 4.4733 -0.23909 v 0.28339 5.09751 0.25048 v 0.40286 5.10721 0.04076 v 0.21535 5.43305 0.29573 v 0.40431 5.46564 -0.02984 v 0.33058 5.52987 0.14142 v 0.22993 5.14482 -0.01168 v 0.19566 5.4824 0.0681 v 0.15076 5.13813 0.21539 v 0.47515 5.36016 -0.14324 v 0.56977 5.09133 -0.22133 v 0.43135 4.92893 0.14347 v 0.54705 0 -0.09926 v 0.51735 0 -0.22964 v 0.22771 4.54984 0.2731 v 0.26053 4.47192 0.26499 v 0.25993 4.41264 0.42771 v 0.15556 4.46521 0.47893 v 0.3083 2.94522 0.47669 v 0.22497 3.06361 0.49232 v 0.25721 2.84145 0.48347 v 0.22951 3.01221 0.59854 v 0.23604 2.90075 0.55645 v 0.33444 5.11959 0.17994 v 0.07652 4.91411 0.65549 v 0.16076 4.91373 0.63994 v 0.14195 5.16263 0.50455 v 0.22207 5.08916 0.46595 v 0.35034 5.5939 0.12781 v 0.42884 5.50083 -0.05452 f 238 252 251 f 17 21 26 f 26 21 28 f 25 17 30 f 30 17 26 f 26 28 31 f 35 31 39 f 39 31 36 f 51 52 15 f 15 52 49 f 16 53 50 f 58 44 54 f 44 46 54 f 54 46 56 f 38 37 41 f 38 41 43 f 29 27 32 f 29 32 34 f 32 35 39 f 32 39 37 f 34 32 37 f 34 37 38 f 47 45 55 f 47 55 57 f 58 54 63 f 63 54 59 f 54 56 59 f 55 58 63 f 55 63 60 f 57 55 60 f 57 60 62 f 62 60 65 f 62 65 67 f 61 59 56 f 74 76 79 f 79 76 81 f 25 23 17 f 27 29 22 f 27 22 18 f 25 30 27 f 25 27 18 f 26 31 35 f 26 35 30 f 30 35 32 f 30 32 27 f 64 59 61 f 66 64 61 f 67 65 70 f 67 70 72 f 70 108 75 f 72 70 75 f 72 75 77 f 102 103 100 f 99 103 101 f 77 75 80 f 77 80 82 f 40 238 44 f 268 301 303 f 305 308 23 f 24 18 22 f 20 24 22 f 18 24 25 f 95 93 91 f 83 79 87 f 64 66 88 f 88 66 89 f 85 86 87 f 78 83 92 f 92 83 94 f 92 94 96 f 96 94 98 f 96 98 100 f 100 98 102 f 99 105 103 f 102 104 103 f 103 105 100 f 103 104 101 f 70 297 108 f 78 218 108 f 87 109 83 f 109 80 93 f 94 83 109 f 106 94 109 f 109 93 106 f 98 94 106 f 106 93 97 f 106 97 107 f 215 236 219 f 95 214 99 f 105 215 100 f 101 97 99 f 91 80 75 f 91 216 95 f 97 93 95 f 50 132 16 f 97 95 99 f 91 93 80 f 16 24 20 f 16 20 114 f 114 20 115 f 121 124 120 f 53 16 114 f 53 114 116 f 116 114 119 f 119 114 117 f 118 117 114 f 118 114 115 f 117 118 120 f 120 118 121 f 50 53 123 f 52 51 123 f 117 120 119 f 120 122 119 f 120 124 122 f 131 127 135 f 132 51 133 f 129 128 130 f 131 128 127 f 84 39 36 f 36 244 84 f 50 51 132 f 84 279 126 f 130 128 131 f 131 135 134 f 59 64 63 f 64 68 63 f 65 60 63 f 65 63 68 f 50 123 51 f 24 206 25 f 162 276 111 f 125 275 48 f 136 278 137 f 138 279 136 f 210 186 224 f 226 187 225 f 132 133 142 f 142 133 143 f 134 135 144 f 144 135 145 f 148 142 152 f 152 142 150 f 145 149 151 f 151 149 153 f 111 110 155 f 155 110 154 f 155 158 111 f 113 112 157 f 157 112 156 f 173 175 172 f 172 175 174 f 160 156 112 f 162 111 158 f 160 112 162 f 160 162 158 f 224 186 223 f 154 159 164 f 164 159 169 f 156 160 166 f 166 160 170 f 157 156 167 f 167 156 166 f 159 158 169 f 169 158 168 f 160 161 170 f 170 161 171 f 158 159 172 f 172 159 173 f 160 158 174 f 174 158 172 f 159 242 241 f 173 241 175 f 161 160 175 f 175 160 174 f 188 194 190 f 152 150 176 f 153 213 205 f 176 300 205 f 196 199 197 f 197 199 198 f 190 194 195 f 184 181 182 f 184 182 150 f 188 182 194 f 189 179 191 f 179 180 191 f 191 180 192 f 180 181 192 f 192 181 193 f 182 183 194 f 194 183 195 f 180 183 196 f 196 183 199 f 181 180 197 f 197 180 196 f 182 181 198 f 198 181 197 f 183 182 199 f 199 182 198 f 150 142 201 f 201 145 151 f 201 151 184 f 184 150 201 f 25 204 23 f 202 134 144 f 143 133 202 f 203 143 202 f 202 144 203 f 203 144 145 f 142 143 203 f 201 142 203 f 201 203 145 f 153 205 177 f 176 205 152 f 207 16 132 f 135 127 207 f 207 132 208 f 135 207 208 f 206 24 16 f 127 128 206 f 207 127 206 f 206 16 207 f 23 209 15 f 133 51 209 f 51 15 209 f 181 184 151 f 189 193 181 f 177 179 151 f 153 177 151 f 150 178 176 f 181 151 189 f 151 179 189 f 182 188 150 f 150 188 178 f 188 190 178 f 179 177 180 f 178 183 176 f 177 300 299 f 180 299 183 f 178 190 183 f 190 195 183 f 88 89 210 f 210 89 186 f 131 134 202 f 202 200 131 f 209 200 202 f 202 133 209 f 131 200 204 f 131 204 130 f 204 200 23 f 200 209 23 f 205 213 152 f 212 148 152 f 149 212 153 f 212 152 213 f 153 212 213 f 147 149 145 f 145 135 147 f 146 132 142 f 146 142 148 f 212 211 148 f 211 146 148 f 149 147 211 f 211 212 149 f 211 147 135 f 208 211 135 f 132 146 211 f 132 211 208 f 206 128 129 f 206 129 25 f 129 130 204 f 129 204 25 f 99 214 105 f 106 107 98 f 100 215 96 f 108 217 75 f 91 75 217 f 216 91 217 f 214 95 216 f 78 92 219 f 218 78 219 f 217 108 218 f 219 92 96 f 219 96 215 f 107 97 101 f 104 107 101 f 98 107 102 f 102 107 104 f 210 220 88 f 210 224 220 f 187 222 64 f 187 230 222 f 187 64 88 f 187 88 220 f 220 225 187 f 224 225 220 f 140 282 138 f 227 221 230 f 229 227 230 f 229 230 187 f 226 229 187 f 126 41 37 f 39 84 126 f 39 126 37 f 171 161 167 f 167 161 157 f 155 165 158 f 158 165 168 f 154 164 155 f 155 164 165 f 230 315 222 f 185 314 234 f 221 227 234 f 227 235 234 f 235 228 234 f 234 228 185 f 214 216 236 f 105 214 236 f 215 105 236 f 216 217 236 f 219 236 218 f 236 217 218 f 193 189 191 f 191 192 193 f 40 244 237 f 238 274 44 f 154 240 159 f 159 241 173 f 175 241 161 f 241 242 161 f 159 240 242 f 161 242 240 f 161 240 157 f 110 163 240 f 240 154 110 f 240 163 113 f 240 113 157 f 168 165 164 f 169 168 164 f 167 166 170 f 167 170 171 f 237 252 40 f 84 244 40 f 301 302 303 f 248 256 253 f 42 247 245 f 36 246 244 f 247 250 243 f 36 249 246 f 250 256 254 f 238 251 42 f 251 257 253 f 247 243 245 f 249 258 254 f 249 248 246 f 31 28 33 f 237 257 252 f 40 252 238 f 248 253 237 f 250 254 243 f 251 253 250 f 249 254 248 f 253 256 250 f 254 256 248 f 253 257 237 f 254 258 243 f 252 257 251 f 36 31 255 f 31 33 255 f 255 33 245 f 246 248 237 f 246 237 244 f 250 247 251 f 251 247 42 f 249 36 258 f 258 36 255 f 243 258 245 f 258 255 245 f 238 262 261 f 261 262 259 f 239 265 263 f 264 304 261 f 263 264 239 f 262 273 270 f 259 262 266 f 238 42 262 f 239 264 267 f 269 268 238 f 269 304 268 f 238 261 269 f 262 270 266 f 260 273 271 f 264 272 267 f 264 261 272 f 261 259 272 f 270 273 260 f 271 273 262 f 44 274 46 f 69 317 71 f 232 318 233 f 90 314 233 f 275 284 48 f 45 275 125 f 45 125 55 f 55 125 58 f 125 48 44 f 125 44 58 f 140 283 141 f 110 285 163 f 48 278 84 f 44 48 84 f 44 84 40 f 139 287 141 f 41 286 45 f 41 45 43 f 45 47 43 f 283 163 285 f 141 283 285 f 281 113 163 f 163 283 281 f 283 140 138 f 281 283 138 f 112 113 281 f 112 281 277 f 136 277 281 f 281 138 136 f 280 111 276 f 139 141 285 f 280 139 285 f 285 110 111 f 285 111 280 f 286 141 287 f 45 286 287 f 278 48 284 f 284 137 278 f 287 139 137 f 287 137 284 f 141 286 282 f 141 282 140 f 282 126 279 f 282 279 138 f 287 284 45 f 45 284 275 f 280 276 139 f 137 139 276 f 162 112 276 f 277 276 112 f 137 276 277 f 136 137 277 f 126 282 286 f 126 286 41 f 278 136 279 f 84 278 279 f 222 288 64 f 71 290 69 f 74 292 290 f 289 293 73 f 73 293 291 f 293 294 291 f 291 294 292 f 289 313 293 f 294 293 295 f 295 69 290 f 294 295 290 f 292 294 290 f 71 320 290 f 295 288 69 f 291 296 73 f 108 297 296 f 296 297 73 f 291 322 296 f 78 108 296 f 70 65 297 f 289 73 297 f 297 65 68 f 68 298 297 f 64 298 68 f 297 298 289 f 177 299 180 f 183 299 176 f 205 300 177 f 299 300 176 f 238 268 303 f 263 301 268 f 302 238 303 f 238 302 274 f 274 302 301 f 274 301 46 f 301 263 46 f 263 265 46 f 261 304 269 f 268 304 263 f 263 304 264 f 262 42 271 f 23 309 305 f 308 305 310 f 307 308 310 f 307 310 19 f 309 311 305 f 305 311 310 f 306 311 309 f 312 311 306 f 19 310 311 f 19 311 312 f 298 313 289 f 23 15 309 f 15 49 309 f 306 309 49 f 17 23 308 f 21 17 308 f 21 308 307 f 221 234 314 f 230 221 315 f 314 90 315 f 315 221 314 f 231 233 314 f 185 316 314 f 314 316 231 f 293 313 295 f 288 295 313 f 222 319 288 f 90 317 319 f 319 317 69 f 319 69 288 f 315 90 319 f 315 319 222 f 74 290 320 f 76 74 320 f 78 321 83 f 321 292 74 f 79 83 321 f 79 321 74 f 85 87 79 f 85 79 81 f 109 87 86 f 80 109 86 f 82 80 86 f 292 322 291 f 296 322 78 f 321 78 322 f 292 321 322 f 298 64 288 f 313 298 288 f 90 233 318 f 317 90 318 f 71 317 318 f 501 512 513 f 325 330 21 f 330 28 21 f 329 332 325 f 332 330 325 f 330 333 28 f 335 338 333 f 338 336 333 f 345 323 52 f 323 49 52 f 324 344 53 f 348 346 341 f 341 346 46 f 346 56 46 f 38 340 337 f 38 43 340 f 29 334 331 f 29 34 334 f 334 338 335 f 334 337 338 f 34 337 334 f 34 38 337 f 47 347 342 f 47 57 347 f 348 351 346 f 351 349 346 f 346 349 56 f 347 351 348 f 347 350 351 f 57 350 347 f 57 62 350 f 62 353 350 f 62 67 353 f 61 56 349 f 358 361 76 f 361 81 76 f 329 325 327 f 331 22 29 f 331 326 22 f 329 331 332 f 329 326 331 f 330 335 333 f 330 332 335 f 332 334 335 f 332 331 334 f 352 61 349 f 66 61 352 f 67 356 353 f 67 72 356 f 356 359 385 f 72 359 356 f 72 77 359 f 379 377 380 f 376 378 380 f 77 362 359 f 77 82 362 f 339 341 501 f 524 556 554 f 558 327 559 f 328 22 326 f 20 22 328 f 326 329 328 f 372 368 370 f 363 365 361 f 352 366 66 f 366 89 66 f 85 365 86 f 360 369 363 f 369 371 363 f 369 373 371 f 373 375 371 f 373 377 375 f 377 379 375 f 376 380 382 f 379 380 381 f 380 377 382 f 380 378 381 f 356 385 550 f 360 385 485 f 365 363 386 f 386 370 362 f 371 386 363 f 383 386 371 f 386 383 370 f 375 383 371 f 383 374 370 f 383 384 374 f 482 486 499 f 372 376 481 f 382 377 482 f 378 376 374 f 368 359 362 f 368 372 483 f 374 372 370 f 344 324 401 f 374 376 372 f 368 362 370 f 324 20 328 f 324 391 20 f 391 115 20 f 121 393 124 f 53 391 324 f 53 116 391 f 116 119 391 f 119 392 391 f 118 391 392 f 118 115 391 f 392 393 118 f 393 121 118 f 344 123 53 f 52 123 345 f 392 119 393 f 393 119 122 f 393 122 124 f 400 404 396 f 401 402 345 f 398 399 397 f 400 396 397 f 364 336 338 f 336 364 506 f 344 401 345 f 364 395 532 f 399 400 397 f 400 403 404 f 349 351 352 f 352 351 354 f 353 351 350 f 353 354 351 f 344 345 123 f 328 329 473 f 431 388 529 f 394 343 528 f 405 406 531 f 407 405 532 f 477 490 186 f 492 491 454 f 401 411 402 f 411 412 402 f 403 413 404 f 413 414 404 f 417 421 411 f 421 419 411 f 414 420 418 f 420 422 418 f 388 424 387 f 424 423 387 f 424 388 427 f 390 426 389 f 426 425 389 f 442 441 444 f 441 443 444 f 429 389 425 f 431 427 388 f 429 431 389 f 429 427 431 f 490 223 186 f 423 433 428 f 433 438 428 f 425 435 429 f 435 439 429 f 426 436 425 f 436 435 425 f 428 438 427 f 438 437 427 f 429 439 430 f 439 440 430 f 427 441 428 f 441 442 428 f 429 443 427 f 443 441 427 f 428 503 504 f 442 444 503 f 430 444 429 f 444 443 429 f 455 457 461 f 421 445 419 f 422 472 480 f 445 472 553 f 463 464 466 f 464 465 466 f 457 462 461 f 453 451 450 f 453 419 451 f 455 461 451 f 456 458 448 f 448 458 449 f 458 459 449 f 449 459 450 f 459 460 450 f 451 461 452 f 461 462 452 f 449 463 452 f 463 466 452 f 450 464 449 f 464 463 449 f 451 465 450 f 465 464 450 f 452 466 451 f 466 465 451 f 419 468 411 f 468 420 414 f 468 453 420 f 453 468 419 f 329 327 471 f 469 413 403 f 412 469 402 f 470 469 412 f 469 470 413 f 470 414 413 f 411 470 412 f 468 470 411 f 468 414 470 f 422 446 472 f 445 421 472 f 474 401 324 f 404 474 396 f 474 475 401 f 404 475 474 f 473 324 328 f 396 473 397 f 474 473 396 f 473 474 324 f 327 323 476 f 402 476 345 f 345 476 323 f 450 420 453 f 456 450 460 f 446 420 448 f 422 420 446 f 419 445 447 f 450 456 420 f 420 456 448 f 451 419 455 f 419 447 455 f 455 447 457 f 448 449 446 f 447 445 452 f 446 552 553 f 449 452 552 f 447 452 457 f 457 452 462 f 366 477 89 f 477 186 89 f 400 469 403 f 469 400 467 f 476 469 467 f 469 476 402 f 400 471 467 f 400 399 471 f 471 327 467 f 467 327 476 f 472 421 480 f 479 421 417 f 418 422 479 f 479 480 421 f 422 480 479 f 416 414 418 f 414 416 404 f 415 411 401 f 415 417 411 f 479 417 478 f 478 417 415 f 418 478 416 f 478 418 479 f 478 404 416 f 475 404 478 f 401 478 415 f 401 475 478 f 473 398 397 f 473 329 398 f 398 471 399 f 398 329 471 f 376 382 481 f 383 375 384 f 377 373 482 f 385 359 484 f 368 484 359 f 483 484 368 f 481 483 372 f 360 486 369 f 485 486 360 f 484 485 385 f 486 373 369 f 486 482 373 f 384 378 374 f 381 378 384 f 375 379 384 f 379 381 384 f 477 366 487 f 477 487 490 f 454 352 489 f 454 489 495 f 454 366 352 f 454 487 366 f 487 454 491 f 490 487 491 f 409 407 535 f 493 495 488 f 494 495 493 f 494 454 495 f 492 454 494 f 395 337 340 f 338 395 364 f 338 337 395 f 440 436 430 f 436 426 430 f 424 427 434 f 427 437 434 f 423 424 433 f 424 434 433 f 495 489 565 f 185 497 564 f 488 497 493 f 493 497 498 f 498 497 228 f 497 185 228 f 481 499 483 f 382 499 481 f 482 499 382 f 483 499 484 f 486 485 499 f 499 485 484 f 460 458 456 f 458 460 459 f 339 500 506 f 501 341 527 f 423 428 502 f 428 442 503 f 444 430 503 f 503 430 504 f 428 504 502 f 430 502 504 f 430 426 502 f 387 502 432 f 502 387 423 f 502 390 432 f 502 426 390 f 437 433 434 f 438 433 437 f 436 439 435 f 436 440 439 f 500 339 513 f 364 339 506 f 554 556 555 f 509 514 517 f 42 245 508 f 336 506 507 f 508 505 511 f 336 507 510 f 511 515 517 f 501 42 512 f 512 514 518 f 508 245 505 f 510 515 519 f 510 507 509 f 333 33 28 f 500 513 518 f 339 501 513 f 509 500 514 f 511 505 515 f 512 511 514 f 510 509 515 f 514 511 517 f 515 509 517 f 514 500 518 f 515 505 519 f 513 512 518 f 336 516 333 f 333 516 33 f 516 245 33 f 507 500 509 f 507 506 500 f 511 512 508 f 512 42 508 f 510 519 336 f 519 516 336 f 505 245 519 f 519 245 516 f 501 520 521 f 520 259 521 f 239 522 265 f 523 520 557 f 522 239 523 f 521 270 526 f 259 266 521 f 501 521 42 f 239 267 523 f 525 501 524 f 525 524 557 f 501 525 520 f 521 266 270 f 260 271 526 f 523 267 272 f 523 272 520 f 520 272 259 f 270 260 526 f 271 521 526 f 341 46 527 f 355 71 566 f 232 496 318 f 367 496 564 f 528 343 537 f 342 394 528 f 342 347 394 f 347 348 394 f 394 341 343 f 394 348 341 f 409 410 536 f 387 432 538 f 343 364 531 f 341 364 343 f 341 339 364 f 408 410 540 f 340 342 539 f 340 43 342 f 342 43 47 f 536 538 432 f 410 538 536 f 534 432 390 f 432 534 536 f 536 407 409 f 534 407 536 f 389 534 390 f 389 530 534 f 405 534 530 f 534 405 407 f 533 529 388 f 408 538 410 f 533 538 408 f 538 388 387 f 538 533 388 f 539 540 410 f 342 540 539 f 531 537 343 f 537 531 406 f 540 406 408 f 540 537 406 f 410 535 539 f 410 409 535 f 535 532 395 f 535 407 532 f 540 342 537 f 342 528 537 f 533 408 529 f 406 529 408 f 431 529 389 f 530 389 529 f 406 530 529 f 405 530 406 f 395 539 535 f 395 340 539 f 531 532 405 f 364 532 531 f 489 352 541 f 71 355 543 f 358 543 545 f 542 357 546 f 357 544 546 f 546 544 547 f 544 545 547 f 542 546 563 f 547 548 546 f 548 543 355 f 547 543 548 f 545 543 547 f 71 543 320 f 548 355 541 f 544 357 549 f 385 549 550 f 549 357 550 f 544 549 569 f 360 549 385 f 356 550 353 f 542 550 357 f 550 354 353 f 354 550 551 f 352 354 551 f 550 542 551 f 446 449 552 f 452 445 552 f 472 446 553 f 552 445 553 f 501 556 524 f 522 524 554 f 555 556 501 f 501 527 555 f 527 554 555 f 527 46 554 f 554 46 522 f 522 46 265 f 520 525 557 f 524 522 557 f 522 523 557 f 521 271 42 f 327 558 560 f 559 561 558 f 307 561 559 f 307 19 561 f 560 558 562 f 558 561 562 f 306 560 562 f 312 306 562 f 19 562 561 f 19 312 562 f 551 542 563 f 327 560 323 f 323 560 49 f 306 49 560 f 325 559 327 f 21 559 325 f 21 307 559 f 488 564 497 f 495 565 488 f 564 565 367 f 565 564 488 f 231 564 496 f 185 564 316 f 564 231 316 f 546 548 563 f 541 563 548 f 489 541 567 f 367 567 566 f 567 355 566 f 567 541 355 f 565 567 367 f 565 489 567 f 358 320 543 f 76 320 358 f 360 363 568 f 568 358 545 f 361 568 363 f 361 358 568 f 85 361 365 f 85 81 361 f 386 86 365 f 362 86 386 f 82 86 362 f 545 544 569 f 549 360 569 f 568 569 360 f 545 569 568 f 551 541 352 f 563 541 551 f 367 318 496 f 566 318 367 f 71 318 566 s 1 g Nose usemtl Black v 0 5.10213 0.74102 v 0 5.0089 0.68284 v 0 5.11867 0.66328 v -0.05992 5.08404 0.69519 v 0.05992 5.08404 0.69519 f 570 573 571 f 572 573 570 f 570 571 574 f 572 570 574 s 1 g Mouth usemtl Mouth v 0 4.86426 0.13404 v -0.11767 4.86427 0.13405 v 0 4.93919 0.37064 v -0.10276 4.93386 0.37207 v -0.08606 4.78539 0.24138 v 0 4.79292 0.50742 v -0.0708 4.79418 0.50739 v -0.10013 4.81225 0.46396 v -0.1387 4.84267 0.41298 v -0.10701 4.84013 0.54357 v 0 4.84749 0.58146 v -0.12973 4.84083 0.47942 v -0.05615 4.84063 0.57623 v 0 4.91246 0.5359 v -0.05904 4.91246 0.5359 v 0 4.75765 0.45379 v -0.07085 4.76837 0.4414 v 0.11767 4.86427 0.13405 v 0.10276 4.93386 0.37207 v 0.08606 4.78539 0.24138 v 0.0708 4.79418 0.50739 v 0.10013 4.81225 0.46396 v 0.1387 4.84267 0.41298 v 0.10701 4.84013 0.54357 v 0.12973 4.84083 0.47942 v 0.05615 4.84063 0.57623 v 0.05904 4.91246 0.5359 v 0.07085 4.76837 0.4414 f 583 579 576 f 581 591 582 f 578 583 576 f 580 590 581 f 586 589 584 f 584 589 587 f 589 577 588 f 587 589 585 f 589 588 585 f 589 578 577 f 578 576 577 f 576 575 577 f 590 591 581 f 583 582 591 f 583 591 579 f 589 586 578 f 578 586 583 f 597 592 594 f 595 596 602 f 593 592 597 f 580 595 590 f 599 598 601 f 598 600 601 f 601 588 577 f 600 585 601 f 601 585 588 f 601 577 593 f 593 577 592 f 592 577 575 f 590 595 602 f 597 602 596 f 597 594 602 f 601 593 599 f 593 597 599 s 1 g Tongue usemtl Tongue v 0 4.86426 0.13404 v -0.11767 4.86427 0.13405 v -0.08606 4.78539 0.24138 v 0 4.75765 0.45379 v -0.07085 4.76837 0.4414 v 0 4.87466 0.31524 v -0.07197 4.82618 0.42827 v 0 4.83446 0.4345 v -0.09284 4.86075 0.31246 v 0.11767 4.86427 0.13405 v 0.08606 4.78539 0.24138 v 0.07085 4.76837 0.4414 v 0.07197 4.82618 0.42827 v 0.09284 4.86075 0.31246 f 606 609 607 f 605 609 611 f 607 609 605 f 606 610 609 f 609 610 608 f 609 608 611 f 605 611 604 f 604 611 603 f 611 608 603 f 606 614 615 f 613 616 615 f 614 613 615 f 606 615 610 f 615 608 610 f 615 616 608 f 613 612 616 f 612 603 616 f 616 603 608 s 1 g Pupil1 usemtl Black v -0.36269 5.27432 0.12421 v -0.33912 5.38384 0.16707 v -0.31937 5.2698 0.2013 v -0.31527 5.34757 0.20271 v -0.36226 5.34931 0.13058 v -0.34471 5.24428 0.15788 f 619 620 622 f 618 621 620 f 617 622 621 f 620 621 622 s 1 g Iris1 usemtl Iris v -0.32577 5.4508 0.17515 v -0.29609 5.21151 0.24259 v -0.36778 5.22182 0.08025 v -0.27834 5.38142 0.24063 v -0.37659 5.38053 0.08702 v -0.32734 5.1668 0.16041 v -0.36269 5.27432 0.12421 v -0.33912 5.38384 0.16707 v -0.31937 5.2698 0.2013 v -0.31527 5.34757 0.20271 v -0.36226 5.34931 0.13058 v -0.34471 5.24428 0.15788 f 628 629 625 f 626 631 624 f 627 630 623 f 631 634 628 f 625 629 627 f 624 631 628 f 623 630 626 f 630 632 626 f 629 633 627 f 628 634 629 f 626 632 631 f 627 633 630 s 1 g Iris2 usemtl Iris v 0.32577 5.4508 0.17515 v 0.29609 5.21151 0.24259 v 0.36778 5.22182 0.08025 v 0.27834 5.38142 0.24063 v 0.37659 5.38053 0.08702 v 0.32734 5.1668 0.16041 v 0.36269 5.27432 0.12421 v 0.33912 5.38384 0.16707 v 0.31937 5.2698 0.2013 v 0.31527 5.34757 0.20271 v 0.36226 5.34931 0.13058 v 0.34471 5.24428 0.15788 f 640 637 641 f 638 636 643 f 639 635 642 f 643 640 646 f 637 639 641 f 636 640 643 f 635 638 642 f 642 638 644 f 641 639 645 f 640 641 646 f 638 643 644 f 639 642 645 s 1 g Pupil2 usemtl Black v 0.36269 5.27432 0.12421 v 0.33912 5.38384 0.16707 v 0.31937 5.2698 0.2013 v 0.31527 5.34757 0.20271 v 0.36226 5.34931 0.13058 v 0.34471 5.24428 0.15788 f 649 652 650 f 648 650 651 f 647 651 652 f 650 652 651 s 1 g Eye2 usemtl Eye v 0.27478 5.09026 0.25027 v 0.39502 5.09998 0.0388 v 0.21614 5.43267 0.29751 v 0.4059 5.46848 -0.03123 v 0.17919 5.32731 0.10726 v 0.32577 5.4508 0.17515 v 0.20436 5.24156 0.31399 v 0.44214 5.27901 -0.06779 v 0.32845 5.53506 0.14162 v 0.29609 5.21151 0.24259 v 0.36778 5.22182 0.08025 v 0.27834 5.38142 0.24063 v 0.37659 5.38053 0.08702 v 0.32734 5.1668 0.16041 f 655 657 659 f 655 658 661 f 657 653 659 f 654 660 663 f 658 656 661 f 655 661 657 f 656 657 661 f 656 660 657 f 657 654 653 f 660 654 657 f 659 653 662 f 663 660 665 f 659 662 664 f 654 663 666 f 665 656 658 f 656 665 660 f 655 664 658 f 664 655 659 f 653 666 662 f 653 654 666 s 1 g Eyelash1 usemtl Black v -0.20351 5.24122 0.31391 v -0.20922 5.44174 0.31683 v -0.44182 5.27861 -0.06796 v -0.33471 5.55665 0.15827 v -0.28339 5.09751 0.25048 v -0.21535 5.43305 0.29573 v -0.40431 5.46564 -0.02984 v -0.33058 5.52987 0.14142 v -0.50323 5.29278 -0.09673 v -0.20448 5.24262 0.33462 v -0.25037 5.1443 0.31145 v -0.36297 5.55341 0.12438 v -0.43119 5.48508 -0.04769 v -0.46327 5.27202 -0.08595 v -0.43466 5.31431 -0.06068 v -0.45559 5.35618 -0.07938 v -0.4844 5.31359 -0.08289 v -0.51148 5.33926 -0.09954 f 667 676 668 f 668 672 667 f 670 674 672 f 679 682 673 f 677 676 667 f 677 667 671 f 670 672 668 f 678 674 670 f 669 681 680 f 681 683 680 f 680 683 675 f 673 682 681 f 684 683 682 f 682 683 681 f 678 679 673 f 678 673 674 s 1 g Eyelash1_1 usemtl Black v 0.20351 5.24122 0.31391 v 0.20922 5.44174 0.31683 v 0.44182 5.27861 -0.06796 v 0.33471 5.55665 0.15827 v 0.28339 5.09751 0.25048 v 0.21535 5.43305 0.29573 v 0.40431 5.46564 -0.02984 v 0.33058 5.52987 0.14142 v 0.50323 5.29278 -0.09673 v 0.20448 5.24262 0.33462 v 0.25037 5.1443 0.31145 v 0.36297 5.55341 0.12438 v 0.43119 5.48508 -0.04769 v 0.46327 5.27202 -0.08595 v 0.43466 5.31431 -0.06068 v 0.45559 5.35618 -0.07938 v 0.4844 5.31359 -0.08289 v 0.51148 5.33926 -0.09954 f 685 686 694 f 686 685 690 f 688 690 692 f 697 691 700 f 695 685 694 f 695 689 685 f 688 686 690 f 696 688 692 f 687 698 699 f 699 698 701 f 698 693 701 f 691 699 700 f 702 700 701 f 700 699 701 f 696 691 697 f 696 692 691 ]]> ; MODEL_TEXT[MODEL_TEXT.length] = <![CDATA[ newmtl Black Kd 0 0 0 Ks 1 1 1 Ka 0 0 0 illum 2 Ns 129 newmtl Tongue Kd 1 0.4 0.4 Ks 0.2 0.2 0.2 Ka 0 0 0 illum 2 Ns 26 newmtl Eye Kd 1 1 1 Ks 0.5 0.5 0.5 Ka 0 0 0 illum 2 Ns 129 newmtl Mouth Kd 0.6 0 0 Ks 0.2 0.2 0.2 Ka 0 0 0 illum 2 Ns 26 newmtl Fur Kd 0.93333 0.8 0.53333 Ks 0 0 0 Ka 0 0 0 illum 1 newmtl Iris Kd 0.73725 0.40784 0.10588 Ks 0.5 0.5 0.5 Ka 0 0 0 illum 2 Ns 129 ]]> ; perspectiveAngle = (Math.PI * 0.125); perspectiveDistance = 7.5; orthographicScale = 20; bgColor = 4288269567; modelName = "Amber"; copyText = "Modelled and programmed by Doom the wolf\nhttp://doom-the-wolf.deviantart.com"; resolutions = [0.0625, 0.125, 0.25, 0.5, 0.666, 1]; curResolution = (resolutions.length - 1); resolution = resolutions[curResolution]; tF.font = "Arial"; tF.align = TextFormatAlign.RIGHT; tF.size = 12; txt.multiline = true; txt.wordWrap = false; txt.cacheAsBitmap = true; txt.selectable = false; txt.defaultTextFormat = tF; bmp = null; stage3d = new Stage3D(); camera = new Camera3D(); model = new Model3D(); light = new Light3D(); light2 = new Light3D(); light3 = new Light3D(); initCenter = [0, 3, 0]; center = initCenter.concat(); hAngle = (-(Math.PI) * 0.5); vAngle = 0; dist = perspectiveDistance; scale = 20; position = [0, 0, 0]; initHeight = stage.stageHeight; txt.text = (((((((modelName + "\nClick and drag to rotate.\nHold Ctrl and drag to Zoom.\nHold Shift and drag to scroll.\nPress TAB to change the resolution.\nPress Enter to hide the text\nPress SPACE to reset camera.\n") + "Resolution: ") + Math.floor((stage.stageWidth * resolution)).toString()) + "x") + Math.floor((stage.stageHeight * resolution)).toString()) + "\n") + copyText); Model3DEditor.readOBJ(MODEL_TEXT[0], model); defMat = new Material3D("default"); defMat.illuminationModel = 3; defMat.Kd = [0.5, 0.5, 0.5]; defMat.Ks = [0, 0, 1]; defMat.Ka = [0.2, 0.2, 0]; defMat.Ni = 1.3; defMat.Ns = 20; defMat.sharpness = 300; if (MODEL_TEXT[1]){ Model3DEditor.readMTL(MODEL_TEXT[1], model); } else { model.setMaterial(defMat); }; stage3d.addModel(model); stage3d.bgColor = bgColor; stage3d.ambient = [0.2, 0.2, 0.2]; light.color = [0.6, 0.6, 0.6]; light.normal = [-0.8, 1, 0.8]; light2.color = [0.5, 0.5, 0.5]; light2.normal = [1, -0.5, -1]; light3.color = [0.2, 0.2, 0.2]; light3.normal = [0, 0, 1]; stage3d.addLight(light); stage3d.addLight(light2); stage3d.addLight(light3); camera.screen = new Rectangle(0, 0, Math.floor((stage.stageWidth * resolution)), Math.floor((stage.stageHeight * resolution))); bmp = new Bitmap(camera.canvas); stage.addChild(bmp); camera.setPerspective(perspectiveAngle); stage.addChild(txt); resize(null); stage.addEventListener(Event.RESIZE, resize); EDIT_MODE = 0; OLD_MX = stage.mouseX; OLD_MY = stage.mouseY; stage.addEventListener(MouseEvent.MOUSE_DOWN, mDown); stage.addEventListener(KeyboardEvent.KEY_DOWN, kDown); VAR_NAME = ""; } public function resetView(_arg1:Event=null){ hAngle = (-(Math.PI) * 0.5); vAngle = 0; dist = perspectiveDistance; scale = orthographicScale; center[0] = initCenter[0]; center[1] = initCenter[1]; center[2] = initCenter[2]; if (camera.isPerspective){ camera.setPerspective(perspectiveAngle); } else { camera.setOrthographic(scale); }; getPosition(hAngle, vAngle, dist, center, position); camera.lookAt(position, center, [0, 1, 0]); stage3d.draw(camera); } public function getPosition(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Array, _arg5:Array){ var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; _local6 = Math.cos(_arg1); _local7 = Math.sin(_arg1); _local8 = Math.cos(_arg2); _local9 = Math.sin(_arg2); _arg5[0] = (_arg4[0] + ((_local6 * _local8) * _arg3)); _arg5[1] = (_arg4[1] + (_local9 * _arg3)); _arg5[2] = (_arg4[2] - ((_local7 * _local8) * _arg3)); } public function fileLoaded(_arg1:Event){ var _local2:URLLoader; var _local3:String; var _local4:String; var _local5:String; var _local6:TextField; _local2 = (_arg1.currentTarget as URLLoader); _local2.removeEventListener("complete", fileLoaded); _local2.removeEventListener("ioError", fileFailed); _local2.removeEventListener("securityError", fileFailed); _local3 = (((VAR_NAME + "[") + VAR_NAME) + ".length]=<![CDATA["); _local4 = "]]>;"; _local5 = _local2.data.toString(); _local5 = _local5.replace(/\r/g, ""); _local6 = new TextField(); _local6.width = stage.stageWidth; _local6.height = stage.stageHeight; _local6.x = (_local6.y = 0); _local6.text = ((_local3 + _local5) + _local4); stage.addChild(_local6); stage.focus = _local6; _local6.setSelection(0, _local6.length); } public function mDown(_arg1:MouseEvent){ OLD_MX = stage.mouseX; OLD_MY = stage.mouseY; OLD_DIST = dist; if (_arg1.shiftKey){ OLD_X = center[0]; OLD_Y = center[1]; OLD_Z = center[2]; EDIT_MODE = 2; } else { if (_arg1.ctrlKey){ OLD_X = dist; OLD_Y = scale; EDIT_MODE = 1; } else { OLD_X = hAngle; OLD_Y = vAngle; EDIT_MODE = 0; }; }; stage.addEventListener(MouseEvent.MOUSE_MOVE, mMove); stage.addEventListener(MouseEvent.MOUSE_UP, mUp); } public function resize(_arg1:Event){ var _local2:Number; var _local3:Number; stage.removeChild(bmp); bmp.bitmapData = null; bmp = null; camera.screen = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight); camera.screen = new Rectangle(0, 0, Math.floor((stage.stageWidth * resolution)), Math.floor((stage.stageHeight * resolution))); getPosition(hAngle, vAngle, dist, center, position); camera.lookAt(position, center, [0, 1, 0]); bmp = new Bitmap(camera.canvas); stage.addChildAt(bmp, 0); bmp.width = stage.stageWidth; bmp.height = stage.stageHeight; if (camera.isPerspective){ camera.setPerspective(((perspectiveAngle * initHeight) / stage.stageHeight)); }; stage3d.draw(camera); txt.cacheAsBitmap = false; txt.wordWrap = false; _local2 = (txt.textWidth + 10); _local3 = (txt.textHeight + 10); txt.width = _local2; txt.height = _local3; if (_local2 > stage.stageWidth){ _local2 = stage.stageWidth; txt.wordWrap = true; txt.width = stage.stageWidth; _local3 = (txt.height = (txt.textHeight + 10)); }; txt.x = (stage.stageWidth - txt.width); txt.y = (stage.stageHeight - txt.height); if (txt.x < 0){ txt.x = 0; }; if (txt.y < 0){ txt.y = 0; }; txt.cacheAsBitmap = true; txt.text = (((((((modelName + "\nClick and drag to rotate.\nHold Ctrl and drag to Zoom.\nHold Shift and drag to scroll.\nPress TAB to change the resolution.\nPress Enter to hide the text\nPress SPACE to reset camera.\n") + "Resolution: ") + Math.floor((stage.stageWidth * resolution)).toString()) + "x") + Math.floor((stage.stageHeight * resolution)).toString()) + "\n") + copyText); } public function fileFailed(_arg1:Event){ var _local2:URLLoader; _local2 = (_arg1.currentTarget as URLLoader); _local2.removeEventListener("complete", fileLoaded); _local2.removeEventListener("ioError", fileFailed); _local2.removeEventListener("securityError", fileFailed); trace("FILE FAILED!"); } public function makeEmbeddable(_arg1:String, _arg2:String){ var _local3:URLLoader; VAR_NAME = _arg2; _local3 = new URLLoader(new URLRequest(_arg1)); _local3.addEventListener("complete", fileLoaded); _local3.addEventListener("ioError", fileFailed); _local3.addEventListener("securityError", fileFailed); } public function kDown(_arg1:KeyboardEvent){ switch (_arg1.keyCode){ case Keyboard.SPACE: resetView(); break; case Keyboard.ENTER: txt.visible = !(txt.visible); break; case Keyboard.TAB: curResolution++; if (curResolution >= resolutions.length){ curResolution = 0; }; resolution = resolutions[curResolution]; resize(null); break; }; } public function mMove(_arg1:MouseEvent){ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:Number; var _local13:Number; var _local14:Number; _local2 = (stage.mouseX - OLD_MX); _local3 = (stage.mouseY - OLD_MY); if (camera.isPerspective){ _local13 = ((0.01 * OLD_DIST) / perspectiveDistance); } else { _local13 = (1 / orthographicScale); }; switch (EDIT_MODE){ case 2: _local11 = Math.cos(vAngle); _local12 = Math.sin(vAngle); _local9 = Math.cos((hAngle - (Math.PI * 0.5))); _local10 = Math.sin((hAngle - (Math.PI * 0.5))); _local4 = _local12; _local5 = _local11; _local6 = (((_local9 * _local13) * _local2) + (((_local10 * _local4) * _local3) * _local13)); _local7 = ((_local5 * _local3) * _local13); _local8 = (((-(_local10) * _local13) * _local2) + (((_local9 * _local4) * _local3) * _local13)); center[0] = (OLD_X + _local6); center[1] = (OLD_Y + _local7); center[2] = (OLD_Z + _local8); break; case 1: if (camera.isOrthographic){ _local14 = (OLD_Y * (1 + (_local3 * 0.01))); _local14 = Math.max(_local14, 0.1); scale = _local14; camera.setOrthographic(_local14); } else { _local14 = ((-(_local3) * 0.01) * OLD_DIST); if (_local14 < 0){ _local14 = (_local14 * 0.1); }; _local14 = (OLD_X + _local14); _local14 = Math.max(_local14, 0.5); dist = _local14; }; break; case 0: hAngle = (OLD_X - ((_local2 * Math.PI) * 0.01)); vAngle = (OLD_Y + ((_local3 * Math.PI) * 0.01)); break; }; getPosition(hAngle, vAngle, dist, center, position); camera.lookAt(position, center, [0, 1, 0]); stage3d.draw(camera); } public function mUp(_arg1:MouseEvent){ stage.removeEventListener(MouseEvent.MOUSE_MOVE, mMove); stage.removeEventListener(MouseEvent.MOUSE_UP, mUp); } } }//package modelViewer_fla
Section 2
//Algebra (pixels3d.Algebra) package pixels3d { public final class Algebra { public static function lookAt(_arg1:Array, _arg2:Array, _arg3:Array):Array{ var _local4:Array; var _local5:Array; var _local6:Array; var _local7:Array; _local4 = [(_arg1[0] - _arg2[0]), (_arg1[1] - _arg2[1]), (_arg1[2] - _arg2[2])]; normalize(_local4); _local5 = crossProduct(_arg3, _local4); normalize(_local5); _local6 = crossProduct(_local4, _local5); _local5[3] = (_local6[3] = (_local4[3] = 0)); _local7 = [[_local5[0], _local6[0], _local4[0], _arg1[0]], [_local5[1], _local6[1], _local4[1], _arg1[1]], [_local5[2], _local6[2], _local4[2], _arg1[2]], [0, 0, 0, 1]]; return (inverse(_local7)); } public static function perspective(_arg1:Number, _arg2:Number, _arg3:Number, _arg4:Number):Array{ var _local5:Number; var _local6:Number; var _local7:Array; _local5 = Math.tan(((Math.PI * 0.5) - _arg1)); _local6 = (1 / (_arg3 - _arg4)); _local7 = identity(4); _local7[0][0] = (_local5 / _arg2); _local7[1][1] = _local5; _local7[2][2] = ((_arg3 + _arg4) * _local6); _local7[3][3] = 0; _local7[2][3] = (((2 * _arg3) * _arg4) * _local6); _local7[3][2] = -1; return (_local7); } public static function transformPoint(_arg1:Array, _arg2:Array):Array{ var _local3:int; var _local4:int; var _local5:Array; var _local6:Number; if (_arg1.length != 4){ throw ("ERROR! Vector is not of size 4!"); }; _local5 = new Array(4); _local5[0] = ((((_arg1[0] * _arg2[0][0]) + (_arg1[1] * _arg2[0][1])) + (_arg1[2] * _arg2[0][2])) + _arg2[0][3]); _local5[1] = ((((_arg1[0] * _arg2[1][0]) + (_arg1[1] * _arg2[1][1])) + (_arg1[2] * _arg2[1][2])) + _arg2[1][3]); _local5[2] = ((((_arg1[0] * _arg2[2][0]) + (_arg1[1] * _arg2[2][1])) + (_arg1[2] * _arg2[2][2])) + _arg2[2][3]); _local5[3] = ((((_arg1[0] * _arg2[3][0]) + (_arg1[1] * _arg2[3][1])) + (_arg1[2] * _arg2[3][2])) + _arg2[3][3]); if (_local5[3] != 1){ _local6 = (1 / _local5[3]); _local5[0] = (_local5[0] * _local6); _local5[1] = (_local5[1] * _local6); _local5[2] = (_local5[2] * _local6); _local5[3] = 1; }; return (_local5); } public static function rotateY(_arg1:Number):Array{ var _local2:Array; var _local3:Number; var _local4:Number; _local2 = identity(4); _local3 = Math.sin(_arg1); _local4 = Math.cos(_arg1); _local2[0][0] = _local4; _local2[0][2] = _local3; _local2[2][0] = -(_local3); _local2[2][2] = _local4; return (_local2); } public static function dotProduct(_arg1:Array, _arg2:Array):Number{ var _local3:int; var _local4:Number; _local4 = 0; _local3 = 0; while (_local3 < _arg1.length) { _local4 = (_local4 + (_arg1[_local3] * _arg2[_local3])); _local3++; }; return (_local4); } public static function adjoint(_arg1:Array):Array{ var _local2:int; var _local3:Array; var _local4:Array; var _local5:Number; var _local6:int; var _local7:int; _local2 = _arg1.length; _local3 = identity(_local2); _local6 = 0; while (_local6 < _local2) { _local7 = 0; while (_local7 < _local2) { _local4 = cofactors(_arg1, _local6, _local7); _local5 = determinant(_local4); if (((_local6 + _local7) % 2)){ _local3[_local6][_local7] = -(_local5); } else { _local3[_local6][_local7] = _local5; }; _local7++; }; _local6++; }; return (_local3); } public static function scale(_arg1:Number, _arg2:Number, _arg3:Number):Array{ var _local4:Array; _local4 = identity(4); _local4[0][0] = _arg1; _local4[1][1] = _arg2; _local4[2][2] = _arg3; return (_local4); } public static function vectorMatrixProduct(_arg1:Array, _arg2:Array):Array{ var _local3:Array; var _local4:int; _local3 = new Array(_arg1.length); _local4 = 0; while (_local4 < _arg1.length) { _local3[_local4] = dotProduct(_arg1, _arg2[_local4]); _local4++; }; return (_local3); } public static function rotateX(_arg1:Number):Array{ var _local2:Array; var _local3:Number; var _local4:Number; _local2 = identity(4); _local3 = Math.sin(_arg1); _local4 = Math.cos(_arg1); _local2[1][1] = _local4; _local2[1][2] = -(_local3); _local2[2][1] = _local3; _local2[2][2] = _local4; return (_local2); } public static function normalize(_arg1:Array):void{ var _local2:Number; var _local3:int; _local2 = norm(_arg1); if (!_local2){ _arg1[0] = 0; _arg1[1] = 0; _arg1[2] = 0; return; }; _local3 = 0; while (_local3 < _arg1.length) { _arg1[_local3] = (_arg1[_local3] / _local2); _local3++; }; } public static function matrixProduct(_arg1:Array, _arg2:Array):Array{ var _local3:int; var _local4:int; var _local5:int; var _local6:int; var _local7:int; var _local8:Array; var _local9:int; var _local10:Number; var _local11:Number; _local5 = _arg1[0].length; _local6 = _arg1.length; _local7 = _arg2.length; _local8 = new Array(_local7); _local4 = 0; while (_local4 < _local7) { _local8[_local4] = new Array(_local5); _local4++; }; _local3 = 0; while (_local3 < _local5) { _local4 = 0; while (_local4 < _local7) { _local11 = 0; _local9 = 0; while (_local9 < _local6) { _local11 = (_local11 + (_arg1[_local9][_local3] * _arg2[_local4][_local9])); _local9++; }; _local8[_local4][_local3] = _local11; _local4++; }; _local3++; }; return (_local8); } public static function crossProduct(_arg1:Array, _arg2:Array):Array{ var _local3:Array; _local3 = new Array(3); _local3[0] = ((_arg1[1] * _arg2[2]) - (_arg1[2] * _arg2[1])); _local3[1] = ((_arg1[2] * _arg2[0]) - (_arg1[0] * _arg2[2])); _local3[2] = ((_arg1[0] * _arg2[1]) - (_arg1[1] * _arg2[0])); return (_local3); } public static function inverse(_arg1:Array):Array{ var _local2:int; var _local3:Array; var _local4:Number; var _local5:Array; var _local6:Number; var _local7:int; var _local8:int; _local2 = _arg1.length; _local3 = identity(_local2); _local4 = determinant(_arg1); if (!_local4){ return (_local3); }; _local5 = adjoint(_arg1); _local6 = (1 / _local4); _local7 = 0; while (_local7 < _local2) { _local8 = 0; while (_local8 < _local2) { _local3[_local7][_local8] = (_local5[_local8][_local7] * _local6); _local8++; }; _local7++; }; return (_local3); } public static function plainPerspective(_arg1:Number):Array{ var _local2:Array; _local2 = identity(4); _local2[3][2] = (1 / _arg1); return (_local2); } public static function determinant(_arg1:Array):Number{ var _local2:int; var _local3:Array; var _local4:Number; var _local5:int; _local2 = _arg1.length; if (_local2 == 2){ return (((_arg1[0][0] * _arg1[1][1]) - (_arg1[0][1] * _arg1[1][0]))); }; if (_local2 == 1){ return (_arg1[0][0]); }; _local4 = 0; _local5 = 0; while (_local5 < _local2) { _local3 = cofactors(_arg1, _local5, 0); if ((_local5 % 2)){ _local4 = (_local4 - (_arg1[_local5][0] * determinant(_local3))); } else { _local4 = (_local4 + (_arg1[_local5][0] * determinant(_local3))); }; _local5++; }; return (_local4); } public static function copyMatrix(_arg1:Array):Array{ var _local2:int; var _local3:int; var _local4:int; var _local5:int; var _local6:Array; _local4 = _arg1[0].length; _local5 = _arg1.length; _local6 = new Array(_local5); _local3 = 0; while (_local3 < _local5) { _local6[_local3] = new Array(_local4); _local2 = 0; while (_local2 < _local4) { _local6[_local3][_local2] = _arg1[_local3][_local2]; _local2++; }; _local3++; }; return (_local6); } public static function orthographic(_arg1:Number, _arg2:Number):Array{ var _local3:Array; _local3 = identity(4); _local3[2][2] = (-2 / (_arg2 - _arg1)); return (_local3); } public static function cofactors(_arg1:Array, _arg2:int, _arg3:int):Array{ var _local4:int; var _local5:Array; var _local6:int; var _local7:int; var _local8:int; var _local9:int; _local4 = _arg1.length; _local5 = identity((_local4 - 1)); _local6 = 0; while (_local6 < (_local4 - 1)) { _local8 = ((_local6)<_arg2) ? _local6 : (_local6 + 1); _local7 = 0; while (_local7 < (_local4 - 1)) { _local9 = ((_local7)<_arg3) ? _local7 : (_local7 + 1); _local5[_local6][_local7] = _arg1[_local8][_local9]; _local7++; }; _local6++; }; return (_local5); } public static function transpose(_arg1:Array):Array{ var _local2:Number; var _local3:Array; var _local4:int; var _local5:int; _local2 = _arg1.length; _local3 = identity(_local2); _local4 = 0; while (_local4 < _local2) { _local5 = 0; while (_local5 < _local2) { _local3[_local4][_local5] = _arg1[_local5][_local4]; _local5++; }; _local4++; }; return (_local3); } public static function norm(_arg1:Array):Number{ var _local2:int; var _local3:Number; var _local4:Array; _local3 = 0; _local4 = new Array(3); _local2 = 0; while (_local2 < _arg1.length) { _local3 = (_local3 + (_arg1[_local2] * _arg1[_local2])); _local2++; }; _local3 = Math.sqrt(_local3); return (_local3); } public static function translate(_arg1:Number, _arg2:Number, _arg3:Number):Array{ var _local4:Array; _local4 = identity(4); _local4[0][3] = _arg1; _local4[1][3] = _arg2; _local4[2][3] = _arg3; return (_local4); } public static function identity(_arg1:int=4):Array{ var _local2:int; var _local3:int; var _local4:Array; _local4 = new Array(_arg1); _local2 = 0; while (_local2 < _arg1) { _local4[_local2] = new Array(_arg1); _local3 = 0; while (_local3 < _arg1) { _local4[_local2][_local3] = 0; _local3++; }; _local4[_local2][_local2] = 1; _local2++; }; return (_local4); } public static function rotateZ(_arg1:Number):Array{ var _local2:Array; var _local3:Number; var _local4:Number; _local2 = identity(4); _local3 = Math.sin(_arg1); _local4 = Math.cos(_arg1); _local2[0][0] = _local4; _local2[0][1] = -(_local3); _local2[1][0] = _local3; _local2[1][1] = _local4; return (_local2); } } }//package pixels3d
Section 3
//Camera3D (pixels3d.Camera3D) package pixels3d { import flash.geom.*; import flash.display.*; public final class Camera3D { private var _view:Array; private var _position:Array; private var _scale:Number; public var screenSize:Rectangle; private var _screenDist:Number; private var _screen:Rectangle; var zBuffer:Array; private var _projection:Array; private var _fieldOfView:int; private var _ortho:Boolean; private var _zBufferLen:int; private var _canvas:BitmapData; public function Camera3D(){ _position = [0, 0, 0, 1]; zBuffer = null; _screen = new Rectangle(); _screenDist = Infinity; _canvas = null; _view = Algebra.identity(); setOrthographic(); } public function setPerspective(_arg1:Number, _arg2:Number=1, _arg3:Number=2000){ _fieldOfView = (2 * _arg1); _screenDist = ((Math.cos(_arg1) * _screen.height) * 0.5); _scale = 1; _ortho = false; _projection = Algebra.perspective(_arg1, (_screen.width / _screen.height), _arg2, _arg3); _projection = Algebra.matrixProduct(_projection, Algebra.scale((_screen.width * 0.5), (_screen.height * 0.5), 1)); } public function get isOrthographic():Boolean{ return (_ortho); } public function get screenDist():Number{ return (_screenDist); } public function get isPerspective():Boolean{ return (!(_ortho)); } public function get canvas():BitmapData{ return (_canvas); } public function get scale():Number{ return (_scale); } public function set screen(_arg1:Rectangle){ var _local2:*; var _local3:int; _screen = _arg1.clone(); screenSize = _screen.clone(); screenSize.x = (screenSize.y = 0); _zBufferLen = (_screen.width * _screen.height); zBuffer = []; resetZBuffer(); if (_canvas != null){ _canvas.dispose(); }; _canvas = new BitmapData(_screen.width, _screen.height); } public function resetZBuffer(){ var _local1:Number; var _local2:int; _local1 = Infinity; _local2 = 0; while (_local2 < _zBufferLen) { zBuffer[_local2] = _local1; zBuffer[(_local2 + 1)] = _local1; zBuffer[(_local2 + 2)] = _local1; zBuffer[(_local2 + 3)] = _local1; zBuffer[(_local2 + 4)] = _local1; zBuffer[(_local2 + 5)] = _local1; zBuffer[(_local2 + 6)] = _local1; zBuffer[(_local2 + 7)] = _local1; zBuffer[(_local2 + 8)] = _local1; zBuffer[(_local2 + 9)] = _local1; zBuffer[(_local2 + 10)] = _local1; zBuffer[(_local2 + 11)] = _local1; zBuffer[(_local2 + 12)] = _local1; zBuffer[(_local2 + 13)] = _local1; zBuffer[(_local2 + 14)] = _local1; zBuffer[(_local2 + 15)] = _local1; zBuffer[(_local2 + 16)] = _local1; zBuffer[(_local2 + 17)] = _local1; zBuffer[(_local2 + 18)] = _local1; zBuffer[(_local2 + 19)] = _local1; _local2 = (_local2 + 20); }; } public function get view():Array{ return (_view); } public function get projection():Array{ return (_projection); } public function get position():Array{ return (_position); } public function setOrthographic(_arg1:Number=1, _arg2:Number=0, _arg3:Number=2000){ _fieldOfView = Math.PI; _scale = _arg1; _ortho = true; _screenDist = 0; _projection = Algebra.orthographic(_arg2, _arg3); _projection = Algebra.matrixProduct(_projection, Algebra.scale(_arg1, _arg1, 1)); } public function get screen():Rectangle{ return (_screen.clone()); } public function clear(){ if (_canvas != null){ _canvas.dispose(); _canvas = null; }; _view = (zBuffer = (_projection = null)); } public function get fieldOfView():Number{ return (_fieldOfView); } public function lookAt(_arg1:Array, _arg2:Array=null, _arg3:Array=null){ if (_arg2 == null){ _arg2 = [0, 0, 0]; }; if (_arg3 == null){ _arg3 = [0, 1, 0]; }; _position[0] = _arg1[0]; _position[1] = _arg1[1]; _position[2] = _arg1[2]; _view = Algebra.lookAt(position, _arg2, _arg3); } } }//package pixels3d
Section 4
//Light3D (pixels3d.Light3D) package pixels3d { public final class Light3D { public var color:Array; private var _normal:Array; public var type:int; public static const T_FOCAL:int = 1; public static const T_POINT:int = 0; public function Light3D(){ color = [1, 1, 1, 1]; _normal = [0, 1, 0]; type = T_FOCAL; } public function get position():Array{ return (_normal); } public function set normal(_arg1:Array){ _normal = _arg1; } public function set position(_arg1:Array){ _normal = _arg1; } public function get normal():Array{ return (_normal); } } }//package pixels3d
Section 5
//Material3D (pixels3d.Material3D) package pixels3d { import flash.display.*; public class Material3D { public var Ka:Array; public var sharpness:Number; public var name:String; public var Ks:Array; public var emissive:Array; public var illuminationModel:int; public var texture:BitmapData; public var Ni:Number; public var Ns:Number; public var Kd:Array; public function Material3D(_arg1:String){ name = _arg1; illuminationModel = 0; Ka = [0, 0, 0]; Kd = [1, 1, 1]; Ks = [1, 1, 1]; emissive = [0, 0, 0]; Ns = 1; sharpness = 60; Ni = 1; texture = null; } public function clone():Material3D{ var _local1:Material3D; _local1 = new Material3D(name); _local1.illuminationModel = illuminationModel; _local1.Ka = Ka.concat(); _local1.Kd = Kd.concat(); _local1.Ks = Ks.concat(); _local1.emissive = emissive.concat(); _local1.Ns = Ns; _local1.sharpness = sharpness; _local1.Ni = Ni; _local1.texture = texture; return (_local1); } public function copy(_arg1:Material3D):void{ _arg1.name = name; _arg1.illuminationModel = illuminationModel; _arg1.Ka[0] = Ka.concat(); _arg1.Kd[0] = Kd.concat(); _arg1.Ks[0] = Ks.concat(); _arg1.emissive = emissive.concat(); _arg1.Ns = Ns; _arg1.sharpness = sharpness; _arg1.Ni = Ni; _arg1.texture = texture; } } }//package pixels3d
Section 6
//Model3D (pixels3d.Model3D) package pixels3d { import flash.display.*; import flash.events.*; import flash.net.*; public final class Model3D extends EventDispatcher { private var __blinnRS:Array; private var _points:Array; public var wireframe:Boolean; private var __curScrFace:Array; public var _loaded:Boolean; private var __specularSum:Array; private var _globalFaceNormals:Array; private var _faceGroups:Array; private var __canvas:BitmapData; private var __pointToObserver:Array; private var _projectedPoints:Array; private var _globalPoints:Array; private var __scrH:int; private var __blinnLV:Array; private var _scale:Array; private var __blinnSum:Array; private var _localPointNormals:Array; private var _localFaceNormals:Array; private var __scrW:int; private var _facesPerPoint:Array; private var _materialNames:Array; private var __prop:Array; private var __diffuseSum:Array; private var __faceArea:Number; public var visible:Boolean; public var cull:Boolean; private var __zBuffer:Array; private var __scrW2:int; private var _position:Array; public var _lastObjFileName:String; public var name:String; private var __pointToLight:Array; private var __normals:Array; private var _globalPointNormals:Array; private var __curMaterial:Material3D; private var __blinnH:Array; private var __lig:Array; private var _materials:Array; private var __scrFaceOrdered:Array; private var __point:Array; private var __scrH2:int; public var _pendingMaterials:Boolean; private var _faces:Array; private var __invFaceArea:Number; private var __points:Array; private var _screenFaceNormals:Array; private var _pointGroups:Array; private var __normal:Array; private var __colorSum:Array; private var __amb:Array; private var _rotation:Array; private var _matrix:Array; private var __camPos:Array; private var __curFace:Array; private var __cam:Camera3D; private var __pointToReflect:Array; private var _groups:Array; public function Model3D(){ name = "default"; _pendingMaterials = false; _loaded = true; _lastObjFileName = ""; wireframe = false; visible = true; cull = true; _position = [0, 0, 0, 1]; _rotation = [0, 0, 0, 1]; _scale = [1, 1, 1, 1]; _matrix = Algebra.identity(); _points = []; _globalPoints = []; _projectedPoints = []; _localPointNormals = []; _globalPointNormals = []; _screenFaceNormals = []; _facesPerPoint = []; _faces = []; _localFaceNormals = []; _globalFaceNormals = []; _materials = []; _materialNames = []; _materialNames[0] = ""; _materials[""] = new Material3D(""); _groups = []; _pointGroups = []; _faceGroups = []; __cam = null; __camPos = null; __canvas = null; __zBuffer = null; __lig = null; __amb = [0, 0, 0]; __curFace = [-1, -1, -1]; __curMaterial = null; __curScrFace = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]; __scrW = (__scrW2 = (__scrH = __scrH2)); __faceArea = 0; __invFaceArea = 0; __normals = [null, null, null]; __points = [null, null, null]; __scrFaceOrdered = [null, null, null]; __normal = [0, 0, 0]; __point = [0, 0, 0]; __prop = [0, 0, 0]; __colorSum = [0, 0, 0]; __diffuseSum = [0, 0, 0]; __specularSum = [0, 0, 0]; __pointToLight = [0, 0, 0]; __pointToObserver = [0, 0, 0]; __pointToReflect = [0, 0, 0]; __blinnSum = [0, 0, 0]; __blinnRS = [0, 0, 0]; __blinnH = [0, 0, 0]; __blinnLV = [0, 0, 0]; } public function get loaded():Boolean{ return (_loaded); } private function mtlLoaded(_arg1:Event):void{ var _local2:URLLoader; _local2 = (_arg1.currentTarget as URLLoader); Model3DEditor.readMTL(_local2.data, this); _pendingMaterials = false; _loaded = true; _lastObjFileName = ""; dispatchEvent(new Event("complete")); } public function set rotation(_arg1:Array):void{ _rotation = _arg1.concat(); } public function removeFaceFromGroup(_arg1:String, _arg2:int):void{ var _local3:Array; var _local4:int; var _local5:int; if (((!(_arg1)) || (!(_arg1.length)))){ return; }; if ((((_arg2 < 0)) || ((_arg2 >= _faces.length)))){ return; }; _local3 = _faceGroups[_arg2]; _local4 = _local3.length; _local5 = 0; while (_local5 < _local4) { if (_local3[_local5] == _arg1){ _local3.splice(_local5, 1); return; }; _local5++; }; } public function getGroupsFromFace(_arg1:int):Array{ if ((((_arg1 < 0)) || ((_arg1 >= _faces.length)))){ return ([]); }; return (_faceGroups[_arg1].concat()); } public function getPointsFromGroup(_arg1:String):Array{ var _local2:int; var _local3:int; var _local4:Array; _local3 = _points.length; _local4 = []; _local2 = 0; while (_local2 < _local3) { if (pointInGroup(_arg1, _local2)){ _local4.push(_local2); }; _local2++; }; return (_local4); } public function setGlobalAsLocal():void{ var _local1:int; _local1 = 0; while (_local1 < _points.length) { _points[_local1][0] = _globalPoints[_local1][0]; _points[_local1][1] = _globalPoints[_local1][1]; _points[_local1][2] = _globalPoints[_local1][2]; _points[_local1][3] = 1; _local1++; }; computeLocalNormals(); _position = [0, 0, 0, 1]; _rotation = [0, 0, 0, 1]; _scale = [1, 1, 1, 1]; updateMatrix(); } public function get position():Array{ return (_position); } public function get materials():Array{ return (_materials); } public function loadOBJ(_arg1:String):void{ var _local2:URLLoader; _loaded = false; _lastObjFileName = _arg1; _local2 = new URLLoader(); _local2.addEventListener(Event.COMPLETE, objLoaded); _local2.addEventListener(IOErrorEvent.IO_ERROR, objIOError); _local2.addEventListener(SecurityErrorEvent.SECURITY_ERROR, objSecurityError); _local2.load(new URLRequest(_arg1)); } public function removeMaterialByName(_arg1:String){ var _local2:Number; var _local3:int; if (!name.length){ return; }; if (!_materials[_arg1]){ return; }; delete _materials[_arg1]; _local2 = _faces.length; _local3 = 0; while (_local3 < _local2) { if (_faces[_local3].material == _arg1){ _faces[_local3].material = ""; }; _local3++; }; _local2 = _materialNames.length; _local3 = 0; while (_local3 < _local2) { if (_materialNames[_local3] == _arg1){ _materialNames.splice(_local3, 1); return; }; _local3++; }; } private function computeFaceNormal(_arg1:Array, _arg2:int, _arg3:Array):void{ var _local4:*; var _local5:*; var _local6:Array; var _local7:*; var _local8:Array; var _local9:int; _local4 = _arg3[_faces[_arg2][0]]; _local5 = _arg3[_faces[_arg2][1]]; _local6 = _arg3[_faces[_arg2][2]]; _local7 = [(_local5[0] - _local4[0]), (_local5[1] - _local4[1]), (_local5[2] - _local4[2])]; _local8 = [(_local6[0] - _local4[0]), (_local6[1] - _local4[1]), (_local6[2] - _local4[2])]; _arg1[_arg2] = Algebra.crossProduct(_local7, _local8); Algebra.normalize(_arg1[_arg2]); } public function faceInGroup(_arg1:String, _arg2:int):Boolean{ var _local3:Array; var _local4:int; var _local5:int; if (((!(_arg1)) || (!(_arg1.length)))){ return (false); }; if ((((_arg2 < 0)) || ((_arg2 >= _faces.length)))){ return (false); }; _local3 = _faceGroups[_arg2]; if (!_local3){ return (false); }; _local4 = _local3.length; _local5 = 0; while (_local5 < _local4) { if (_local3[_local5] == _arg1){ return (true); }; _local5++; }; return (false); } public function computeGlobalPoints():void{ var _local1:int; var _local2:int; var _local3:Array; _local2 = _points.length; _local1 = 0; while (_local1 < _local2) { _globalPoints[_local1] = Algebra.transformPoint(_points[_local1], _matrix); _local3 = _globalPoints[_local1]; _local1++; }; computeGlobalNormals(); } public function draw(_arg1:Camera3D, _arg2:Array, _arg3:Array):void{ var _local4:int; var _local5:uint; var _local6:int; __cam = _arg1; __camPos = __cam.position; __canvas = __cam.canvas; __zBuffer = __cam.zBuffer; __scrW = __cam.screen.width; __scrW2 = (__scrW >> 1); __scrH = __cam.screen.height; __scrH2 = (__scrH >> 1); __lig = _arg2; __amb = _arg3.concat(); computeScreenPoints(_arg1.view, _arg1.projection); _local6 = _faces.length; if (wireframe){ _local4 = 0; while (_local4 < _local6) { if (cull){ computeFaceNormal(_screenFaceNormals, _local4, _projectedPoints); //unresolved if } else { __curFace = _faces[_local4]; if (!__curFace.visible){ } else { __curMaterial = _materials[__curFace.material]; _local5 = ((((__curMaterial.Kd[0] * 0xFF) << 16) | ((__curMaterial.Kd[1] * 0xFF) << 8)) | (__curMaterial.Kd[2] * 0xFF)); drawLine(__curFace[0], __curFace[1], _local5); drawLine(__curFace[1], __curFace[2], _local5); drawLine(__curFace[2], __curFace[0], _local5); }; }; _local4++; }; } else { _local4 = 0; while (_local4 < _local6) { if (cull){ computeFaceNormal(_screenFaceNormals, _local4, _projectedPoints); //unresolved if } else { drawFace(_local4); }; _local4++; }; }; } public function get faceNormals():Array{ return (_localFaceNormals); } public function clone():Model3D{ var _local1:int; var _local2:int; var _local3:Model3D; var _local4:Array; var _local5:Array; var _local6:int; var _local7:int; _local3 = new Model3D(); _local3.visible = visible; _local3.cull = cull; _local3.wireframe = wireframe; _local3._rotation = _rotation.concat(); _local3._position = _position.concat(); _local3._scale = _scale.concat(); _local3._groups = _groups.concat(); _local1 = 0; while (_local1 < _materialNames.length) { _local3.addMaterial(_materials[_materialNames[_local1]]); _local1++; }; _local1 = 0; while (_local1 < _points.length) { _local3._points[_local1] = _points[_local1].concat(); _local4 = getGroupsFromPoint(_local1); _local6 = _local4.length; _local2 = 0; while (_local2 < _local6) { _local3.addPointToGroup(_local4[_local2], _local1); _local2++; }; _local1++; }; _local1 = 0; while (_local1 < _faces.length) { _local3._faces[_local1] = Model3DEditor.copyFace(_faces[_local1]); _local5 = getGroupsFromFace(_local1); _local7 = _local5.length; _local2 = 0; while (_local2 < _local7) { _local3.addPointToGroup(_local5[_local2], _local1); _local2++; }; _local1++; }; _local3.updateModel(); _local3.updateMatrix(); return (_local3); } public function addFaceToGroup(_arg1:String, _arg2:int):void{ var _local3:Array; var _local4:int; var _local5:int; if (((!(_arg1)) || (!(_arg1.length)))){ return; }; if ((((_arg2 < 0)) || ((_arg2 >= _faces.length)))){ return; }; _local3 = _faceGroups[_arg2]; if (!_local3){ _local3 = (_faceGroups[_arg2] = []); }; _local4 = _local3.length; _local5 = 0; while (_local5 < _local4) { if (_local3[_local5] == _arg1){ return; }; _local5++; }; _local3.push(_arg1); addGroup(_arg1); } public function computeLocalNormals():void{ var _local1:int; var _local2:int; var _local3:int; _local2 = _faces.length; _local3 = _points.length; _local1 = 0; while (_local1 < _local2) { computeFaceNormal(_localFaceNormals, _local1, _points); _local1++; }; _local1 = 0; while (_local1 < _local3) { computePointNormal(_localPointNormals, _local1, _localFaceNormals); _local1++; }; computeGlobalPoints(); } public function getGroupsFromPoint(_arg1:int):Array{ if ((((_arg1 < 0)) || ((_arg1 >= _points.length)))){ return ([]); }; return (_pointGroups[_arg1].concat()); } public function get pendingMaterials():Boolean{ return (_pendingMaterials); } public function get globalPoints():Array{ return (_globalPoints); } public function clean():void{ _globalPoints = []; _projectedPoints = []; _localPointNormals = []; _globalPointNormals = []; _localFaceNormals = []; _globalFaceNormals = []; updateModel(); updateMatrix(); } public function addPointToGroup(_arg1:String, _arg2:int):void{ var _local3:Array; var _local4:int; var _local5:int; if (((!(_arg1)) || (!(_arg1.length)))){ return; }; if ((((_arg2 < 0)) || ((_arg2 >= _points.length)))){ return; }; _local3 = _pointGroups[_arg2]; if (!_local3){ _local3 = (_pointGroups[_arg2] = []); }; _local4 = _local3.length; _local5 = 0; while (_local5 < _local4) { if (_local3[_local5] == _arg1){ return; }; _local5++; }; addGroup(_arg1); _local3.push(_arg1); } public function clear():void{ _points = []; _faces = []; _materials = []; _materialNames = []; _rotation = [0, 0, 0]; _position = [0, 0, 0]; _scale = [1, 1, 1]; _materials[""] = new Material3D(""); _materialNames[0] = ""; clean(); } public function removeGroup(_arg1:String):void{ var _local2:Array; var _local3:Array; var _local4:int; var _local5:int; var _local6:int; var _local7:int; if (((!(_arg1)) || (!(_arg1.length)))){ return; }; _local2 = getPointsFromGroup(_arg1); _local3 = getFacesFromGroup(_arg1); _local4 = _local2.length; _local5 = _local3.length; _local6 = 0; while (_local6 < _local4) { removePointFromGroup(_arg1, _local2[_local6]); _local6++; }; _local6 = 0; while (_local6 < _local4) { removeFaceFromGroup(_arg1, _local2[_local6]); _local6++; }; _local7 = _groups.length; _local6 = 0; while (_local6 < _local7) { if (_groups[_local6] == _arg1){ _groups.splice(_local6, 1); return; }; _local6++; }; } public function get scale():Array{ return (_scale); } public function get projectedPoints():Array{ return (_projectedPoints); } public function get screenFaceNormals():Array{ return (_screenFaceNormals); } public function get rotation():Array{ return (_rotation); } public function set position(_arg1:Array):void{ _position = _arg1.concat(); } public function addGroup(_arg1:String):void{ if (((!(_arg1)) || (!(_arg1.length)))){ return; }; if (groupExists(_arg1)){ return; }; _groups.push(_arg1); } public function get materialNames():Array{ return (_materialNames.concat()); } private function drawLine(_arg1:int, _arg2:int, _arg3:uint){ var _local4:*; var _local5:int; var _local6:Array; var _local7:Array; var _local8:int; var _local9:int; var _local10:int; var _local11:int; var _local12:Number; var _local13:Number; var _local14:Number; var _local15:int; var _local16:int; var _local17:Number; var _local18:int; var _local19:int; var _local20:*; var _local21:*; var _local22:*; var _local23:int; var _local24:int; var _local25:int; var _local26:int; var _local27:Boolean; _local6 = _projectedPoints[_arg1]; _local7 = _projectedPoints[_arg2]; _local8 = _local6[0]; _local10 = _local7[0]; _local9 = _local6[1]; _local11 = _local7[1]; _local13 = _local6[2]; _local14 = _local7[2]; if ((((_local13 < -1)) || ((_local14 < -1)))){ return; }; if ((((_local13 > 1)) || ((_local14 > 1)))){ return; }; _local15 = (_local10 - _local8); _local16 = (_local11 - _local9); _local17 = (_local14 - _local13); _local18 = Math.abs(_local15); _local19 = Math.abs(_local16); if (_local15 < 0){ _local15 = -(_local15); }; if (_local16 < 0){ _local16 = -(_local16); }; _local20 = ((_local8)<_local10) ? 1 : -1; _local21 = ((_local9)<_local11) ? 1 : -1; _local4 = (_local15 - _local16); _local25 = _local8; _local26 = _local9; _local27 = (_local18 < _local19); while (1) { _local22 = (_local8 + __scrW2); _local23 = (__scrH2 - _local9); if ((((_local22 < 0)) && ((_local20 < 0)))){ return; }; if ((((_local23 < 0)) && ((_local21 > 0)))){ return; }; if ((((_local22 > __scrW)) && ((_local20 > 0)))){ return; }; if ((((_local23 > __scrH)) && ((_local21 < 0)))){ return; }; if ((((((((_local22 > 0)) && ((_local23 > 0)))) && ((_local22 < __scrW)))) && ((_local23 < __scrH)))){ _local24 = ((_local22 * __scrH) + _local23); if (_local27){ _local12 = (_local13 + ((_local17 * (_local9 - _local26)) / Number((_local11 - _local26)))); } else { _local12 = (_local13 + ((_local17 * (_local8 - _local25)) / Number((_local10 - _local25)))); }; if (isNaN(_local12)){ _local12 = _local13; }; if ((((((_local12 >= -1)) && ((_local12 <= 1)))) && ((__zBuffer[_local24] >= _local12)))){ __zBuffer[_local24] = _local12; __canvas.setPixel(_local22, _local23, _arg3); }; }; if ((((_local8 == _local10)) && ((_local9 == _local11)))){ return; }; _local5 = (2 * _local4); if (_local5 > -(_local16)){ _local4 = (_local4 - _local16); _local8 = (_local8 + _local20); }; if (_local5 < _local15){ _local4 = (_local4 + _local15); _local9 = (_local9 + _local21); }; }; } public function computeScreenPoints(_arg1:Array=null, _arg2:Array=null):void{ var _local3:int; var _local4:Array; var _local5:int; if (_arg1 == null){ _arg1 = Algebra.identity(4); }; if (_arg2 == null){ _arg2 = Algebra.identity(4); }; _local4 = Algebra.matrixProduct(_arg1, _arg2); _local5 = _points.length; _local3 = 0; while (_local3 < _local5) { _projectedPoints[_local3] = Algebra.transformPoint(_globalPoints[_local3], _local4); _local3++; }; } public function set scale(_arg1:Array):void{ _scale = _arg1.concat(); } public function deletePoint(_arg1:int):void{ var _local2:int; var _local3:Array; var _local4:Array; var _local5:int; updateModel(); _local3 = _facesPerPoint[_arg1]; _local2 = 0; while (_local2 < (_local3.length - 1)) { if (_local3[_local2] > _local3[(_local2 + 1)]){ throw ("FACES NOT ORDERED"); }; _local2++; }; while (((_local3) && (_local3.length))) { deleteFace(_local3[(_local3.length - 1)]); }; delete _points[_arg1]; _points.splice(_arg1, 1); delete _facesPerPoint[_arg1]; _facesPerPoint.splice(_arg1, 1); _local5 = _faces.length; _local2 = 0; while (_local2 < _local5) { _local4 = _faces[_local2]; if (_local4[0] > _arg1){ var _local6 = _local4; var _local7:int; var _local8 = (_local6[_local7] - 1); _local6[_local7] = _local8; }; if (_local4[1] > _arg1){ _local6 = _local4; _local7 = 1; _local8 = (_local6[_local7] - 1); _local6[_local7] = _local8; }; if (_local4[2] > _arg1){ _local6 = _local4; _local7 = 2; _local8 = (_local6[_local7] - 1); _local6[_local7] = _local8; }; _local2++; }; updateModel(); } public function computeGlobalNormals():void{ var _local1:int; var _local2:int; var _local3:int; _local2 = _faces.length; _local1 = 0; while (_local1 < _local2) { computeFaceNormal(_globalFaceNormals, _local1, _globalPoints); _local1++; }; _local3 = _points.length; _local1 = 0; while (_local1 < _local3) { computePointNormal(_globalPointNormals, _local1, _globalFaceNormals); _local1++; }; } private function objIOError(_arg1:IOErrorEvent):void{ var _local2:URLLoader; _local2 = (_arg1.currentTarget as URLLoader); _local2.removeEventListener(Event.COMPLETE, objLoaded); _local2.removeEventListener(IOErrorEvent.IO_ERROR, objIOError); _local2.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, objSecurityError); _pendingMaterials = false; _loaded = true; _lastObjFileName = ""; dispatchEvent(_arg1); } public function deleteFace(_arg1:int):void{ var _local2:Array; var _local3:Array; var _local4:int; var _local5:int; var _local6:int; if ((((_arg1 < 0)) || ((_arg1 >= _faces.length)))){ return; }; _local2 = _faces[_arg1]; _local5 = 0; while (_local5 < 3) { _local3 = _facesPerPoint[_local2[_local5]]; _local4 = _local3.length; _local6 = 0; while (_local6 < _local4) { if (_local3[_local6] == _arg1){ _local3.splice(_local6, 1); break; }; _local6++; }; _local5++; }; delete _faces[_arg1]; _faces.splice(_arg1, 1); } public function get faces():Array{ return (_faces); } public function setMaterial(_arg1:Material3D):void{ var _local2:String; var _local3:int; var _local4:int; if (!_arg1){ return; }; _local2 = _arg1.name; if (!_materials[_local2]){ addMaterial(_arg1); }; _local3 = _faces.length; _local4 = 0; while (_local4 < _local3) { _faces[_local4].material = _local2; _local4++; }; } public function pointInGroup(_arg1:String, _arg2:int):Boolean{ var _local3:Array; var _local4:int; var _local5:int; if (((!(_arg1)) || (!(_arg1.length)))){ return (false); }; if ((((_arg2 < 0)) || ((_arg2 >= _points.length)))){ return (false); }; _local3 = _pointGroups[_arg2]; if (!_local3){ return (false); }; _local4 = _local3.length; _local5 = 0; while (_local5 < _local4) { if (_local3[_local5] == _arg1){ return (true); }; _local5++; }; return (false); } public function get pointNormals():Array{ return (_localPointNormals); } public function invertNormals():void{ var _local1:int; var _local2:int; _local2 = 0; while (_local2 < _faces.length) { _local1 = _faces[_local2][0]; _faces[_local2][0] = _faces[_local2][1]; _faces[_local2][1] = _local1; _local2++; }; computeGlobalNormals(); } public function groupExists(_arg1:String):Boolean{ var _local2:int; var _local3:int; if (((!(_arg1)) || (!(_arg1.length)))){ return (false); }; _local2 = _groups.length; _local3 = 0; while (_local3 < _local2) { if (_groups[_local3] == _arg1){ return (true); }; _local3++; }; return (false); } private function calculatePixel(_arg1:int, _arg2:int, _arg3:int, _arg4:Number, _arg5:Number, _arg6:Number){ var _local7:uint; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:Number; var _local13:Number; var _local14:Number; var _local15:Array; var _local16:Array; var _local17:int; var _local18:Number; var _local19:Number; var _local20:int; var _local21:Array; var _local22:Array; var _local23:Number; var _local24:Number; var _local25:Number; var _local26:Number; var _local27:Number; var _local28:Number; var _local29:Number; var _local30:Number; var _local31:Number; var _local32:Number; var _local33:Number; var _local34:Number; var _local35:Number; var _local36:Number; var _local37:Number; var _local38:Number; var _local39:Number; var _local40:Number; var _local41:Number; var _local42:Number; var _local43:Number; var _local44:Number; var _local45:Number; if (!__curMaterial.illuminationModel){ _local7 = (((int((__curMaterial.Kd[0] * 0xFF)) << 16) | (int((__curMaterial.Kd[1] * 0xFF)) << 8)) | int((__curMaterial.Kd[2] * 0xFF))); __canvas.setPixel(_arg2, _arg3, _local7); return; }; _local10 = (__scrFaceOrdered[1][0] - _arg4); _local12 = (__scrFaceOrdered[1][1] - _arg5); _local11 = (__scrFaceOrdered[2][0] - _arg4); _local13 = (__scrFaceOrdered[2][1] - _arg5); _local14 = (0.5 * ((_local10 * _local13) - (_local11 * _local12))); __prop[0] = (_local14 * __invFaceArea); _local10 = (__scrFaceOrdered[2][0] - _arg4); _local12 = (__scrFaceOrdered[2][1] - _arg5); _local11 = (__scrFaceOrdered[0][0] - _arg4); _local13 = (__scrFaceOrdered[0][1] - _arg5); _local14 = (0.5 * ((_local10 * _local13) - (_local11 * _local12))); __prop[1] = (_local14 * __invFaceArea); _local10 = (__scrFaceOrdered[0][0] - _arg4); _local12 = (__scrFaceOrdered[0][1] - _arg5); _local11 = (__scrFaceOrdered[1][0] - _arg4); _local13 = (__scrFaceOrdered[1][1] - _arg5); _local14 = (0.5 * ((_local10 * _local13) - (_local11 * _local12))); __prop[2] = (_local14 * __invFaceArea); __point[0] = (((__prop[0] * __points[0][0]) + (__prop[1] * __points[1][0])) + (__prop[2] * __points[2][0])); __point[1] = (((__prop[0] * __points[0][1]) + (__prop[1] * __points[1][1])) + (__prop[2] * __points[2][1])); __point[2] = (((__prop[0] * __points[0][2]) + (__prop[1] * __points[1][2])) + (__prop[2] * __points[2][2])); if (__curFace.smooth){ __normal[0] = (((__prop[0] * __normals[0][0]) + (__prop[1] * __normals[1][0])) + (__prop[2] * __normals[2][0])); __normal[1] = (((__prop[0] * __normals[0][1]) + (__prop[1] * __normals[1][1])) + (__prop[2] * __normals[2][1])); __normal[2] = (((__prop[0] * __normals[0][2]) + (__prop[1] * __normals[1][2])) + (__prop[2] * __normals[2][2])); _local8 = Math.sqrt((((__normal[0] * __normal[0]) + (__normal[1] * __normal[1])) + (__normal[2] * __normal[2]))); _local9 = (1 / _local8); __normal[0] = (__normal[0] * _local9); __normal[1] = (__normal[1] * _local9); __normal[2] = (__normal[2] * _local9); } else { __normal[0] = _globalFaceNormals[_arg1][0]; __normal[1] = _globalFaceNormals[_arg1][1]; __normal[2] = _globalFaceNormals[_arg1][2]; }; if (__curMaterial.illuminationModel > 1){ __pointToObserver[0] = (__camPos[0] - __point[0]); __pointToObserver[1] = (__camPos[1] - __point[1]); __pointToObserver[2] = (__camPos[2] - __point[2]); _local8 = Math.sqrt((((__pointToObserver[0] * __pointToObserver[0]) + (__pointToObserver[1] * __pointToObserver[1])) + (__pointToObserver[2] * __pointToObserver[2]))); _local9 = (1 / _local8); __pointToObserver[0] = (__pointToObserver[0] * _local9); __pointToObserver[1] = (__pointToObserver[1] * _local9); __pointToObserver[2] = (__pointToObserver[2] * _local9); }; __colorSum[0] = 0; __colorSum[1] = 0; __colorSum[2] = 0; if (__curMaterial.illuminationModel > 2){ __blinnSum[0] = 0; __blinnSum[1] = 0; __blinnSum[2] = 0; } else { __diffuseSum[0] = 0; __diffuseSum[1] = 0; __diffuseSum[2] = 0; __specularSum[0] = 0; __specularSum[1] = 0; __specularSum[2] = 0; }; _local20 = __lig.length; _local17 = 0; while (_local17 < _local20) { _local21 = __lig[_local17].normal; _local22 = __lig[_local17].color; if (__lig[_local17].type == Light3D.T_POINT){ __pointToLight[0] = (_local21[0] - __point[0]); __pointToLight[1] = (_local21[1] - __point[1]); __pointToLight[2] = (_local21[2] - __point[2]); _local8 = Math.sqrt((((__pointToLight[0] * __pointToLight[0]) + (__pointToLight[1] * __pointToLight[1])) + (__pointToLight[2] * __pointToLight[2]))); _local9 = (1 / _local8); __pointToLight[0] = (__pointToLight[0] * _local9); __pointToLight[1] = (__pointToLight[1] * _local9); __pointToLight[2] = (__pointToLight[2] * _local9); } else { __pointToLight[0] = _local21[0]; __pointToLight[1] = _local21[1]; __pointToLight[2] = _local21[2]; }; _local18 = (((__pointToLight[0] * __normal[0]) + (__pointToLight[1] * __normal[1])) + (__pointToLight[2] * __normal[2])); if (_local18 < 0){ } else { if (__curMaterial.illuminationModel > 2){ __blinnLV[0] = (__pointToLight[0] + __pointToObserver[0]); __blinnLV[1] = (__pointToLight[1] + __pointToObserver[1]); __blinnLV[2] = (__pointToLight[2] + __pointToObserver[2]); _local23 = Math.sqrt((((__blinnLV[0] * __blinnLV[0]) + (__blinnLV[1] * __blinnLV[1])) + (__blinnLV[2] * __blinnLV[2]))); _local24 = (1 / _local23); __blinnH[0] = ((__pointToLight[0] + __pointToObserver[0]) * _local24); __blinnH[1] = ((__pointToLight[1] + __pointToObserver[1]) * _local24); __blinnH[2] = ((__pointToLight[2] + __pointToObserver[2]) * _local24); _local25 = (((__blinnH[0] * __pointToObserver[0]) + (__blinnH[1] * __pointToObserver[1])) + (__blinnH[2] * __pointToObserver[2])); _local26 = (((__blinnH[0] * __normal[0]) + (__blinnH[1] * __normal[1])) + (__blinnH[2] * __normal[2])); _local27 = (((__normal[0] * __pointToObserver[0]) + (__normal[1] * __pointToObserver[1])) + (__normal[2] * __pointToObserver[2])); _local28 = ((2 * _local26) / _local25); _local29 = Math.min(1, (_local27 * _local28), (_local18 * _local28)); _local30 = Math.acos(_local26); _local31 = (_local30 * __curMaterial.Ns); _local32 = (__curMaterial.sharpness * Math.exp((-(_local31) * _local31))); _local33 = (__curMaterial.Ni - 1); _local34 = (__curMaterial.Ni + 1); _local35 = Math.abs((_local33 / _local34)); _local36 = ((1 + _local35) / (1 - _local35)); _local37 = Math.sqrt((((_local36 * _local36) + (_local25 * _local25)) - 1)); _local38 = (_local37 - _local25); _local39 = (_local37 + _local25); _local40 = ((_local25 * _local39) - 1); _local41 = ((_local25 * _local38) + 1); _local42 = ((0.5 * ((_local38 * _local38) / (_local39 * _local39))) * (1 + ((_local40 * _local40) / (_local41 * _local41)))); _local43 = (Math.PI * _local27); _local44 = (((_local32 * _local42) * _local29) / _local43); __blinnRS[0] = ((_local44 * __curMaterial.Ks[0]) + __curMaterial.Kd[0]); __blinnRS[1] = ((_local44 * __curMaterial.Ks[1]) + __curMaterial.Kd[1]); __blinnRS[2] = ((_local44 * __curMaterial.Ks[2]) + __curMaterial.Kd[2]); __blinnSum[0] = (__blinnSum[0] + ((_local22[0] * _local18) * __blinnRS[0])); __blinnSum[1] = (__blinnSum[1] + ((_local22[1] * _local18) * __blinnRS[1])); __blinnSum[2] = (__blinnSum[2] + ((_local22[2] * _local18) * __blinnRS[2])); } else { __diffuseSum[0] = (__diffuseSum[0] + ((_local18 * __curMaterial.Kd[0]) * _local22[0])); __diffuseSum[1] = (__diffuseSum[1] + ((_local18 * __curMaterial.Kd[1]) * _local22[1])); __diffuseSum[2] = (__diffuseSum[2] + ((_local18 * __curMaterial.Kd[2]) * _local22[2])); if (__curMaterial.illuminationModel > 1){ _local45 = (2 * _local18); __pointToReflect[0] = ((_local45 * __normal[0]) - __pointToLight[0]); __pointToReflect[1] = ((_local45 * __normal[1]) - __pointToLight[1]); __pointToReflect[2] = ((_local45 * __normal[2]) - __pointToLight[2]); _local8 = Math.sqrt((((__pointToReflect[0] * __pointToReflect[0]) + (__pointToReflect[1] * __pointToReflect[1])) + (__pointToReflect[2] * __pointToReflect[2]))); _local9 = (1 / _local8); __pointToReflect[0] = (__pointToReflect[0] * _local9); __pointToReflect[1] = (__pointToReflect[1] * _local9); __pointToReflect[2] = (__pointToReflect[2] * _local9); _local19 = (((__pointToReflect[0] * __pointToObserver[0]) + (__pointToReflect[1] * __pointToObserver[1])) + (__pointToReflect[2] * __pointToObserver[2])); if (_local19 >= 0){ if (_local19 > 1){ _local19 = 1; }; _local19 = Math.pow(_local19, __curMaterial.Ns); __specularSum[0] = (__specularSum[0] + ((_local22[0] * _local19) * __curMaterial.Ks[0])); __specularSum[1] = (__specularSum[1] + ((_local22[1] * _local19) * __curMaterial.Ks[1])); __specularSum[2] = (__specularSum[2] + ((_local22[2] * _local19) * __curMaterial.Ks[2])); }; }; }; }; _local17++; }; if (__curMaterial.illuminationModel > 2){ __colorSum[0] = ((__curMaterial.emissive[0] + (__amb[0] * __curMaterial.Ka[0])) + __blinnSum[0]); __colorSum[1] = ((__curMaterial.emissive[1] + (__amb[1] * __curMaterial.Ka[1])) + __blinnSum[1]); __colorSum[2] = ((__curMaterial.emissive[2] + (__amb[2] * __curMaterial.Ka[2])) + __blinnSum[2]); } else { __specularSum[0] = ((__specularSum[0])>1) ? 1 : __specularSum[0]; __specularSum[1] = ((__specularSum[1])>1) ? 1 : __specularSum[1]; __specularSum[2] = ((__specularSum[2])>1) ? 1 : __specularSum[2]; __diffuseSum[0] = ((__diffuseSum[0])>1) ? 1 : __diffuseSum[0]; __diffuseSum[1] = ((__diffuseSum[1])>1) ? 1 : __diffuseSum[1]; __diffuseSum[2] = ((__diffuseSum[2])>1) ? 1 : __diffuseSum[2]; __colorSum[0] = (((__curMaterial.emissive[0] + (__amb[0] * __curMaterial.Ka[0])) + __diffuseSum[0]) + __specularSum[0]); __colorSum[1] = (((__curMaterial.emissive[1] + (__amb[1] * __curMaterial.Ka[1])) + __diffuseSum[1]) + __specularSum[1]); __colorSum[2] = (((__curMaterial.emissive[2] + (__amb[2] * __curMaterial.Ka[2])) + __diffuseSum[2]) + __specularSum[2]); }; __colorSum[0] = ((__colorSum[0])>1) ? 1 : __colorSum[0]; __colorSum[1] = ((__colorSum[1])>1) ? 1 : __colorSum[1]; __colorSum[2] = ((__colorSum[2])>1) ? 1 : __colorSum[2]; _local7 = ((((__colorSum[0] * 0xFF) << 16) | ((__colorSum[1] * 0xFF) << 8)) | (__colorSum[2] * 0xFF)); __canvas.setPixel(_arg2, _arg3, _local7); } public function get matrix():Array{ return (_matrix); } public function getFacesFromGroup(_arg1:String):Array{ var _local2:int; var _local3:int; var _local4:Array; if (((!(_arg1)) || (!(_arg1.length)))){ return ([]); }; _local3 = _faces.length; _local4 = []; _local2 = 0; while (_local2 < _local3) { if (faceInGroup(_arg1, _local2)){ _local4.push(_local2); }; _local2++; }; return (_local4); } private function drawFace(_arg1:int):void{ var _local2:Number; var _local3:Number; var _local4:Number; var _local5:Number; var _local6:Array; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:Number; var _local11:Number; var _local12:Number; var _local13:int; var _local14:int; var _local15:int; var _local16:int; var _local17:int; var _local18:int; var _local19:int; var _local20:int; var _local21:Number; var _local22:Number; var _local23:Number; var _local24:Number; var _local25:Number; var _local26:Number; var _local27:int; var _local28:int; var _local29:int; var _local30:int; var _local31:int; var _local32:Number; var _local33:Number; var _local34:Number; var _local35:Number; var _local36:Number; var _local37:Number; var _local38:Number; var _local39:Number; var _local40:Number; var _local41:Number; var _local42:Number; var _local43:int; var _local44:int; var _local45:Number; var _local46:int; var _local47:Number; var _local48:Number; var _local49:Number; __curFace = _faces[_arg1]; if (!__curFace.visible){ return; }; __curMaterial = _materials[__curFace.material]; if (!__curMaterial){ __curMaterial = _materials[""]; }; __scrFaceOrdered[0] = (__curScrFace[0] = _projectedPoints[__curFace[0]]); __scrFaceOrdered[1] = (__curScrFace[1] = _projectedPoints[__curFace[1]]); __scrFaceOrdered[2] = (__curScrFace[2] = _projectedPoints[__curFace[2]]); __points[0] = _globalPoints[__curFace[0]]; __points[1] = _globalPoints[__curFace[1]]; __points[2] = _globalPoints[__curFace[2]]; __normals[0] = _globalPointNormals[__curFace[0]]; __normals[1] = _globalPointNormals[__curFace[1]]; __normals[2] = _globalPointNormals[__curFace[2]]; _local2 = (__scrFaceOrdered[1][0] - __scrFaceOrdered[0][0]); _local4 = (__scrFaceOrdered[1][1] - __scrFaceOrdered[0][1]); _local3 = (__scrFaceOrdered[2][0] - __scrFaceOrdered[0][0]); _local5 = (__scrFaceOrdered[2][1] - __scrFaceOrdered[0][1]); __faceArea = (0.5 * ((_local2 * _local5) - (_local3 * _local4))); __invFaceArea = (1 / __faceArea); if (__curScrFace[2][1] > __curScrFace[0][1]){ _local6 = __curScrFace[0]; __curScrFace[0] = __curScrFace[2]; __curScrFace[2] = _local6; }; if (__curScrFace[1][1] > __curScrFace[0][1]){ _local6 = __curScrFace[1]; __curScrFace[1] = __curScrFace[0]; __curScrFace[0] = _local6; }; if (__curScrFace[2][1] > __curScrFace[1][1]){ _local6 = __curScrFace[2]; __curScrFace[2] = __curScrFace[1]; __curScrFace[1] = _local6; }; _local7 = (Math.max(__curScrFace[0][0], __curScrFace[1][0], __curScrFace[2][0]) + __scrW2); _local8 = (Math.min(__curScrFace[0][0], __curScrFace[1][0], __curScrFace[2][0]) + __scrW2); _local9 = (__scrH2 - __curScrFace[2][1]); _local10 = (__scrH2 - __curScrFace[0][1]); _local11 = Math.max(__curScrFace[0][2], __curScrFace[1][2], __curScrFace[2][2]); _local12 = Math.min(__curScrFace[0][2], __curScrFace[1][2], __curScrFace[2][2]); if (_local10 >= __scrH){ return; }; if (_local9 < 0){ return; }; if ((((_local9 >= __scrH)) && ((_local10 < 0)))){ return; }; if (_local8 >= __scrW){ return; }; if (_local7 < 0){ return; }; if ((((_local7 >= __scrW)) && ((_local8 < 0)))){ return; }; if ((((_local12 > 1)) || ((_local11 < -1)))){ return; }; _local18 = __curScrFace[0][0]; _local19 = __curScrFace[1][0]; _local20 = __curScrFace[2][0]; _local14 = __curScrFace[0][1]; _local15 = __curScrFace[1][1]; _local16 = __curScrFace[2][1]; _local21 = __curScrFace[0][2]; _local22 = __curScrFace[1][2]; _local23 = __curScrFace[2][2]; _local29 = (_local15 - _local14); _local30 = (_local16 - _local14); _local31 = (_local16 - _local15); _local32 = ((_local19 - _local18) / _local29); _local33 = ((_local20 - _local18) / _local30); _local34 = ((_local20 - _local19) / _local31); _local35 = ((_local22 - _local21) / _local29); _local36 = ((_local23 - _local21) / _local30); _local37 = ((_local23 - _local22) / _local31); _local39 = _local18; _local38 = _local39; _local41 = _local21; _local40 = _local41; if (_local14 == _local16){ if (_local38 > _local20){ _local38 = _local20; _local40 = _local23; }; if (_local38 > _local19){ _local38 = _local19; _local40 = _local22; }; if (_local39 < _local18){ _local39 = _local21; _local41 = _local21; }; if (_local39 < _local19){ _local39 = _local19; _local41 = _local22; }; }; _local13 = _local14; while (_local13 >= _local16) { _local44 = (__scrH2 - _local13); if (_local44 >= __scrH){ break; }; if (_local13 == _local16){ _local39 = _local20; _local41 = _local23; }; if (_local38 > _local39){ _local27 = _local39; _local28 = _local38; _local25 = _local41; _local26 = _local40; _local45 = (_local28 - _local27); } else { _local27 = _local38; _local28 = _local39; _local25 = _local40; _local26 = _local41; _local45 = (_local28 - _local27); }; _local42 = ((_local26 - _local25) / _local45); _local17 = _local27; _local24 = _local25; while ((((_local17 <= _local28)) && ((_local44 >= 0)))) { _local43 = (__scrW2 + _local17); if (_local43 >= __scrW){ break; }; if (_local43 < 0){ } else { if ((((((((_local42 > 0)) && ((_local24 > _local26)))) || ((((_local42 <= 0)) && ((_local24 < _local26)))))) || (isNaN(_local24)))){ _local24 = _local26; }; _local46 = ((_local43 * __scrH) + _local44); if ((((_local24 < -1)) || ((_local24 > 1)))){ } else { if (_local24 >= __zBuffer[_local46]){ } else { __zBuffer[_local46] = _local24; calculatePixel(_arg1, _local43, _local44, _local17, _local13, _local24); }; }; }; _local17++; _local24 = (_local24 + _local42); }; _local39 = (_local39 - _local33); _local41 = (_local41 - _local36); if (_local13 > _local15){ _local38 = (_local38 - _local32); _local40 = (_local40 - _local35); } else { if (_local13 == _local15){ _local38 = (_local19 - _local34); _local40 = (_local22 - _local37); } else { _local38 = (_local38 - _local34); _local40 = (_local40 - _local37); }; }; _local13--; }; } public function removeMaterial(_arg1:Material3D){ if (!_arg1){ return; }; removeMaterialByName(_arg1.name); } public function get groups():Array{ return (_groups.concat()); } private function objLoaded(_arg1:Event):void{ var _local2:URLLoader; _loaded = true; _local2 = (_arg1.currentTarget as URLLoader); _local2.removeEventListener(Event.COMPLETE, objLoaded); _local2.removeEventListener(IOErrorEvent.IO_ERROR, objIOError); _local2.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, objSecurityError); Model3DEditor.readOBJ(_local2.data, this); if (!_pendingMaterials){ _lastObjFileName = ""; }; dispatchEvent(new Event("complete")); } public function loadMTL(_arg1:String){ var _local2:URLLoader; var _local3:String; _loaded = false; _pendingMaterials = true; _local3 = ""; if (((_lastObjFileName) && (_lastObjFileName.length))){ _local3 = _lastObjFileName.slice(0, (_lastObjFileName.lastIndexOf("/") + 1)); }; _local2 = new URLLoader(); _local2.addEventListener(Event.COMPLETE, mtlLoaded); _local2.addEventListener(IOErrorEvent.IO_ERROR, objIOError); _local2.addEventListener(SecurityErrorEvent.SECURITY_ERROR, objSecurityError); _local2.load(new URLRequest((_local3 + _arg1))); } public function get points():Array{ return (_points); } public function updateModel():void{ var _local1:int; var _local2:int; var _local3:int; _local2 = _points.length; _local3 = _faces.length; _local1 = 0; while (_local1 < _local2) { if (!_pointGroups[_local1]){ _pointGroups[_local1] = []; }; _facesPerPoint[_local1] = []; _local1++; }; _local1 = 0; while (_local1 < _local3) { if (!_faces[_local1]){ faces.splice(_local1, 1); _local3--; _local1--; } else { if (!_faceGroups[_local1]){ _faceGroups[_local1] = []; }; Model3DEditor.initializeFace(_faces[_local1]); _facesPerPoint[_faces[_local1][0]].push(_local1); _facesPerPoint[_faces[_local1][1]].push(_local1); _facesPerPoint[_faces[_local1][2]].push(_local1); }; _local1++; }; computeLocalNormals(); } public function addMaterial(_arg1:Material3D):void{ var _local2:String; _local2 = _arg1.name; if (!_materials[_local2]){ _materialNames.push(_local2); }; _materials[_local2] = _arg1; } public function removePointFromGroup(_arg1:String, _arg2:int):void{ var _local3:Array; var _local4:int; var _local5:int; if (((!(_arg1)) || (!(_arg1.length)))){ return; }; if ((((_arg2 < 0)) || ((_arg2 >= _points.length)))){ return; }; _local3 = _pointGroups[_arg2]; _local4 = _local3.length; _local5 = 0; while (_local5 < _local4) { if (_local3[_local5] == _arg1){ _local3.splice(_local5, 1); return; }; _local5++; }; } public function updateMatrix():void{ _matrix = Algebra.matrixProduct(Algebra.identity(4), Algebra.scale(_scale[0], _scale[1], _scale[2])); _matrix = Algebra.matrixProduct(_matrix, Algebra.rotateY(_rotation[1])); _matrix = Algebra.matrixProduct(_matrix, Algebra.rotateX(_rotation[0])); _matrix = Algebra.matrixProduct(_matrix, Algebra.rotateZ(_rotation[2])); _matrix = Algebra.matrixProduct(_matrix, Algebra.translate(_position[0], _position[1], _position[2])); computeGlobalPoints(); } private function objSecurityError(_arg1:SecurityErrorEvent):void{ var _local2:URLLoader; _local2 = (_arg1.currentTarget as URLLoader); _local2.removeEventListener(Event.COMPLETE, objLoaded); _local2.removeEventListener(IOErrorEvent.IO_ERROR, objIOError); _local2.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, objSecurityError); _pendingMaterials = false; _loaded = true; _lastObjFileName = ""; dispatchEvent(_arg1); } public function setSmooth(_arg1:Boolean=true):void{ var _local2:int; var _local3:int; _local2 = _faces.length; _local3 = 0; while (_local3 < _local2) { _faces[_local3].smooth = _arg1; _local3++; }; } private function computePointNormal(_arg1:Array, _arg2:int, _arg3:Array):void{ var _local4:int; var _local5:Number; var _local6:Array; var _local7:int; var _local8:Array; _local6 = [0, 0, 0]; _local7 = _facesPerPoint[_arg2].length; _local4 = 0; while (_local4 < _local7) { _local8 = _arg3[_facesPerPoint[_arg2][_local4]]; if (!_local8){ _local8 = (_arg3[_arg3[_facesPerPoint[_arg2][_local4]]] = []); }; _local6[0] = (_local6[0] + _local8[0]); _local6[1] = (_local6[1] + _local8[1]); _local6[2] = (_local6[2] + _local8[2]); _local4++; }; Algebra.normalize(_local6); _arg1[_arg2] = _local6; } } }//package pixels3d
Section 7
//Model3DEditor (pixels3d.Model3DEditor) package pixels3d { public final class Model3DEditor { public function getEdges(_arg1:Array):Array{ var _local2:int; var _local3:Array; var _local4:Array; var _local5:Array; var _local6:Array; var _local7:int; var _local8:int; var _local9:int; _local2 = _arg1.length; _local3 = []; _local8 = 0; while (_local8 < _local2) { _local4 = _arg1[_local8]; _local5 = []; _local5[0] = ((_local4[0])<_local4[1]) ? [_local4[0], _local4[1]] : [_local4[1], _local4[0]]; _local5[1] = ((_local4[1])<_local4[2]) ? [_local4[1], _local4[2]] : [_local4[2], _local4[1]]; _local5[2] = ((_local4[2])<_local4[0]) ? [_local4[2], _local4[0]] : [_local4[0], _local4[2]]; _local6 = [false, false, false]; _local7 = _local3.length; _local9 = 0; while (_local9 < _local7) { _local6[0] = ((_local6[0]) || ((((_local3[_local9][0] == _local5[0][0])) && ((_local3[_local9][1] == _local5[0][1]))))); _local6[1] = ((_local6[1]) || ((((_local3[_local9][0] == _local5[1][0])) && ((_local3[_local9][1] == _local5[1][1]))))); _local6[2] = ((_local6[2]) || ((((_local3[_local9][0] == _local5[2][0])) && ((_local3[_local9][1] == _local5[2][1]))))); _local9++; }; if (!_local6[0]){ _local3[_local3.length] = _local5[0]; }; if (!_local6[1]){ _local3[_local3.length] = _local5[1]; }; if (!_local6[2]){ _local3[_local3.length] = _local5[2]; }; _local8++; }; return (_local3); } public static function getFaces(_arg1:Array, _arg2:Model3D):Array{ var _local3:int; var _local4:Array; var _local5:int; _local3 = _arg1.length; _local4 = []; _local5 = 0; while (_local5 < _local3) { _local4[_local4.length] = _arg2.faces[_arg1[_local5]]; _local5++; }; return (_local4); } public static function readOBJ(_arg1:String, _arg2:Model3D):void{ var _local3:int; var _local4:int; var _local5:String; var _local6:int; var _local7:Array; var _local8:Array; var _local9:Array; _local3 = 0; _local4 = _arg1.length; _local7 = [false]; _local8 = [null]; _local9 = []; _arg2.clear(); _arg2.updateModel(); while (_local3 < _local4) { _local6 = _arg1.indexOf("\n", _local3); if (_local6 == -1){ _local6 = _local4; }; _local5 = _arg1.slice(_local3, _local6); readOBJLine(_local5, _arg2, _local8, _local7, _local9); _local3 = _local4; _local3 = (_local6 + 1); }; _arg2.updateModel(); _arg2.updateMatrix(); } private static function readMTLLine(_arg1:String, _arg2:Array){ var _local3:String; var _local4:int; var _local5:int; var _local6:int; var _local7:Array; var _local8:Array; var _local9:Array; var _local10:Array; var _local11:int; var _local12:Material3D; _arg1 = removeWhiteSpace(_arg1); _local7 = _arg1.split(" "); _local11 = (_arg2.length - 1); _local12 = null; if (_local11 > -1){ _local12 = _arg2[_local11]; }; switch (_local7[0]){ case "newmtl": if (!_local7[1]){ _arg2[_arg2.length] = new Material3D(""); } else { _arg2[_arg2.length] = new Material3D(_local7[1]); }; break; case "Ka": _local12.Ka = [Number(_local7[1]), Number(_local7[2]), Number(_local7[3])]; break; case "Kd": _local12.Kd = [Number(_local7[1]), Number(_local7[2]), Number(_local7[3])]; break; case "Ks": _local12.Ks = [Number(_local7[1]), Number(_local7[2]), Number(_local7[3])]; break; case "Ns": _local12.Ns = Number(_local7[1]); break; case "Ni": _local12.Ni = Number(_local7[1]); break; case "sharpness": _local12.sharpness = Number(_local7[1]); break; case "illum": _local12.illuminationModel = int(_local7[1]); break; }; } public static function getGlobalAverage(_arg1:Model3D):Array{ var _local2:Array; var _local3:Array; var _local4:int; _arg1.updateModel(); _arg1.updateMatrix(); _local2 = [0, 0, 0]; _local3 = _arg1.globalPoints; _local4 = 0; while (_local4 < _local3.length) { _local2[0] = (_local2[0] + _local3[_local4][0]); _local2[1] = (_local2[1] + _local3[_local4][1]); _local2[2] = (_local2[2] + _local3[_local4][2]); _local4++; }; if (_local3.length){ _local2[0] = (_local2[0] / _local3.length); _local2[1] = (_local2[1] / _local3.length); _local2[2] = (_local2[2] / _local3.length); }; return (_local2); } public static function createRotational(_arg1:Array, _arg2:int, _arg3:Boolean=true, _arg4:Boolean=false){ var _local5:int; var _local6:int; var _local7:int; var _local8:int; var _local9:Model3D; var _local10:Number; var _local11:Number; var _local12:int; var _local13:int; var _local14:int; var _local15:int; var _local16:int; var _local17:Number; var _local18:int; var _local19:int; var _local20:Number; var _local21:Number; var _local22:Number; var _local23:int; var _local24:int; _local9 = new Model3D(); _local17 = ((Math.PI * 2) / _arg2); _local18 = _arg1.length; _local19 = (_local18 * _arg2); _local20 = -(Infinity); _local21 = Infinity; _local7 = 0; _local8 = 0; _local5 = 0; while (_local5 < _arg2) { _local10 = Math.cos((_local17 * _local5)); _local11 = Math.sin((_local17 * _local5)); _local6 = 0; while (_local6 < _local18) { _local20 = Math.max(_local20, _arg1[_local6][1]); _local21 = Math.min(_local21, _arg1[_local6][1]); _local16 = ((_local5 * _local18) + _local6); _local9.points[_local16] = [(_local10 * _arg1[_local6][0]), _arg1[_local6][1], (_local11 * _arg1[_local6][0]), 1]; if ((((_local6 < (_local18 - 1))) || (_arg4))){ _local12 = ((_local5 * _local18) + _local6); _local13 = ((_local5 * _local18) + ((_local6 + 1) % _local18)); _local14 = ((((_local5 * _local18) + _local18) % _local19) + _local6); _local15 = ((((_local5 * _local18) + _local18) % _local19) + ((_local6 + 1) % _local18)); var _temp1 = _local8; _local8 = (_local8 + 1); var _local25 = _temp1; _local9.faces[_local25] = [_local15, _local13, _local12]; var _temp2 = _local8; _local8 = (_local8 + 1); var _local26 = _temp2; _local9.faces[_local26] = [_local15, _local12, _local14]; }; _local6++; }; _local5++; }; _local22 = ((_local20 + _local21) * 0.5); _local23 = _local19; _local24 = (_local19 + 1); if (((_arg3) && (!(_arg4)))){ _local9.points[_local23] = [0, _arg1[0][1], 0, 1]; _local5 = 0; while (_local5 < _arg2) { var _temp3 = _local8; _local8 = (_local8 + 1); _local25 = _temp3; _local9.faces[_local25] = [(((_local5 * _local18) + _local18) % _local19), ((_local5 * _local18) % _local19), _local23]; _local5++; }; _local9.points[_local24] = [0, _arg1[(_arg1.length - 1)][1], 0, 1]; _local5 = 0; while (_local5 < _arg2) { var _temp4 = _local8; _local8 = (_local8 + 1); _local25 = _temp4; _local9.faces[_local25] = [((((_local5 * _local18) + _local18) - 1) % _local19), (((((_local5 * _local18) + _local18) + _local18) - 1) % _local19), _local24]; _local5++; }; }; _local5 = 0; while (_local5 < _local9.points.length) { _local9.points[_local5][1] = (_local9.points[_local5][1] - _local22); _local5++; }; _local9.updateModel(); _local9.updateMatrix(); return (_local9); } public static function writeMTL(_arg1:Model3D):String{ var _local2:int; var _local3:Array; var _local4:Array; var _local5:int; var _local6:Material3D; var _local7:String; _local3 = _arg1.materialNames; _local4 = _arg1.materials; _local5 = _local3.length; _local7 = ""; _local2 = 0; while (_local2 < _local5) { _local6 = _local4[_local3[_local2]]; _local7 = (_local7 + (("newmtl " + _local6.name) + "\n")); _local7 = (_local7 + (((((("Ka " + _local6.Ka[0].toFixed(4)) + " ") + _local6.Ka[1].toFixed(4)) + " ") + _local6.Ka[2].toFixed(4)) + "\n")); _local7 = (_local7 + (((((("Kd " + _local6.Kd[0].toFixed(4)) + " ") + _local6.Kd[1].toFixed(4)) + " ") + _local6.Kd[2].toFixed(4)) + "\n")); _local7 = (_local7 + (((((("Ks " + _local6.Ks[0].toFixed(4)) + " ") + _local6.Ks[1].toFixed(4)) + " ") + _local6.Ks[2].toFixed(4)) + "\n")); _local7 = (_local7 + (("Ns " + _local6.Ns) + "\n")); _local7 = (_local7 + (("sharpness " + _local6.sharpness) + "\n")); _local7 = (_local7 + (("Ni " + _local6.Ni) + "\n")); _local7 = (_local7 + "d 1.000\n"); _local7 = (_local7 + (("illum " + _local6.illuminationModel) + "\n")); _local7 = (_local7 + "\n\n"); _local2++; }; return (_local7); } public static function splitPointsByOuter(_arg1:Array, _arg2:Array, _arg3:Array):void{ var _local4:Array; var _local5:Array; var _local6:int; var _local7:int; var _local8:int; var _local9:int; var _local10:Array; var _local11:Array; var _local12:int; var _local13:Boolean; _local4 = getPoints(_arg1); _local5 = getOuterEdges(_arg1); _arg2.length = (_arg3.length = 0); _local8 = _local5.length; _local9 = 0; _local11 = [false, false]; _local6 = 0; while (_local6 < _local8) { _local10 = _local5[_local6]; _local11[0] = false; _local11[1] = false; _local9 = _arg2.length; _local7 = 0; while (_local7 < _local9) { if (_arg2[_local7] == _local10[0]){ _local11[0] = true; }; if (_arg2[_local7] == _local10[1]){ _local11[1] = true; }; _local7++; }; if (!_local11[0]){ _arg2[_arg2.length] = _local10[0]; }; if (!_local11[1]){ _arg2[_arg2.length] = _local10[1]; }; _local6++; }; _local12 = _local4.length; _local9 = _arg2.length; _local6 = 0; while (_local6 < _local12) { _local13 = false; _local7 = 0; while (_local7 < _local9) { if (_local4[_local6] == _arg2[_local7]){ _local13 = true; break; }; _local7++; }; if (!_local13){ _arg3[_arg3.length] = _local4[_local6]; }; _local6++; }; } public static function removeWhiteSpace(_arg1:String):String{ var _local2:String; var _local3:int; var _local4:Boolean; _local2 = _arg1; _local3 = 0; while (isWhiteSpace(_local2.charAt(0))) { _local2 = _local2.slice(1, _local2.length); }; _local4 = false; while (_local3 < _local2.length) { _local4 = false; while ((((_local3 < _local2.length)) && (!(isWhiteSpace(_local2.charAt(_local3)))))) { _local3++; }; while ((((_local3 < _local2.length)) && (isWhiteSpace(_local2.charAt(_local3))))) { _local4 = true; _local2 = (_local2.slice(0, _local3) + _local2.slice((_local3 + 1), _local2.length)); }; if (((_local4) && ((_local3 < _local2.length)))){ _local2 = ((_local2.slice(0, _local3) + " ") + _local2.slice(_local3, _local2.length)); }; _local3++; }; return (_local2); } public static function createMesh(_arg1:int, _arg2:int, _arg3:Number, _arg4:Number):Model3D{ var _local5:Model3D; var _local6:Number; var _local7:Number; var _local8:Number; var _local9:Number; var _local10:int; var _local11:int; var _local12:Number; var _local13:Number; var _local14:int; var _local15:int; var _local16:int; var _local17:int; var _local18:int; var _local19:int; _local5 = new Model3D(); _local6 = (-(_arg3) * 0.5); _local7 = (_arg4 * 0.5); _local8 = (_arg3 / _arg1); _local9 = (-(_arg4) / _arg2); _local14 = 0; _local15 = 0; _local10 = 0; while (_local10 <= _arg1) { _local12 = (_local6 + (_local8 * _local10)); _local11 = 0; while (_local11 <= _arg2) { _local13 = (_local7 + (_local9 * _local11)); var _temp1 = _local14; _local14 = (_local14 + 1); var _local20 = _temp1; _local5.points[_local20] = [_local12, 0, _local13, 1]; if ((((_local10 > 0)) && ((_local11 > 0)))){ _local19 = ((_local10 * (_arg2 + 1)) + _local11); _local17 = (((_local10 * (_arg2 + 1)) + _local11) - 1); _local18 = (((_local10 - 1) * (_arg2 + 1)) + _local11); _local16 = ((((_local10 - 1) * (_arg2 + 1)) + _local11) - 1); var _temp2 = _local15; _local15 = (_local15 + 1); var _local21 = _temp2; _local5.faces[_local21] = [_local19, _local18, _local17]; var _temp3 = _local15; _local15 = (_local15 + 1); var _local22 = _temp3; _local5.faces[_local22] = [_local18, _local16, _local17]; }; _local11++; }; _local10++; }; _local5.updateModel(); _local5.updateMatrix(); return (_local5); } public static function getFacesByLine(_arg1:Array, _arg2:int, _arg3:int):Array{ var _local4:int; var _local5:int; var _local6:Array; var _local7:Array; var _local8:int; _local5 = _arg1.length; _local7 = []; _local4 = 0; while (_local4 < _local5) { _local8 = 0; _local6 = _arg1[_local4]; if (_local6[0] == _arg2){ _local8++; }; if (_local6[1] == _arg2){ _local8++; }; if (_local6[2] == _arg2){ _local8++; }; if (_local6[0] == _arg3){ _local8++; }; if (_local6[1] == _arg3){ _local8++; }; if (_local6[2] == _arg3){ _local8++; }; if (_local8 == 2){ _local7[_local7.length] = _local4; }; _local4++; }; return (_local7); } public static function splitLines(_arg1:Model3D, _arg2:Array){ var _local3:Array; var _local4:int; var _local5:int; var _local6:Array; var _local7:Array; _local3 = getSharedLines(_arg1, _arg2); _local5 = _local3.length; _local4 = 0; while (_local4 < _local5) { _local6 = _local3[_local4]; _local7 = getFacesByLine(_arg1.faces, _local6[0], _local6[1]); splitLine(_arg1, _local7[0], _local7[1]); _local4++; }; } public static function initializeFace(_arg1:Array):void{ if (!_arg1.material){ _arg1.material = ""; }; if (!_arg1.smooth){ _arg1.smooth = false; }; if ((((_arg1.visible == undefined)) || ((_arg1.visible == null)))){ _arg1.visible = true; }; } public static function combineModels(_arg1:Model3D, _arg2:Model3D):Model3D{ var _local3:int; var _local4:int; var _local5:Model3D; var _local6:int; var _local7:int; var _local8:int; var _local9:int; var _local10:int; var _local11:int; var _local12:int; var _local13:int; var _local14:Array; var _local15:int; var _local16:Array; var _local17:int; _local5 = new Model3D(); _local6 = _arg1.points.length; _local7 = _arg1.faces.length; _local8 = _arg1.materialNames.length; _local9 = _arg1.groups.length; _local10 = _arg2.points.length; _local11 = _arg2.faces.length; _local12 = _arg2.materialNames.length; _local13 = _arg2.groups.length; _arg1.updateMatrix(); _arg2.updateMatrix(); _local5.visible = _arg1.visible; _local5.wireframe = _arg1.wireframe; _local5.cull = _arg1.cull; _arg1.materials[""] = _local5.materials[""].clone(); _local3 = 0; while (_local3 < _local9) { _local5.addGroup(_arg1.groups[_local3]); _local3++; }; _local3 = 0; while (_local3 < _local8) { _local5.addMaterial(_arg1.materials[_arg1.materialNames[_local3]]); _local3++; }; _local3 = 0; while (_local3 < _local6) { _local5.points[_local3] = Algebra.transformPoint(_arg1.points[_local3], _arg1.matrix); _local14 = _arg1.getGroupsFromPoint(_local3); _local15 = _local14.length; _local4 = 0; while (_local4 < _local15) { _local5.addPointToGroup(_local14[_local4], _local3); _local4++; }; _local3++; }; _local3 = 0; while (_local3 < _local7) { _local5.faces[_local3] = copyFace(_arg1.faces[_local3]); _local16 = _arg1.getGroupsFromFace(_local3); _local17 = _local16.length; _local4 = 0; while (_local4 < _local15) { _local5.addFaceToGroup(_local16[_local4], _local3); _local4++; }; _local3++; }; _local3 = 0; while (_local3 < _local13) { _local5.addGroup(_arg2.groups[_local3]); _local3++; }; _local3 = 0; while (_local3 < _local12) { if (_arg1.materials[_arg2.materialNames[_local3]] != null){ } else { _local5.addMaterial(_arg2.materials[_arg2.materialNames[_local3]]); }; _local3++; }; _local3 = 0; while (_local3 < _local10) { _local5.points[(_local6 + _local3)] = Algebra.transformPoint(_arg2.points[_local3], _arg2.matrix); _local14 = _arg2.getGroupsFromPoint(_local3); _local15 = _local14.length; _local4 = 0; while (_local4 < _local15) { _local5.addPointToGroup(_local14[_local4], (_local6 + _local3)); _local4++; }; _local3++; }; _local3 = 0; while (_local3 < _local11) { _local5.faces[(_local7 + _local3)] = copyFace(_arg2.faces[_local3]); _local5.faces[(_local7 + _local3)][0] = (_local5.faces[(_local7 + _local3)][0] + _local6); _local5.faces[(_local7 + _local3)][1] = (_local5.faces[(_local7 + _local3)][1] + _local6); _local5.faces[(_local7 + _local3)][2] = (_local5.faces[(_local7 + _local3)][2] + _local6); _local16 = _arg2.getGroupsFromFace(_local3); _local17 = _local16.length; _local4 = 0; while (_local4 < _local15) { _local5.addFaceToGroup(_local16[_local4], (_local3 + _local7)); _local4++; }; _local3++; }; _local5.updateModel(); _local5.updateMatrix(); return (_local5); } public static function extrudeFaces(_arg1:Model3D, _arg2:Array, _arg3:Number){ var _local4:int; var _local5:int; var _local6:int; var _local7:int; var _local8:Array; var _local9:Array; var _local10:Array; var _local11:int; var _local12:Array; var _local13:int; var _local14:Array; var _local15:Array; var _local16:Array; var _local17:int; var _local18:int; var _local19:int; var _local20:int; var _local21:int; var _local22:int; var _local23:int; var _local24:int; var _local25:Array; var _local26:Array; var _local27:Array; var _local28:int; var _local29:int; var _local30:int; var _local31:Boolean; var _local32:Boolean; var _local33:Boolean; var _local34:Array; var _local35:int; var _local36:Array; var _local37:Array; var _local38:Array; _local6 = _arg1.points.length; _local7 = _arg2.length; _arg1.updateModel(); _local8 = new Array(_local7); _local4 = 0; while (_local4 < _local7) { _local8[_local4] = _arg1.faces[_arg2[_local4]]; _local4++; }; _local9 = []; _local10 = []; splitPointsByOuter(_local8, _local10, _local9); _local11 = _local10.length; _local12 = new Array(_local11); _local15 = getNormals(_local10, _arg2, _local8, _arg1.faceNormals); _local4 = 0; while (_local4 < _local11) { _local13 = _local10[_local4]; _local14 = _arg1.points[_local13]; _local16 = _local15[_local4]; _local12[_local4] = (_local6 + _local4); _arg1.points[_local12[_local4]] = [(_local14[0] + (_local16[0] * _arg3)), (_local14[1] + (_local16[1] * _arg3)), (_local14[2] + (_local16[2] * _arg3)), 1]; _local4++; }; _local17 = _local9.length; _local4 = 0; while (_local4 < _local17) { _local13 = _local9[_local4]; _local14 = _arg1.points[_local13]; _local16 = _arg1.pointNormals[_local13]; _local14[0] = (_local14[0] + (_local16[0] * _arg3)); _local14[1] = (_local14[1] + (_local16[1] * _arg3)); _local14[2] = (_local14[2] + (_local16[2] * _arg3)); _local4++; }; _local34 = getOuterEdges(_local8); _local35 = _local34.length; _local4 = 0; while (_local4 < _local7) { _local25 = _local8[_local4]; _local18 = _local25[0]; _local19 = _local25[1]; _local20 = _local25[2]; _local30 = -1; _local29 = _local30; _local28 = _local29; _local33 = false; _local32 = _local33; _local31 = _local32; _local5 = 0; while (_local5 < _local11) { if (_local10[_local5] == _local18){ _local28 = _local5; }; if (_local10[_local5] == _local19){ _local29 = _local5; }; if (_local10[_local5] == _local20){ _local30 = _local5; }; _local5++; }; _local5 = 0; while (_local5 < _local35) { if ((((((_local34[_local5][0] == _local18)) && ((_local34[_local5][1] == _local19)))) || ((((_local34[_local5][0] == _local19)) && ((_local34[_local5][1] == _local18)))))){ _local31 = true; }; if ((((((_local34[_local5][0] == _local19)) && ((_local34[_local5][1] == _local20)))) || ((((_local34[_local5][0] == _local20)) && ((_local34[_local5][1] == _local19)))))){ _local32 = true; }; if ((((((_local34[_local5][0] == _local20)) && ((_local34[_local5][1] == _local18)))) || ((((_local34[_local5][0] == _local18)) && ((_local34[_local5][1] == _local20)))))){ _local33 = true; }; _local5++; }; if (((((_local31) && ((_local28 > -1)))) && ((_local29 > -1)))){ _local23 = _local10[_local28]; _local24 = _local10[_local29]; _local21 = _local12[_local28]; _local22 = _local12[_local29]; _local26 = copyFace(_local25); _local26[0] = _local23; _local26[1] = _local24; _local26[2] = _local22; _local27 = copyFace(_local25); _local27[0] = _local23; _local27[1] = _local22; _local27[2] = _local21; _arg1.faces[_arg1.faces.length] = _local26; _arg1.faces[_arg1.faces.length] = _local27; }; if (((((_local32) && ((_local29 > -1)))) && ((_local30 > -1)))){ _local23 = _local10[_local29]; _local24 = _local10[_local30]; _local21 = _local12[_local29]; _local22 = _local12[_local30]; _local26 = copyFace(_local25); _local26[0] = _local23; _local26[1] = _local24; _local26[2] = _local22; _local27 = copyFace(_local25); _local27[0] = _local23; _local27[1] = _local22; _local27[2] = _local21; _arg1.faces[_arg1.faces.length] = _local26; _arg1.faces[_arg1.faces.length] = _local27; }; if (((((_local33) && ((_local30 > -1)))) && ((_local28 > -1)))){ _local23 = _local10[_local30]; _local24 = _local10[_local28]; _local21 = _local12[_local30]; _local22 = _local12[_local28]; _local26 = copyFace(_local25); _local26[0] = _local23; _local26[1] = _local24; _local26[2] = _local22; _local27 = copyFace(_local25); _local27[0] = _local23; _local27[1] = _local22; _local27[2] = _local21; _arg1.faces[_arg1.faces.length] = _local26; _arg1.faces[_arg1.faces.length] = _local27; }; _local4++; }; _local4 = 0; while (_local4 < _local7) { _local25 = _local8[_local4]; _local28 = isInArray(_local25[0], _local10); _local29 = isInArray(_local25[1], _local10); _local30 = isInArray(_local25[2], _local10); if (_local28 > -1){ _local25[0] = _local12[_local28]; }; if (_local29 > -1){ _local25[1] = _local12[_local29]; }; if (_local30 > -1){ _local25[2] = _local12[_local30]; }; _local4++; }; _arg1.updateModel(); } private static function readOBJLine(_arg1:String, _arg2:Model3D, _arg3:Array, _arg4:Array, _arg5:Array):void{ var _local6:String; var _local7:int; var _local8:int; var _local9:int; var _local10:Array; var _local11:Array; var _local12:Array; var _local13:Array; var _local14:int; var _local15:int; _arg1 = removeWhiteSpace(_arg1); _local10 = _arg1.split(" "); _local15 = _arg5.length; switch (_local10[0]){ case "mtllib": _arg2.loadMTL(_local10[1]); break; case "#position": _arg2.position[0] = Number(_local10[1]); _arg2.position[1] = Number(_local10[2]); _arg2.position[2] = Number(_local10[3]); break; case "#scale": _arg2.scale[0] = Number(_local10[1]); _arg2.scale[1] = Number(_local10[2]); _arg2.scale[2] = Number(_local10[3]); break; case "#rotation": _arg2.rotation[0] = Number(_local10[1]); _arg2.rotation[1] = Number(_local10[2]); _arg2.rotation[2] = Number(_local10[3]); break; case "g": _arg5.length = 0; if (_local10.length > 1){ _local14 = 1; while (_local14 < _local10.length) { _arg5.push(_local10[_local14]); _local14++; }; }; break; case "usemtl": if ((((_local10.length < 2)) || (!(_local10[1].length)))){ _arg3[0] = null; } else { _arg3[0] = _local10[1]; }; break; case "v": _arg2.points[_arg2.points.length] = [Number(_local10[1]), Number(_local10[2]), Number(_local10[3]), 1]; _local14 = 0; while (_local14 < _local15) { _arg2.addPointToGroup(_arg5[_local14], (_arg2.points.length - 1)); _local14++; }; break; case "f": _local11 = _local10[1].split("/"); _local12 = _local10[2].split("/"); _local13 = _local10[3].split("/"); _arg2.faces[_arg2.faces.length] = [(int(_local11[0]) - 1), (int(_local12[0]) - 1), (int(_local13[0]) - 1)]; initializeFace(_arg2.faces[(_arg2.faces.length - 1)]); _arg2.faces[(_arg2.faces.length - 1)].material = _arg3[0]; _arg2.faces[(_arg2.faces.length - 1)].smooth = _arg4[0]; _arg2.faces[(_arg2.faces.length - 1)].visible = true; _local14 = 0; while (_local14 < _local15) { _arg2.addFaceToGroup(_arg5[_local14], (_arg2.faces.length - 1)); _local14++; }; break; case "s": _arg4[0] = Boolean(int(_local10[1])); break; case "d": break; case "o": _arg2.name = _local10[1]; break; }; } public static function splitFace(_arg1:Model3D, _arg2:int){ var _local3:Array; var _local4:Number; var _local5:Array; var _local6:Array; var _local7:int; var _local8:int; var _local9:Array; _local3 = _arg1.faces[_arg2]; _local4 = (1 / 3); _local5 = [_arg1.points[_local3[0]], _arg1.points[_local3[1]], _arg1.points[_local3[2]]]; _local6 = [(_local4 * ((_local5[0][0] + _local5[1][0]) + _local5[2][0])), (_local4 * ((_local5[0][1] + _local5[1][1]) + _local5[2][1])), (_local4 * ((_local5[0][2] + _local5[1][2]) + _local5[2][2])), 1]; _local7 = _arg1.points.length; _local8 = _arg1.faces.length; _arg1.points[_local7] = _local6; _local9 = copyFace(_local3); _local9[0] = _local3[0]; _local9[1] = _local3[1]; _local9[2] = _local7; var _temp1 = _local8; _local8 = (_local8 + 1); var _local10 = _temp1; _arg1.faces[_local10] = _local9; _local9 = copyFace(_local3); _local9[0] = _local3[1]; _local9[1] = _local3[2]; _local9[2] = _local7; var _temp2 = _local8; _local8 = (_local8 + 1); var _local11 = _temp2; _arg1.faces[_local11] = _local9; _local9 = copyFace(_local3); _local9[0] = _local3[2]; _local9[1] = _local3[0]; _local9[2] = _local7; var _temp3 = _local8; _local8 = (_local8 + 1); var _local12 = _temp3; _arg1.faces[_local12] = _local9; _arg1.deleteFace(_arg2); _arg1.updateModel(); } public static function createCube():Model3D{ var _local1:int; var _local2:int; var _local3:int; var _local4:Model3D; var _local5:*; var _local6:*; var _local7:*; var _local8:*; var _local9:int; _local1 = 0; _local4 = new Model3D(); var _temp1 = _local1; _local1 = (_local1 + 1); var _local10 = _temp1; _local4.points[_local10] = [0.5, -0.5, 0.5, 1]; var _temp2 = _local1; _local1 = (_local1 + 1); var _local11 = _temp2; _local4.points[_local11] = [0.5, 0.5, 0.5, 1]; var _temp3 = _local1; _local1 = (_local1 + 1); var _local12 = _temp3; _local4.points[_local12] = [-0.5, -0.5, 0.5, 1]; var _temp4 = _local1; _local1 = (_local1 + 1); var _local13 = _temp4; _local4.points[_local13] = [-0.5, 0.5, 0.5, 1]; var _temp5 = _local1; _local1 = (_local1 + 1); var _local14 = _temp5; _local4.points[_local14] = [-0.5, -0.5, -0.5, 1]; var _temp6 = _local1; _local1 = (_local1 + 1); var _local15 = _temp6; _local4.points[_local15] = [-0.5, 0.5, -0.5, 1]; var _temp7 = _local1; _local1 = (_local1 + 1); var _local16 = _temp7; _local4.points[_local16] = [0.5, -0.5, -0.5, 1]; var _temp8 = _local1; _local1 = (_local1 + 1); var _local17 = _temp8; _local4.points[_local17] = [0.5, 0.5, -0.5, 1]; _local3 = 0; _local2 = 0; while (_local2 < (4 * 2)) { _local5 = _local2; _local6 = ((_local2 + 1) % _local1); _local8 = ((_local2 + 2) % _local1); _local9 = ((_local2 + 3) % _local1); var _temp9 = _local3; _local3 = (_local3 + 1); var _local18 = _temp9; _local4.faces[_local18] = [_local8, _local5, _local6]; var _temp10 = _local3; _local3 = (_local3 + 1); var _local19 = _temp10; _local4.faces[_local19] = [_local8, _local6, _local9]; _local2 = (_local2 + 2); }; var _temp11 = _local3; _local3 = (_local3 + 1); _local18 = _temp11; _local4.faces[_local18] = [3, 1, 7]; var _temp12 = _local3; _local3 = (_local3 + 1); _local19 = _temp12; _local4.faces[_local19] = [3, 7, 5]; var _temp13 = _local3; _local3 = (_local3 + 1); var _local20 = _temp13; _local4.faces[_local20] = [0, 4, 6]; var _temp14 = _local3; _local3 = (_local3 + 1); var _local21 = _temp14; _local4.faces[_local21] = [0, 2, 4]; _local4.updateModel(); _local4.updateMatrix(); _local4.setGlobalAsLocal(); _local4.scale = [1, 1, 1]; return (_local4); } public static function createTorus(_arg1:int, _arg2:int, _arg3:Number=1, _arg4:Number=1){ var _local5:Array; var _local6:Number; var _local7:int; _local5 = new Array(_arg1); _local6 = ((Math.PI * 2) / _arg1); _local7 = 0; while (_local7 <= _arg1) { _local5[_local7] = [(_arg4 + (Math.cos(((_local6 * _local7) - (Math.PI * 0.5))) * _arg3)), (-(Math.sin(((_local6 * _local7) - (Math.PI * 0.5)))) * _arg3)]; _local7++; }; return (createToroid(_local5, _arg2)); } public static function invertFaceNormal(_arg1:Array){ var _local2:int; _local2 = _arg1[0]; _arg1[0] = _arg1[1]; _arg1[1] = _local2; } public static function readMTL(_arg1:String, _arg2:Model3D):void{ var _local3:int; var _local4:int; var _local5:String; var _local6:int; var _local7:Array; var _local8:int; var _local9:int; _local3 = 0; _local4 = _arg1.length; _local7 = []; while (_local3 < _local4) { _local6 = _arg1.indexOf("\n", _local3); if (_local6 == -1){ _local6 = _local4; }; _local5 = _arg1.slice(_local3, _local6); readMTLLine(_local5, _local7); _local3 = _local4; _local3 = (_local6 + 1); }; _local8 = _local7.length; _local9 = 0; while (_local9 < _local8) { _arg2.addMaterial(_local7[_local9]); _local9++; }; } public static function joinTrianglesByPoint(_arg1:Model3D, _arg2:int):Boolean{ var _local3:Array; var _local4:int; var _local5:Array; var _local6:int; _local3 = []; _local5 = _arg1.faces; _local6 = _local5.length; _local4 = 0; while (_local4 < _local6) { if ((((((_local5[_local4][0] == _arg2)) || ((_local5[_local4][1] == _arg2)))) || ((_local5[_local4][2] == _arg2)))){ _local3[_local3.length] = _local4; }; _local4++; }; if (_local3.length != 3){ return (false); }; return (joinTriangles(_arg1, _local3[0], _local3[1], _local3[2])); } public static function getOuterEdges(_arg1:Array):Array{ var _local2:int; var _local3:Array; var _local4:Array; var _local5:Array; var _local6:Array; var _local7:Array; var _local8:int; var _local9:int; var _local10:int; var _local11:int; _local2 = _arg1.length; _local3 = []; _local6 = [false, false, false]; _local7 = []; _local9 = 0; while (_local9 < _local2) { _local4 = _arg1[_local9]; _local5 = []; _local5[0] = ((_local4[0])<_local4[1]) ? [_local4[0], _local4[1]] : [_local4[1], _local4[0]]; _local5[1] = ((_local4[1])<_local4[2]) ? [_local4[1], _local4[2]] : [_local4[2], _local4[1]]; _local5[2] = ((_local4[2])<_local4[0]) ? [_local4[2], _local4[0]] : [_local4[0], _local4[2]]; _local6[0] = false; _local6[1] = false; _local6[2] = false; _local8 = _local3.length; _local11 = 0; while (_local11 < _local8) { if ((((_local3[_local11][0] == _local5[0][0])) && ((_local3[_local11][1] == _local5[0][1])))){ _local6[0] = true; _local7[_local11] = true; }; if ((((_local3[_local11][0] == _local5[1][0])) && ((_local3[_local11][1] == _local5[1][1])))){ _local6[1] = true; _local7[_local11] = true; }; if ((((_local3[_local11][0] == _local5[2][0])) && ((_local3[_local11][1] == _local5[2][1])))){ _local6[2] = true; _local7[_local11] = true; }; _local11++; }; if (!_local6[0]){ _local3[_local3.length] = _local5[0]; _local7[(_local3.length - 1)] = false; }; if (!_local6[1]){ _local3[_local3.length] = _local5[1]; _local7[(_local3.length - 1)] = false; }; if (!_local6[2]){ _local3[_local3.length] = _local5[2]; _local7[(_local3.length - 1)] = false; }; _local9++; }; _local10 = (_local7.length - 1); _local9 = _local10; while (_local9 >= 0) { if (_local7[_local9]){ _local3.splice(_local9, 1); }; _local9--; }; return (_local3); } public static function joinTriangles(_arg1:Model3D, _arg2:int, _arg3:int, _arg4:int):Boolean{ var _local5:Array; var _local6:int; var _local7:int; var _local8:int; var _local9:int; var _local10:Boolean; var _local11:int; var _local12:Array; var _local13:Array; _local5 = [_arg1.faces[_arg2], _arg1.faces[_arg3], _arg1.faces[_arg4]]; if (((((!(_local5[0])) || (!(_local5[1])))) || (!(_local5[2])))){ trace("One of the triangles does not exist"); return (false); }; _local6 = 0; _local10 = false; _local12 = []; _local7 = 0; while (_local7 < 3) { if (isInArray(_local5[0][_local7], _local12) < 0){ _local12[_local12.length] = _local5[0][_local7]; }; if (isInArray(_local5[1][_local7], _local12) < 0){ _local12[_local12.length] = _local5[1][_local7]; }; if (isInArray(_local5[2][_local7], _local12) < 0){ _local12[_local12.length] = _local5[2][_local7]; }; _local7++; }; if (_local12.length != 4){ trace("Not 4 points:", _local12); return (false); }; _local7 = 0; while (_local7 < 3) { _local8 = 0; while (_local8 < 3) { _local9 = 0; while (_local9 < 3) { if ((((_local5[0][_local7] == _local5[1][_local8])) && ((_local5[1][_local8] == _local5[2][_local9])))){ _local6 = _local5[0][_local7]; _local11 = _local7; _local10 = true; break; }; _local9++; }; if (_local10){ break; }; _local8++; }; if (_local10){ break; }; _local7++; }; if (!_local10){ trace(((((("No point in common.\n F1:" + _local5[0]) + "\n F2:") + _local5[1]) + "\n F3:") + _local5[2])); return (false); }; _local13 = []; _local13[0] = _local5[0][((_local11 + 1) % 3)]; _local13[1] = _local5[0][((_local11 + 2) % 3)]; _local7 = 0; while (_local7 < 3) { if (_local5[1][_local7] != _local5[0][_local7]){ _local13[2] = _local5[1][_local7]; }; _local7++; }; _local13.material = _local5[0].material; _local13.smooth = _local5[0].smooth; _local13.visible = true; _arg1.faces[_arg1.faces.length] = _local13; _arg1.deleteFace(_arg2); if (_arg3 > _arg2){ _arg1.deleteFace((_arg3 - 1)); } else { _arg1.deleteFace(_arg3); }; if (_arg4 > _arg3){ if (_arg4 > _arg2){ _arg1.deleteFace((_arg4 - 2)); } else { _arg1.deleteFace((_arg4 - 1)); }; } else { if (_arg4 > _arg2){ _arg1.deleteFace((_arg4 - 1)); } else { _arg1.deleteFace(_arg4); }; }; _arg1.deletePoint(_local6); return (true); } public static function insertUniqueOrdered(_arg1:Array, _arg2:int){ var _local3:int; var _local4:int; _local3 = _arg1.length; _local4 = 0; while (_local4 < _local3) { if (_arg1[_local4] == _arg2){ return; }; if (_arg1[_local4] > _arg2){ break; }; _local4++; }; _arg1.splice(_local4, 0, _arg2); } public static function fusePoints(_arg1:Model3D, _arg2:Array){ var _local3:int; var _local4:int; var _local5:Array; var _local6:Number; var _local7:Array; var _local8:int; var _local9:Array; var _local10:Array; var _local11:Array; var _local12:int; var _local13:int; var _local14:int; var _local15:int; var _local16:int; _local3 = _arg2.length; if (_local3 < 2){ return; }; _local4 = _arg2[0]; _local5 = [0, 0, 0]; _local13 = 0; while (_local13 < _local3) { _local5[0] = (_local5[0] + _arg1.points[_arg2[_local13]][0]); _local5[1] = (_local5[1] + _arg1.points[_arg2[_local13]][1]); _local5[2] = (_local5[2] + _arg1.points[_arg2[_local13]][2]); _local13++; }; _local6 = (1 / _local3); _local5[0] = (_local5[0] * _local6); _local5[1] = (_local5[1] * _local6); _local5[2] = (_local5[2] * _local6); _arg1.points[_local4][0] = _local5[0]; _arg1.points[_local4][1] = _local5[1]; _arg1.points[_local4][2] = _local5[2]; _local7 = _arg1.faces; _local8 = _local7.length; _local9 = []; _local13 = 1; while (_local13 < _local3) { _local12 = _arg2[_local13]; _local14 = 0; while (_local14 < _local8) { _local10 = _local7[_local14]; if (_local10[0] == _local12){ _local10[0] = _local4; }; if (_local10[1] == _local12){ _local10[1] = _local4; }; if (_local10[2] == _local12){ _local10[2] = _local4; }; _local14++; }; _local13++; }; _local15 = 0; _local13 = 0; while (_local13 < (_local7.length - 1)) { _local10 = _local7[_local13]; if ((((((((_local10[0] == _local10[1])) || ((_local10[0] == _local10[2])))) || ((_local10[1] == _local10[2])))) && ((isInArray(_local13, _local9) < 0)))){ _local9[_local9.length] = _local13; }; _local13++; }; _local16 = _local9.length; _local13 = (_local16 - 1); while (_local13 >= 0) { _arg1.deleteFace(_local9[_local13]); _local14 = 0; while (_local14 < _local13) { if (_local9[_local14] > _local9[_local13]){ var _local17 = _local9; var _local18 = _local14; var _local19 = (_local17[_local18] - 1); _local17[_local18] = _local19; }; _local14++; }; _local13--; }; _local13 = 1; while (_local13 < _local3) { _arg1.deletePoint(_arg2[_local13]); _local14 = (_local13 + 1); while (_local14 < _local3) { if (_arg2[_local14] > _arg2[_local13]){ _local17 = _arg2; _local18 = _local14; _local19 = (_local17[_local18] - 1); _local17[_local18] = _local19; }; _local14++; }; _local13++; }; _arg1.clean(); _arg1.updateModel(); } public static function extrude(_arg1:Array, _arg2:int, _arg3:Number=100, _arg4:Boolean=false):Model3D{ var _local5:Model3D; var _local6:int; var _local7:int; var _local8:int; var _local9:int; var _local10:int; var _local11:int; var _local12:int; var _local13:int; var _local14:Number; var _local15:Number; var _local16:Number; var _local17:Number; var _local18:int; var _local19:Number; var _local20:Number; var _local21:Number; var _local22:Number; var _local23:int; var _local24:int; _local5 = new Model3D(); _local6 = _arg1.length; _local7 = 0; _local8 = 0; _local14 = Infinity; _local15 = Infinity; _local16 = -(Infinity); _local17 = -(Infinity); _arg2++; while (_local18 < _arg2) { _local9 = (_local18 * _local6); _local10 = ((_local18 + 1) * _local6); _local24 = 0; while (_local24 < _local6) { _local14 = Math.min(_arg1[_local24][0], _local14); _local16 = Math.max(_arg1[_local24][0], _local16); _local15 = Math.min(_arg1[_local24][1], _local15); _local17 = Math.max(_arg1[_local24][1], _local17); _local11 = _local24; _local12 = ((_local24 + 1) % _local6); _local5.points[(_local9 + _local11)] = [_arg1[_local24][0], _arg1[_local24][1], Number((_local18 * _arg3)), 1]; if (_local18 < (_arg2 - 1)){ var _temp1 = _local8; _local8 = (_local8 + 1); var _local25 = _temp1; _local5.faces[_local25] = [(_local9 + _local11), (_local10 + _local11), (_local9 + _local12)]; var _temp2 = _local8; _local8 = (_local8 + 1); var _local26 = _temp2; _local5.faces[_local26] = [(_local9 + _local12), (_local10 + _local11), (_local10 + _local12)]; }; _local24++; }; _local18++; }; _local19 = ((_local16 + _local14) * 0.5); _local20 = ((_local17 + _local15) * 0.5); _local21 = (_arg2 * _local6); _local22 = ((_arg2 * _arg3) * 0.5); _local18 = 0; while (_local18 < (_arg2 * _local6)) { _local5.points[_local18][0] = (_local5.points[_local18][0] - _local19); _local5.points[_local18][1] = (_local5.points[_local18][1] - _local20); _local18++; }; if (_arg4){ _local5.points[_local21] = [0, 0, 0, 1]; _local5.points[(_local21 + 1)] = [0, 0, ((_arg2 - 1) * _arg3), 1]; _local18 = 0; while (_local18 < _local6) { var _temp3 = _local8; _local8 = (_local8 + 1); _local25 = _temp3; _local5.faces[_local25] = [_local18, ((_local18 + 1) % _local6), _local21]; var _temp4 = _local8; _local8 = (_local8 + 1); _local26 = _temp4; _local5.faces[_local26] = [(((_arg2 - 1) * _local6) + ((_local18 + 1) % _local6)), (((_arg2 - 1) * _local6) + _local18), (_local21 + 1)]; _local18++; }; }; _local23 = _local5.points.length; _local18 = 0; while (_local18 < _local23) { _local5.points[_local18][2] = (_local5.points[_local18][2] - _local22); _local18++; }; _local5.scale = [1, 1, 1]; _local5.position = [0, 0, 0]; _local5.updateModel(); _local5.updateMatrix(); return (_local5); } public static function writeOBJ(_arg1:Model3D, _arg2:String=null, _arg3:Boolean=true):String{ var _local4:String; var _local5:int; var _local6:int; var _local7:int; var _local8:Array; var _local9:int; var _local10:Array; var _local11:Array; var _local12:Boolean; var _local13:int; var _local14:int; var _local15:String; var _local16:Array; var _local17:Array; var _local18:Boolean; _local4 = ""; _arg1.updateModel(); _arg1.updateMatrix(); _local6 = _arg1.points.length; _local7 = _arg1.faces.length; _local4 = (("#MODEL " + _arg1.name) + ".obj\n"); if (((_arg1.name) && (_arg1.name.length))){ _local4 = (_local4 + (("o " + _arg1.name) + "\n\n")); }; if (((_arg2) && (_arg2.length))){ _local4 = (_local4 + "#MATERIALS\n"); _local4 = (_local4 + (("mtllib " + _arg2) + "\n\n")); }; if (_arg3){ _local4 = (_local4 + (((((("#position " + _arg1.position[0].toFixed(3)) + " ") + _arg1.position[1].toFixed(3)) + " ") + _arg1.position[2].toFixed(3)) + "\n")); _local4 = (_local4 + (((((("#scale " + _arg1.scale[0].toFixed(3)) + " ") + _arg1.scale[1].toFixed(3)) + " ") + _arg1.scale[2].toFixed(3)) + "\n")); _local4 = (_local4 + (((((("#rotation " + _arg1.rotation[0].toFixed(3)) + " ") + _arg1.rotation[1].toFixed(3)) + " ") + _arg1.rotation[2].toFixed(3)) + "\n")); }; _local4 = (_local4 + "#POINTS\n"); _local4 = (_local4 + (("#NUM VERTICES: " + _local6) + "\n")); _local10 = []; _local12 = false; _local14 = 0; _local5 = 0; while (_local5 < _local6) { _local12 = false; _local11 = _arg1.getGroupsFromPoint(_local5); _local13 = _local11.length; _local9 = 0; while (_local9 < _local13) { if (isInArray(_local11[_local9], _local10) < 0){ _local12 = true; break; }; _local9++; }; _local9 = 0; while (((!(_local12)) && ((_local9 < _local14)))) { if (isInArray(_local10[_local9], _local11) < 0){ _local12 = true; break; }; _local9++; }; if (_local12){ _local10 = _local11.concat(); _local14 = _local13; _local4 = (_local4 + (("g " + _local10.join(" ")) + "\n")); }; _local8 = _arg1.points[_local5]; _local4 = (_local4 + (((((("v " + _local8[0].toFixed(3)) + " ") + _local8[1].toFixed(3)) + " ") + _local8[2].toFixed(3)) + "\n")); _local5++; }; _local15 = null; _local17 = _arg1.materials; _local18 = false; _local4 = (_local4 + "#FACES\n"); _local4 = (_local4 + (("#NUM FACES: " + _local7) + "\n")); _local5 = 0; while (_local5 < _local7) { _local12 = false; _local11 = _arg1.getGroupsFromFace(_local5); _local13 = _local11.length; _local9 = 0; while (_local9 < _local13) { if (isInArray(_local11[_local9], _local10) < 0){ _local12 = true; break; }; _local9++; }; _local9 = 0; while (((!(_local12)) && ((_local9 < _local14)))) { if (isInArray(_local10[_local9], _local11) < 0){ _local12 = true; break; }; _local9++; }; if (_local12){ _local10 = _local11; _local14 = _local13; _local4 = (_local4 + (("g " + _local10.join(" ")) + "\n")); }; _local16 = _arg1.faces[_local5]; if (_local16.smooth != _local18){ _local18 = _local16.smooth; _local4 = (_local4 + (_local16.smooth) ? "s 1\n" : "s 0\n"); }; if (((_arg2) && (_arg2.length))){ if (_local16.material != _local15){ _local15 = _local16.material; if (((_local16.material) && (_local16.material.length))){ _local4 = (_local4 + (("usemtl " + _local16.material) + "\n")); } else { _local4 = (_local4 + "usemtl\n"); }; }; }; _local4 = (_local4 + (((((("f " + (_local16[0] + 1)) + " ") + (_local16[1] + 1)) + " ") + (_local16[2] + 1)) + "\n")); _local5++; }; return (_local4); } public static function getPoints(_arg1:Array):Array{ var _local2:int; var _local3:int; var _local4:Array; var _local5:int; var _local6:int; var _local7:Array; var _local8:Array; _local2 = _arg1.length; _local7 = []; _local8 = [false, false, false]; _local5 = 0; while (_local5 < _local2) { _local4 = _arg1[_local5]; _local8[0] = false; _local8[1] = false; _local8[2] = false; _local3 = _local7.length; _local6 = 0; while (_local6 < _local3) { if (_local4[0] == _local7[_local6]){ _local8[0] = true; }; if (_local4[1] == _local7[_local6]){ _local8[1] = true; }; if (_local4[2] == _local7[_local6]){ _local8[2] = true; }; _local6++; }; if (!_local8[0]){ _local7[_local7.length] = _local4[0]; }; if (!_local8[1]){ _local7[_local7.length] = _local4[1]; }; if (!_local8[2]){ _local7[_local7.length] = _local4[2]; }; _local5++; }; return (_local7); } public static function createSphere(_arg1:int, _arg2:int, _arg3:Number):Model3D{ var _local4:int; var _local5:Array; var _local6:Number; var _local7:Model3D; if (_arg1 < 1){ _arg1 = 1; }; if (_arg2 < 3){ _arg2 = 3; }; _local5 = new Array(_arg1); _local6 = (Math.PI / (_arg1 + 1)); _local4 = 1; while (_local4 <= _arg1) { _local5[(_local4 - 1)] = [(Math.cos(((_local6 * _local4) - (Math.PI * 0.5))) * _arg3), (-(Math.sin(((_local6 * _local4) - (Math.PI * 0.5)))) * _arg3)]; _local4++; }; _local7 = createRotational(_local5, _arg2); _local7.points[(_local7.points.length - 2)][1] = _arg3; _local7.points[(_local7.points.length - 1)][1] = -(_arg3); _local7.updateModel(); return (_local7); } public static function connectPointsIntoFace(_arg1:Model3D, _arg2:int, _arg3:int, _arg4:int):Boolean{ var _local5:Array; var _local6:Array; var _local7:Array; var _local8:Array; var _local9:Array; var _local10:Array; var _local11:Array; _local5 = _arg1.faces; _local6 = getFacesByLine(_local5, _arg2, _arg3); _local7 = getFacesByLine(_local5, _arg3, _arg4); _local8 = getFacesByLine(_local5, _arg4, _arg2); if ((((((_local6.length > 1)) || ((_local7.length > 1)))) || ((_local8.length > 1)))){ return (false); }; if (((_local6.length + _local7.length) + _local8.length) < 1){ return (false); }; _local10 = []; if (_local6.length){ _local9 = _arg1.faces[_local6[0]]; } else { if (_local7.length){ _local9 = _arg1.faces[_local7[0]]; } else { if (_local8.length){ _local9 = _arg1.faces[_local8[0]]; }; }; }; if (_local9[0] == _arg2){ _local10[_local10.length] = 0; }; if (_local9[0] == _arg3){ _local10[_local10.length] = 0; }; if (_local9[0] == _arg4){ _local10[_local10.length] = 0; }; if (_local9[1] == _arg2){ _local10[_local10.length] = 1; }; if (_local9[1] == _arg3){ _local10[_local10.length] = 1; }; if (_local9[1] == _arg4){ _local10[_local10.length] = 1; }; if (_local9[2] == _arg2){ _local10[_local10.length] = 2; }; if (_local9[2] == _arg3){ _local10[_local10.length] = 2; }; if (_local9[2] == _arg4){ _local10[_local10.length] = 2; }; _local11 = [0, 0, 0]; if (_local10[1] == ((_local10[0] + 1) % 3)){ _local11[0] = _local9[_local10[1]]; _local11[1] = _local9[_local10[0]]; } else { _local11[0] = _local9[_local10[0]]; _local11[1] = _local9[_local10[1]]; }; if (((!((_arg2 == _local9[_local10[0]]))) && (!((_arg2 == _local9[_local10[1]]))))){ _local11[2] = _arg2; }; if (((!((_arg3 == _local9[_local10[0]]))) && (!((_arg3 == _local9[_local10[1]]))))){ _local11[2] = _arg3; }; if (((!((_arg4 == _local9[_local10[0]]))) && (!((_arg4 == _local9[_local10[1]]))))){ _local11[2] = _arg4; }; _local11.smooth = _local9.smooth; _local11.material = _local9.material; _local11.visible = true; _arg1.faces[_arg1.faces.length] = _local11; return (true); } public static function getSharedLines(_arg1:Model3D, _arg2:Array):Array{ var _local3:int; var _local4:Array; var _local5:Array; var _local6:int; var _local7:int; var _local8:Array; var _local9:Array; _local3 = _arg2.length; _local8 = []; _local6 = 0; while (_local6 < (_local3 - 1)) { _local4 = _arg1.faces[_arg2[_local6]]; _local7 = (_local6 + 1); while (_local7 < _local3) { _local5 = _arg1.faces[_arg2[_local7]]; _local9 = getSharedLine(_local4, _local5); if (_local9.length == 2){ _local8.push(_local9); }; _local7++; }; _local6++; }; return (_local8); } public static function splitLine(_arg1:Model3D, _arg2:int, _arg3:int):Boolean{ var _local4:Array; var _local5:Array; var _local6:Array; var _local7:Array; var _local8:Array; var _local9:Array; var _local10:int; var _local11:Array; var _local12:String; var _local13:Boolean; var _local14:String; var _local15:Boolean; var _local16:Array; var _local17:Array; var _local18:Array; var _local19:Array; var _local20:int; _local4 = (_arg1.faces[_arg2] as Array); _local5 = (_arg1.faces[_arg3] as Array); if (((!(_local4)) || (!(_local5)))){ return (false); }; _local6 = []; _local7 = []; if (_local4[0] == _local5[0]){ _local6[_local6.length] = 0; }; if (_local4[0] == _local5[1]){ _local6[_local6.length] = 0; }; if (_local4[0] == _local5[2]){ _local6[_local6.length] = 0; }; if (_local4[1] == _local5[0]){ _local6[_local6.length] = 1; }; if (_local4[1] == _local5[1]){ _local6[_local6.length] = 1; }; if (_local4[1] == _local5[2]){ _local6[_local6.length] = 1; }; if (_local4[2] == _local5[0]){ _local6[_local6.length] = 2; }; if (_local4[2] == _local5[1]){ _local6[_local6.length] = 2; }; if (_local4[2] == _local5[2]){ _local6[_local6.length] = 2; }; if (_local6.length != 2){ return (false); }; if (((((_local6[1] - _local6[0]) == -1)) || (((_local6[1] - _local6[0]) == 2)))){ _local20 = _local6[1]; _local6[1] = _local6[0]; _local6[0] = _local20; }; if (((!((_local4[0] == _local4[_local6[0]]))) && (!((_local4[0] == _local4[_local6[1]]))))){ _local7[0] = 0; }; if (((!((_local4[1] == _local4[_local6[0]]))) && (!((_local4[1] == _local4[_local6[1]]))))){ _local7[0] = 1; }; if (((!((_local4[2] == _local4[_local6[0]]))) && (!((_local4[2] == _local4[_local6[1]]))))){ _local7[0] = 2; }; if (((!((_local5[0] == _local4[_local6[0]]))) && (!((_local5[0] == _local4[_local6[1]]))))){ _local7[1] = 0; }; if (((!((_local5[1] == _local4[_local6[0]]))) && (!((_local5[1] == _local4[_local6[1]]))))){ _local7[1] = 1; }; if (((!((_local5[2] == _local4[_local6[0]]))) && (!((_local5[2] == _local4[_local6[1]]))))){ _local7[1] = 2; }; if (_local7.length != 2){ return (false); }; _local8 = _arg1.points[_local4[_local6[0]]]; _local9 = _arg1.points[_local4[_local6[1]]]; _local10 = _arg1.points.length; _local11 = [(0.5 * (_local8[0] + _local9[0])), (0.5 * (_local8[1] + _local9[1])), (0.5 * (_local8[2] + _local9[2])), 1]; _arg1.points[_local10] = _local11; _local12 = _local4.material; _local13 = _local4.smooth; _local14 = _local5.material; _local15 = _local5.smooth; _local16 = [_local4[_local7[0]], _local4[_local6[0]], _local10]; _local17 = [_local4[_local7[0]], _local10, _local4[_local6[1]]]; _local18 = [_local5[_local7[1]], _local4[_local6[1]], _local10]; _local19 = [_local5[_local7[1]], _local10, _local4[_local6[0]]]; _local17.material = (_local16.material = _local12); _local19.material = (_local18.material = _local14); _local16.smooth = (_local17.smooth = _local13); _local18.smooth = (_local19.smooth = _local15); _local17.visible = (_local16.visible = (_local19.visible = (_local18.visible = true))); _arg1.faces[_arg1.faces.length] = _local16; _arg1.faces[_arg1.faces.length] = _local17; _arg1.faces[_arg1.faces.length] = _local18; _arg1.faces[_arg1.faces.length] = _local19; _arg1.deleteFace(_arg2); if (_arg3 > _arg2){ _arg1.deleteFace((_arg3 - 1)); } else { _arg1.deleteFace(_arg3); }; _arg1.updateModel(); return (true); } public static function createToroid(_arg1:Array, _arg2:int){ return (createRotational(_arg1, _arg2, false, true)); } public static function isInArray(_arg1, _arg2:Array):int{ var _local3:int; var _local4:int; _local3 = _arg2.length; _local4 = 0; while (_local4 < _local3) { if (_arg2[_local4] == _arg1){ return (_local4); }; _local4++; }; return (-1); } public static function createCylinder(_arg1:int, _arg2:int, _arg3:Number, _arg4:Number, _arg5:Boolean=true){ var _local6:Array; var _local7:Number; var _local8:int; _local6 = []; _local7 = ((Math.PI * 2) / _arg1); _local8 = 0; while (_local8 < _arg1) { _local6[_local8] = [(-(Math.cos((_local7 * _local8))) * _arg3), (Math.sin((_local7 * _local8)) * _arg3)]; _local8++; }; return (extrude(_local6, _arg2, (_arg4 / (_arg2 + 1)), _arg5)); } public static function getLineFromMouse(_arg1:Camera3D, _arg2:int, _arg3:int){ } public static function getNormals(_arg1:Array, _arg2:Array, _arg3:Array, _arg4:Array):Array{ var _local5:Array; var _local6:int; var _local7:int; var _local8:int; var _local9:int; var _local10:Array; var _local11:int; var _local12:int; var _local13:int; _local5 = []; _local6 = _arg1.length; _local7 = _arg2.length; _local12 = 0; while (_local12 < _local6) { _local9 = _arg1[_local12]; _local11 = 0; _local5[_local12] = [0, 0, 0]; _local13 = 0; while (_local13 < _local7) { _local10 = _arg3[_local13]; _local8 = _arg2[_local13]; if ((((((_local10[0] == _local9)) || ((_local10[1] == _local9)))) || ((_local10[2] == _local9)))){ _local11++; _local5[_local12][0] = (_local5[_local12][0] + _arg4[_local8][0]); _local5[_local12][1] = (_local5[_local12][1] + _arg4[_local8][1]); _local5[_local12][2] = (_local5[_local12][2] + _arg4[_local8][2]); }; _local13++; }; _local5[_local12][0] = (_local5[_local12][0] / _local11); _local5[_local12][1] = (_local5[_local12][1] / _local11); _local5[_local12][2] = (_local5[_local12][2] / _local11); _local12++; }; return (_local5); } public static function copyFace(_arg1:Array):Array{ var _local2:Array; _local2 = []; _local2[0] = _arg1[0]; _local2[1] = _arg1[1]; _local2[2] = _arg1[2]; if (_arg1.material){ _local2.material = _arg1.material; } else { _local2.material = ""; }; if (!_arg1.smooth){ _local2.smooth = false; } else { _local2.smooth = _arg1.smooth; }; if ((((_arg1.visible == undefined)) || ((_arg1.visible == null)))){ _local2.visible = true; } else { _local2.visible = _arg1.visible; }; return (_local2); } public static function splitFaces(_arg1:Model3D, _arg2:Array){ var _local3:Array; var _local4:Array; var _local5:int; var _local6:int; var _local7:int; var _local8:int; _local3 = _arg2.concat(); _local4 = []; _local5 = 0; _local6 = 0; while (_local3.length) { _local5 = -1; _local6 = _local5; _local7 = 0; while (_local7 < _local3.length) { if (_local3[_local7] > _local5){ _local5 = _local3[_local7]; _local6 = _local7; }; _local7++; }; _local4.push(_local5); _local3.splice(_local6, 1); }; _local8 = _local4.length; _local7 = 0; while (_local7 < _local8) { splitFace(_arg1, _local4[_local7]); _local7++; }; } public static function getSharedLine(_arg1:Array, _arg2:Array):Array{ var _local3:int; var _local4:Array; _local4 = []; if (_arg1[0] == _arg2[0]){ _local4[_local4.length] = _arg1[0]; }; if (_arg1[0] == _arg2[1]){ _local4[_local4.length] = _arg1[0]; }; if (_arg1[0] == _arg2[2]){ _local4[_local4.length] = _arg1[0]; }; if (_arg1[1] == _arg2[0]){ _local4[_local4.length] = _arg1[1]; }; if (_arg1[1] == _arg2[1]){ _local4[_local4.length] = _arg1[1]; }; if (_arg1[1] == _arg2[2]){ _local4[_local4.length] = _arg1[1]; }; if (_arg1[2] == _arg2[0]){ _local4[_local4.length] = _arg1[2]; }; if (_arg1[2] == _arg2[1]){ _local4[_local4.length] = _arg1[2]; }; if (_arg1[2] == _arg2[2]){ _local4[_local4.length] = _arg1[2]; }; if (_local4.length == 2){ return (_local4); }; if (_local4[0] > _local4[1]){ _local3 = _local4[0]; _local4[0] = _local4[1]; _local4[1] = _local3; }; return ([]); } public static function isWhiteSpace(_arg1:String):Boolean{ return ((((((_arg1 == " ")) || ((_arg1 == "\t")))) || ((_arg1 == "\r")))); } } }//package pixels3d
Section 8
//Stage3D (pixels3d.Stage3D) package pixels3d { import flash.utils.*; public final class Stage3D { private var _models:Array; private var _ambient:Array; public var bgColor:uint; private var _lights:Array; public function Stage3D(){ _models = []; _lights = []; _ambient = [0, 0, 0]; bgColor = 4294967295; } public function getLightAt(_arg1:int):Light3D{ if ((((_arg1 > _lights.length)) || ((_arg1 < 0)))){ return (null); }; return (_lights[_arg1]); } public function draw(_arg1:Camera3D){ var _local2:int; var _local3:int; var _local4:int; var _local5:int; var _local6:int; _local5 = 0; _arg1.resetZBuffer(); _arg1.canvas.lock(); _arg1.canvas.fillRect(_arg1.screenSize, bgColor); _local6 = _models.length; _local5 = 0; while (_local5 < _local6) { _local2 = getTimer(); if (!_models[_local5].visible){ } else { _models[_local5].draw(_arg1, _lights, _ambient); _local3 = getTimer(); }; _local5++; }; _arg1.canvas.unlock(); } public function removeModel(_arg1:Model3D):void{ var _local2:int; var _local3:int; _local2 = _models.length; _local3 = 0; while (_local3 < _local2) { if (_models[_local3] == _arg1){ removeModelAt(_local3); return; }; _local3++; }; } public function getModelAt(_arg1:int):Model3D{ if ((((_arg1 > _models.length)) || ((_arg1 < 0)))){ return (null); }; return (_models[_arg1]); } public function addModel(_arg1:Model3D):void{ if (getModel(_arg1) > -1){ return; }; _models.push(_arg1); } public function removeLightAt(_arg1:int):void{ delete _lights[_arg1]; _lights.splice(_arg1, 1); } public function addLightAt(_arg1:Light3D, _arg2:int):void{ var _local3:*; var _local4:int; removeLight(_arg1); _local3 = _lights.length; _local4 = _local3; while (_local4 > _arg2) { (_lights[_local4] == _lights[(_local4 - 1)]); _local4++; }; _lights[_arg2] = _arg2; } public function removeModelAt(_arg1:int):void{ delete _models[_arg1]; _models.splice(_arg1, 1); } public function addModelAt(_arg1:Model3D, _arg2:int):void{ var _local3:*; var _local4:int; removeModel(_arg1); _local3 = _models.length; _local4 = _local3; while (_local4 > _arg2) { (_models[_local4] == _models[(_local4 - 1)]); _local4++; }; _models[_arg2] = _arg2; } public function get lights():Array{ return (_lights); } public function get ambient():Array{ return (_ambient); } public function getLight(_arg1:Light3D):int{ var _local2:int; var _local3:int; _local2 = _lights.length; _local3 = 0; while (_local3 < _local2) { if (_lights[_local3] == _arg1){ return (_local3); }; _local3++; }; return (-1); } public function get models():Array{ return (_models); } public function set ambient(_arg1:Array){ var _local2:int; if (!_arg1){ return; }; _local2 = _arg1.length; if (_local2 < 1){ return; }; _ambient[0] = _arg1[0]; if (_local2 < 2){ return; }; _ambient[1] = _arg1[1]; if (_local2 < 3){ return; }; _ambient[2] = _arg1[2]; } public function getModel(_arg1:Model3D):int{ var _local2:int; var _local3:int; _local2 = _models.length; _local3 = 0; while (_local3 < _local2) { if (_models[_local3] == _arg1){ return (_local3); }; _local3++; }; return (-1); } public function addLight(_arg1:Light3D):void{ if (getLight(_arg1) > -1){ return; }; _lights.push(_arg1); } public function removeLight(_arg1:Light3D):void{ var _local2:int; var _local3:int; _local2 = _lights.length; _local3 = 0; while (_local3 < _local2) { if (_lights[_local3] == _arg1){ removeLightAt(_local3); return; }; _local3++; }; } } }//package pixels3d

Special Tags

FileAttributes (69)Timeline Frame 1Access local files only, Metadata not present, AS3.




http://swfchan.com/33/163382/info.shtml
Created: 19/10 -2018 19:11:19 Last modified: 19/10 -2018 19:11:19 Server time: 28/04 -2024 20:46:51