|
| 1 | +/** |
| 2 | + * Copyright ysle ( http://wonderfl.net/user/ysle ) |
| 3 | + * MIT License ( http://www.opensource.org/licenses/mit-license.php ) |
| 4 | + * Downloaded from: http://wonderfl.net/c/qGQZ |
| 5 | + * Downloaded from: https://github.com/biliscript-syndicate/examples/blob/master/Sphere.as |
| 6 | + * |
| 7 | + * --Modified slightly to remove unnecessary code & hardcode screen size/lifeTime |
| 8 | + * --Modified so that GlowFilter is added too. |
| 9 | + */ |
| 10 | + |
| 11 | +/** |
| 12 | +* Works well with filters off at 200,40,9 |
| 13 | +* or with filters on at 200, 20, 5 |
| 14 | +**/ |
| 15 | +/*** CONFIG ****/ |
| 16 | + |
| 17 | +var fill = true; |
| 18 | +var wireframe = true; |
| 19 | +var filters = false; |
| 20 | +var radius = 200; |
| 21 | +var detail = 40; |
| 22 | +var stripes = 9; |
| 23 | + |
| 24 | +/*** /CONFIG ***/ |
| 25 | + |
| 26 | +var unload = $G._get('unload'); |
| 27 | +if (unload) unload(); |
| 28 | +Vector3D = ($.createVector3D()).constructor; |
| 29 | + |
| 30 | +var screen = $.createShape({ |
| 31 | + lifeTime: 1000 |
| 32 | +}); |
| 33 | +screen.transform.matrix3D = null; |
| 34 | +screen.x = 640 / 2; |
| 35 | +screen.y = 400 / 2; |
| 36 | + |
| 37 | +function getR(a, c) { |
| 38 | + return Math.sqrt(c * c - a * a); |
| 39 | +} |
| 40 | +var rules = [ |
| 41 | + {r:0xff, g:0, b:0, dr:0, dg:1, db:0 }, |
| 42 | + {r:0xff, g:0xff, b:0, dr: -1, dg:0, db:0 }, |
| 43 | + {r:0, g:0xff, b:0, dr:0, dg:0, db: +1 }, |
| 44 | + {r:0, g:0xff, b:0xff, dr:0, dg: -1, db:0 }, |
| 45 | + {r:0, g:0, b:0xff, dr: +1, dg:0, db:0 }, |
| 46 | + {r:0xff, g:0, b:0xff, dr:0, dg:0, db: -1 } |
| 47 | +]; |
| 48 | +function getColor(value) { |
| 49 | + var d = (value = value % 0x5fa) % 0xff; |
| 50 | + var r = rules[(value / 0xff) | 0]; |
| 51 | + return ((r.r+r.dr*d)<<16)+((r.g+r.dg*d)<<8)+(r.b+r.db*d); |
| 52 | +} |
| 53 | + |
| 54 | +var vertices = $.toNumberVector([]); |
| 55 | +var indices = $.toIntVector([]); |
| 56 | +var uvtData = $.toNumberVector([]); |
| 57 | +var projectedVertices = $.toNumberVector([]); |
| 58 | +function init() { |
| 59 | + var frh = radius * 2 / (stripes * 2 +1); |
| 60 | + var yc = -radius; |
| 61 | + var rad, last, yUp, yDown, rUp, rDown, i; |
| 62 | + |
| 63 | + for (var s = 0; s < stripes; s++) { |
| 64 | + yUp = yc += frh ; |
| 65 | + yDown = yc += frh; |
| 66 | + rUp = getR(yUp, radius); |
| 67 | + rDown = getR(yDown, radius); |
| 68 | + i = detail*2*s; |
| 69 | + |
| 70 | + for (var c = 0; c < detail; c++) { |
| 71 | + rad = (2 * Math.PI) / detail * c; |
| 72 | + vertices.push(Math.cos(rad) * rUp, Math.sin(rad) * rUp, yUp ); |
| 73 | + vertices.push(Math.cos(rad) * rDown, Math.sin(rad) * rDown, yDown ); |
| 74 | + |
| 75 | + last = c == (detail - 1); |
| 76 | + indices.push(i + c * 2, i + c * 2 + 1, i + (last?0:c * 2 + 2)); |
| 77 | + indices.push(i + c * 2 + 1, i + (last?1:c * 2 + 3), i + (last?0:c * 2 + 2)); |
| 78 | + } |
| 79 | + } |
| 80 | + |
| 81 | + uvtData.length = indices.length; |
| 82 | + projectedVertices.length = vertices.length / 3 * 2; |
| 83 | + projectedVertices.fixed = true; |
| 84 | + vertices.fixed = true; |
| 85 | + indices.fixed = true; |
| 86 | + uvtData.fixed = true; |
| 87 | +} |
| 88 | + |
| 89 | +var counter = 0; |
| 90 | +var rx = 0; |
| 91 | +var ry = 0; |
| 92 | +var frames = 0; |
| 93 | +var fpsText = $.createComment('', {fontsize:12, lifeTime:1000}); |
| 94 | +var frameCount = 0; |
| 95 | +var nextUpdate = getTimer() + 1000; |
| 96 | +var lastTime = getTimer(); |
| 97 | +var matrix3D = $.createMatrix3D([]); |
| 98 | +if(filters) |
| 99 | + screen.filters = [$.createGlowFilter(0xff0000,1,40,40,20)]; |
| 100 | +var mrgb = 0xff0000; |
| 101 | + |
| 102 | + |
| 103 | +function render() { |
| 104 | + var now = getTimer(); |
| 105 | + frameCount++; |
| 106 | + if (now >= nextUpdate) { |
| 107 | + fps = ((frameCount / (now - lastTime) * 1000 * 10) | 0) / 10; |
| 108 | + fpsText.text = 'FPS:' + fps; |
| 109 | + lastTime = now; |
| 110 | + frameCount = 0; |
| 111 | + nextUpdate = getTimer() + 1000; |
| 112 | + } |
| 113 | + matrix3D.identity(); |
| 114 | + matrix3D.prependRotation(rx+=0.5, Vector3D.X_AXIS); |
| 115 | + matrix3D.prependRotation(ry+=1.25, Vector3D.Y_AXIS); |
| 116 | + $.projectVectors(matrix3D, vertices, projectedVertices, uvtData); |
| 117 | + screen.graphics.clear(); |
| 118 | + var color = getColor(counter++); |
| 119 | + if(frameCount === 0 && filters){ |
| 120 | + var r = Math.floor(color / 65536), g = Math.floor((color % 65536) / 256), b = color % 256; |
| 121 | + nmrgb = Utils.rgb(255 * (r > 128 ? 1 : 0), 255 * (g > 128 ? 1 : 0), 255 * (b > 128 ? 1 : 0)); |
| 122 | + if(nmrgb !== mrgb){ |
| 123 | + mrgb = nmrgb; |
| 124 | + screen.filters = [$.createGlowFilter(mrgb,1,40,40,20)]; |
| 125 | + } |
| 126 | + } |
| 127 | + |
| 128 | + if (wireframe) |
| 129 | + screen.graphics.lineStyle(0.4, fill?0xffffff:color,1); |
| 130 | + if (fill) |
| 131 | + screen.graphics.beginFill(0xffffff); |
| 132 | + screen.graphics.drawTriangles(projectedVertices, indices, null, 'negative'); |
| 133 | + if(fill) |
| 134 | + screen.graphics.beginFill(color); |
| 135 | + screen.graphics.drawTriangles(projectedVertices, indices, null, 'positive'); |
| 136 | + screen.graphics.endFill(); |
| 137 | +} |
| 138 | + |
| 139 | +init(); |
| 140 | +screen.addEventListener('enterFrame', render); |
| 141 | +$G._set('unload', function(){ |
| 142 | + screen.removeEventListener('enterFrame', render); |
| 143 | + ScriptManager.clearEl(); |
| 144 | + $G._set('unload', undefined); |
| 145 | +}); |
0 commit comments