diff --git a/.gitignore b/.gitignore index 312e9ee..f6684d2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,10 @@ /.flexLibProperties /bin +/target /launch/output.txt /.project /.settings /.actionScriptProperties *.iml -out \ No newline at end of file +out +/bin-debug/ diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..30c8514 --- /dev/null +++ b/build.xml @@ -0,0 +1,127 @@ + + + + + +Builds the Away3D 4.0 examples. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/embeds/cornell.obj b/embeds/cornell.obj new file mode 100644 index 0000000..d10d515 --- /dev/null +++ b/embeds/cornell.obj @@ -0,0 +1,35 @@ +# Blender v2.58 (sub 1) OBJ File: '' +# www.blender.org + +o Cube +v 1.000000 -1.449582 -1.000000 +v 1.000000 -1.449582 1.000000 +v -1.000000 -1.449582 1.000000 +v -1.000000 -1.449582 -1.000000 +v 1.000000 1.449582 -1.000000 +v 0.999999 1.449582 1.000001 +v -1.000000 1.449582 1.000000 +v -1.000000 1.449582 -1.000000 +vt 0.666667 0.483194 +vt 1.000000 0.483194 +vt 1.000000 0.816527 +vt 0.666667 0.816527 +vt 1.000000 0.333333 +vt 0.666667 0.333333 +vt 0.666667 0.000000 +vt 1.000000 0.000000 +vt 0.000000 0.000000 +vt 0.333333 0.000000 +vt 0.333333 0.483194 +vt 0.000000 0.483194 +vt 0.666667 0.966388 +vt 0.333333 0.966388 +vt 0.000000 0.966388 + +s off +f 1/1 4/2 3/3 2/4 +f 5/5 6/6 7/7 8/8 +f 1/9 2/10 6/11 5/12 +f 2/10 3/7 7/1 6/11 +f 3/11 4/1 8/13 7/14 +f 4/12 1/11 5/14 8/15 diff --git a/embeds/cornellEnvMap/negXnegZ/negX.jpg b/embeds/cornellEnvMap/negXnegZ/negX.jpg new file mode 100644 index 0000000..0cd2917 Binary files /dev/null and b/embeds/cornellEnvMap/negXnegZ/negX.jpg differ diff --git a/embeds/cornellEnvMap/negXnegZ/negY.jpg b/embeds/cornellEnvMap/negXnegZ/negY.jpg new file mode 100644 index 0000000..2807c4a Binary files /dev/null and b/embeds/cornellEnvMap/negXnegZ/negY.jpg differ diff --git a/embeds/cornellEnvMap/negXnegZ/negZ.jpg b/embeds/cornellEnvMap/negXnegZ/negZ.jpg new file mode 100644 index 0000000..b58d009 Binary files /dev/null and b/embeds/cornellEnvMap/negXnegZ/negZ.jpg differ diff --git a/embeds/cornellEnvMap/negXnegZ/posX.jpg b/embeds/cornellEnvMap/negXnegZ/posX.jpg new file mode 100644 index 0000000..14baaf1 Binary files /dev/null and b/embeds/cornellEnvMap/negXnegZ/posX.jpg differ diff --git a/embeds/cornellEnvMap/negXnegZ/posY.jpg b/embeds/cornellEnvMap/negXnegZ/posY.jpg new file mode 100644 index 0000000..26397a2 Binary files /dev/null and b/embeds/cornellEnvMap/negXnegZ/posY.jpg differ diff --git a/embeds/cornellEnvMap/negXnegZ/posZ.jpg b/embeds/cornellEnvMap/negXnegZ/posZ.jpg new file mode 100644 index 0000000..8416131 Binary files /dev/null and b/embeds/cornellEnvMap/negXnegZ/posZ.jpg differ diff --git a/embeds/cornellEnvMap/negXposZ/negX.jpg b/embeds/cornellEnvMap/negXposZ/negX.jpg new file mode 100644 index 0000000..0c9a29c Binary files /dev/null and b/embeds/cornellEnvMap/negXposZ/negX.jpg differ diff --git a/embeds/cornellEnvMap/negXposZ/negY.jpg b/embeds/cornellEnvMap/negXposZ/negY.jpg new file mode 100644 index 0000000..69fc46e Binary files /dev/null and b/embeds/cornellEnvMap/negXposZ/negY.jpg differ diff --git a/embeds/cornellEnvMap/negXposZ/negZ.jpg b/embeds/cornellEnvMap/negXposZ/negZ.jpg new file mode 100644 index 0000000..31f3aec Binary files /dev/null and b/embeds/cornellEnvMap/negXposZ/negZ.jpg differ diff --git a/embeds/cornellEnvMap/negXposZ/posX.jpg b/embeds/cornellEnvMap/negXposZ/posX.jpg new file mode 100644 index 0000000..e82ec45 Binary files /dev/null and b/embeds/cornellEnvMap/negXposZ/posX.jpg differ diff --git a/embeds/cornellEnvMap/negXposZ/posY.jpg b/embeds/cornellEnvMap/negXposZ/posY.jpg new file mode 100644 index 0000000..2ac8d67 Binary files /dev/null and b/embeds/cornellEnvMap/negXposZ/posY.jpg differ diff --git a/embeds/cornellEnvMap/negXposZ/posZ.jpg b/embeds/cornellEnvMap/negXposZ/posZ.jpg new file mode 100644 index 0000000..ce104ab Binary files /dev/null and b/embeds/cornellEnvMap/negXposZ/posZ.jpg differ diff --git a/embeds/cornellEnvMap/posXnegZ/negX.jpg b/embeds/cornellEnvMap/posXnegZ/negX.jpg new file mode 100644 index 0000000..77b654a Binary files /dev/null and b/embeds/cornellEnvMap/posXnegZ/negX.jpg differ diff --git a/embeds/cornellEnvMap/posXnegZ/negY.jpg b/embeds/cornellEnvMap/posXnegZ/negY.jpg new file mode 100644 index 0000000..417833b Binary files /dev/null and b/embeds/cornellEnvMap/posXnegZ/negY.jpg differ diff --git a/embeds/cornellEnvMap/posXnegZ/negZ.jpg b/embeds/cornellEnvMap/posXnegZ/negZ.jpg new file mode 100644 index 0000000..7341b0b Binary files /dev/null and b/embeds/cornellEnvMap/posXnegZ/negZ.jpg differ diff --git a/embeds/cornellEnvMap/posXnegZ/posX.jpg b/embeds/cornellEnvMap/posXnegZ/posX.jpg new file mode 100644 index 0000000..1fc2dac Binary files /dev/null and b/embeds/cornellEnvMap/posXnegZ/posX.jpg differ diff --git a/embeds/cornellEnvMap/posXnegZ/posY.jpg b/embeds/cornellEnvMap/posXnegZ/posY.jpg new file mode 100644 index 0000000..fbe4e47 Binary files /dev/null and b/embeds/cornellEnvMap/posXnegZ/posY.jpg differ diff --git a/embeds/cornellEnvMap/posXnegZ/posZ.jpg b/embeds/cornellEnvMap/posXnegZ/posZ.jpg new file mode 100644 index 0000000..d57bf4f Binary files /dev/null and b/embeds/cornellEnvMap/posXnegZ/posZ.jpg differ diff --git a/embeds/cornellEnvMap/posXposZ/negX.jpg b/embeds/cornellEnvMap/posXposZ/negX.jpg new file mode 100644 index 0000000..0c20174 Binary files /dev/null and b/embeds/cornellEnvMap/posXposZ/negX.jpg differ diff --git a/embeds/cornellEnvMap/posXposZ/negY.jpg b/embeds/cornellEnvMap/posXposZ/negY.jpg new file mode 100644 index 0000000..93b07d3 Binary files /dev/null and b/embeds/cornellEnvMap/posXposZ/negY.jpg differ diff --git a/embeds/cornellEnvMap/posXposZ/negZ.jpg b/embeds/cornellEnvMap/posXposZ/negZ.jpg new file mode 100644 index 0000000..f58be5c Binary files /dev/null and b/embeds/cornellEnvMap/posXposZ/negZ.jpg differ diff --git a/embeds/cornellEnvMap/posXposZ/posX.jpg b/embeds/cornellEnvMap/posXposZ/posX.jpg new file mode 100644 index 0000000..13202e5 Binary files /dev/null and b/embeds/cornellEnvMap/posXposZ/posX.jpg differ diff --git a/embeds/cornellEnvMap/posXposZ/posY.jpg b/embeds/cornellEnvMap/posXposZ/posY.jpg new file mode 100644 index 0000000..12fefae Binary files /dev/null and b/embeds/cornellEnvMap/posXposZ/posY.jpg differ diff --git a/embeds/cornellEnvMap/posXposZ/posZ.jpg b/embeds/cornellEnvMap/posXposZ/posZ.jpg new file mode 100644 index 0000000..823f75b Binary files /dev/null and b/embeds/cornellEnvMap/posXposZ/posZ.jpg differ diff --git a/embeds/cornellWallNormals.jpg b/embeds/cornellWallNormals.jpg new file mode 100644 index 0000000..4840018 Binary files /dev/null and b/embeds/cornellWallNormals.jpg differ diff --git a/embeds/cornell_baked.jpg b/embeds/cornell_baked.jpg new file mode 100644 index 0000000..ef86b01 Binary files /dev/null and b/embeds/cornell_baked.jpg differ diff --git a/embeds/cube-tile6.jpg b/embeds/cube-tile6.jpg new file mode 100644 index 0000000..94ef761 Binary files /dev/null and b/embeds/cube-tile6.jpg differ diff --git a/embeds/cube-tile6.psd b/embeds/cube-tile6.psd new file mode 100644 index 0000000..a5c3573 Binary files /dev/null and b/embeds/cube-tile6.psd differ diff --git a/embeds/head_AO.jpg b/embeds/head_AO.jpg new file mode 100644 index 0000000..5511981 Binary files /dev/null and b/embeds/head_AO.jpg differ diff --git a/embeds/skybox/grid-negX.png b/embeds/skybox/grid-negX.png new file mode 100644 index 0000000..fab251e Binary files /dev/null and b/embeds/skybox/grid-negX.png differ diff --git a/embeds/skybox/grid-negY.png b/embeds/skybox/grid-negY.png new file mode 100644 index 0000000..46ab92b Binary files /dev/null and b/embeds/skybox/grid-negY.png differ diff --git a/embeds/skybox/grid-negZ.png b/embeds/skybox/grid-negZ.png new file mode 100644 index 0000000..142002a Binary files /dev/null and b/embeds/skybox/grid-negZ.png differ diff --git a/embeds/skybox/grid-posX.png b/embeds/skybox/grid-posX.png new file mode 100644 index 0000000..f30dded Binary files /dev/null and b/embeds/skybox/grid-posX.png differ diff --git a/embeds/skybox/grid-posY.png b/embeds/skybox/grid-posY.png new file mode 100644 index 0000000..4e5234b Binary files /dev/null and b/embeds/skybox/grid-posY.png differ diff --git a/embeds/skybox/grid-posZ.png b/embeds/skybox/grid-posZ.png new file mode 100644 index 0000000..970c021 Binary files /dev/null and b/embeds/skybox/grid-posZ.png differ diff --git a/html-template/history/history.css b/html-template/history/history.css deleted file mode 100644 index dbc47c6..0000000 --- a/html-template/history/history.css +++ /dev/null @@ -1,6 +0,0 @@ -/* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */ - -#ie_historyFrame { width: 0px; height: 0px; display:none } -#firefox_anchorDiv { width: 0px; height: 0px; display:none } -#safari_formDiv { width: 0px; height: 0px; display:none } -#safari_rememberDiv { width: 0px; height: 0px; display:none } diff --git a/html-template/history/history.js b/html-template/history/history.js deleted file mode 100644 index 00a8bfe..0000000 --- a/html-template/history/history.js +++ /dev/null @@ -1,678 +0,0 @@ -BrowserHistoryUtils = { - addEvent: function(elm, evType, fn, useCapture) { - useCapture = useCapture || false; - if (elm.addEventListener) { - elm.addEventListener(evType, fn, useCapture); - return true; - } - else if (elm.attachEvent) { - var r = elm.attachEvent('on' + evType, fn); - return r; - } - else { - elm['on' + evType] = fn; - } - } -} - -BrowserHistory = (function() { - // type of browser - var browser = { - ie: false, - ie8: false, - firefox: false, - safari: false, - opera: false, - version: -1 - }; - - // Default app state URL to use when no fragment ID present - var defaultHash = ''; - - // Last-known app state URL - var currentHref = document.location.href; - - // Initial URL (used only by IE) - var initialHref = document.location.href; - - // Initial URL (used only by IE) - var initialHash = document.location.hash; - - // History frame source URL prefix (used only by IE) - var historyFrameSourcePrefix = 'history/historyFrame.html?'; - - // History maintenance (used only by Safari) - var currentHistoryLength = -1; - - // Flag to denote the existence of onhashchange - var browserHasHashChange = false; - - var historyHash = []; - - var initialState = createState(initialHref, initialHref + '#' + initialHash, initialHash); - - var backStack = []; - var forwardStack = []; - - var currentObjectId = null; - - //UserAgent detection - var useragent = navigator.userAgent.toLowerCase(); - - if (useragent.indexOf("opera") != -1) { - browser.opera = true; - } else if (useragent.indexOf("msie") != -1) { - browser.ie = true; - browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4)); - if (browser.version == 8) - { - browser.ie = false; - browser.ie8 = true; - } - } else if (useragent.indexOf("safari") != -1) { - browser.safari = true; - browser.version = parseFloat(useragent.substring(useragent.indexOf('safari') + 7)); - } else if (useragent.indexOf("gecko") != -1) { - browser.firefox = true; - } - - if (browser.ie == true && browser.version == 7) { - window["_ie_firstload"] = false; - } - - function hashChangeHandler() - { - currentHref = document.location.href; - var flexAppUrl = getHash(); - //ADR: to fix multiple - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { - var pl = getPlayers(); - for (var i = 0; i < pl.length; i++) { - pl[i].browserURLChange(flexAppUrl); - } - } else { - getPlayer().browserURLChange(flexAppUrl); - } - } - - // Accessor functions for obtaining specific elements of the page. - function getHistoryFrame() - { - return document.getElementById('ie_historyFrame'); - } - - function getFormElement() - { - return document.getElementById('safari_formDiv'); - } - - function getRememberElement() - { - return document.getElementById("safari_remember_field"); - } - - // Get the Flash player object for performing ExternalInterface callbacks. - // Updated for changes to SWFObject2. - function getPlayer(id) { - var i; - - if (id && document.getElementById(id)) { - var r = document.getElementById(id); - if (typeof r.SetVariable != "undefined") { - return r; - } - else { - var o = r.getElementsByTagName("object"); - var e = r.getElementsByTagName("embed"); - for (i = 0; i < o.length; i++) { - if (typeof o[i].browserURLChange != "undefined") - return o[i]; - } - for (i = 0; i < e.length; i++) { - if (typeof e[i].browserURLChange != "undefined") - return e[i]; - } - } - } - else { - var o = document.getElementsByTagName("object"); - var e = document.getElementsByTagName("embed"); - for (i = 0; i < e.length; i++) { - if (typeof e[i].browserURLChange != "undefined") - { - return e[i]; - } - } - for (i = 0; i < o.length; i++) { - if (typeof o[i].browserURLChange != "undefined") - { - return o[i]; - } - } - } - return undefined; - } - - function getPlayers() { - var i; - var players = []; - if (players.length == 0) { - var tmp = document.getElementsByTagName('object'); - for (i = 0; i < tmp.length; i++) - { - if (typeof tmp[i].browserURLChange != "undefined") - players.push(tmp[i]); - } - } - if (players.length == 0 || players[0].object == null) { - var tmp = document.getElementsByTagName('embed'); - for (i = 0; i < tmp.length; i++) - { - if (typeof tmp[i].browserURLChange != "undefined") - players.push(tmp[i]); - } - } - return players; - } - - function getIframeHash() { - var doc = getHistoryFrame().contentWindow.document; - var hash = String(doc.location.search); - if (hash.length == 1 && hash.charAt(0) == "?") { - hash = ""; - } - else if (hash.length >= 2 && hash.charAt(0) == "?") { - hash = hash.substring(1); - } - return hash; - } - - /* Get the current location hash excluding the '#' symbol. */ - function getHash() { - // It would be nice if we could use document.location.hash here, - // but it's faulty sometimes. - var idx = document.location.href.indexOf('#'); - return (idx >= 0) ? document.location.href.substr(idx+1) : ''; - } - - /* Get the current location hash excluding the '#' symbol. */ - function setHash(hash) { - // It would be nice if we could use document.location.hash here, - // but it's faulty sometimes. - if (hash == '') hash = '#' - document.location.hash = hash; - } - - function createState(baseUrl, newUrl, flexAppUrl) { - return { 'baseUrl': baseUrl, 'newUrl': newUrl, 'flexAppUrl': flexAppUrl, 'title': null }; - } - - /* Add a history entry to the browser. - * baseUrl: the portion of the location prior to the '#' - * newUrl: the entire new URL, including '#' and following fragment - * flexAppUrl: the portion of the location following the '#' only - */ - function addHistoryEntry(baseUrl, newUrl, flexAppUrl) { - - //delete all the history entries - forwardStack = []; - - if (browser.ie) { - //Check to see if we are being asked to do a navigate for the first - //history entry, and if so ignore, because it's coming from the creation - //of the history iframe - if (flexAppUrl == defaultHash && document.location.href == initialHref && window['_ie_firstload']) { - currentHref = initialHref; - return; - } - if ((!flexAppUrl || flexAppUrl == defaultHash) && window['_ie_firstload']) { - newUrl = baseUrl + '#' + defaultHash; - flexAppUrl = defaultHash; - } else { - // for IE, tell the history frame to go somewhere without a '#' - // in order to get this entry into the browser history. - getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl; - } - setHash(flexAppUrl); - } else { - - //ADR - if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) { - initialState = createState(baseUrl, newUrl, flexAppUrl); - } else if(backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) { - backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl); - } - - if (browser.safari && !browserHasHashChange) { - // for Safari, submit a form whose action points to the desired URL - if (browser.version <= 419.3) { - var file = window.location.pathname.toString(); - file = file.substring(file.lastIndexOf("/")+1); - getFormElement().innerHTML = '
'; - //get the current elements and add them to the form - var qs = window.location.search.substring(1); - var qs_arr = qs.split("&"); - for (var i = 0; i < qs_arr.length; i++) { - var tmp = qs_arr[i].split("="); - var elem = document.createElement("input"); - elem.type = "hidden"; - elem.name = tmp[0]; - elem.value = tmp[1]; - document.forms.historyForm.appendChild(elem); - } - document.forms.historyForm.submit(); - } else { - top.location.hash = flexAppUrl; - } - // We also have to maintain the history by hand for Safari - historyHash[history.length] = flexAppUrl; - _storeStates(); - } else { - // Otherwise, just tell the browser to go there - setHash(flexAppUrl); - } - } - backStack.push(createState(baseUrl, newUrl, flexAppUrl)); - } - - function _storeStates() { - if (browser.safari) { - getRememberElement().value = historyHash.join(","); - } - } - - function handleBackButton() { - //The "current" page is always at the top of the history stack. - var current = backStack.pop(); - if (!current) { return; } - var last = backStack[backStack.length - 1]; - if (!last && backStack.length == 0){ - last = initialState; - } - forwardStack.push(current); - } - - function handleForwardButton() { - //summary: private method. Do not call this directly. - - var last = forwardStack.pop(); - if (!last) { return; } - backStack.push(last); - } - - function handleArbitraryUrl() { - //delete all the history entries - forwardStack = []; - } - - /* Called periodically to poll to see if we need to detect navigation that has occurred */ - function checkForUrlChange() { - - if (browser.ie) { - if (currentHref != document.location.href && currentHref + '#' != document.location.href) { - //This occurs when the user has navigated to a specific URL - //within the app, and didn't use browser back/forward - //IE seems to have a bug where it stops updating the URL it - //shows the end-user at this point, but programatically it - //appears to be correct. Do a full app reload to get around - //this issue. - if (browser.version < 7) { - currentHref = document.location.href; - document.location.reload(); - } else { - if (getHash() != getIframeHash()) { - // this.iframe.src = this.blankURL + hash; - var sourceToSet = historyFrameSourcePrefix + getHash(); - getHistoryFrame().src = sourceToSet; - currentHref = document.location.href; - } - } - } - } - - if (browser.safari && !browserHasHashChange) { - // For Safari, we have to check to see if history.length changed. - if (currentHistoryLength >= 0 && history.length != currentHistoryLength) { - //alert("did change: " + history.length + ", " + historyHash.length + "|" + historyHash[history.length] + "|>" + historyHash.join("|")); - var flexAppUrl = getHash(); - if (browser.version < 528.16 /* Anything earlier than Safari 4.0 */) - { - // If it did change and we're running Safari 3.x or earlier, - // then we have to look the old state up in our hand-maintained - // array since document.location.hash won't have changed, - // then call back into BrowserManager. - currentHistoryLength = history.length; - flexAppUrl = historyHash[currentHistoryLength]; - } - - //ADR: to fix multiple - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { - var pl = getPlayers(); - for (var i = 0; i < pl.length; i++) { - pl[i].browserURLChange(flexAppUrl); - } - } else { - getPlayer().browserURLChange(flexAppUrl); - } - _storeStates(); - } - } - if (browser.firefox && !browserHasHashChange) { - if (currentHref != document.location.href) { - var bsl = backStack.length; - - var urlActions = { - back: false, - forward: false, - set: false - } - - if ((window.location.hash == initialHash || window.location.href == initialHref) && (bsl == 1)) { - urlActions.back = true; - // FIXME: could this ever be a forward button? - // we can't clear it because we still need to check for forwards. Ugg. - // clearInterval(this.locationTimer); - handleBackButton(); - } - - // first check to see if we could have gone forward. We always halt on - // a no-hash item. - if (forwardStack.length > 0) { - if (forwardStack[forwardStack.length-1].flexAppUrl == getHash()) { - urlActions.forward = true; - handleForwardButton(); - } - } - - // ok, that didn't work, try someplace back in the history stack - if ((bsl >= 2) && (backStack[bsl - 2])) { - if (backStack[bsl - 2].flexAppUrl == getHash()) { - urlActions.back = true; - handleBackButton(); - } - } - - if (!urlActions.back && !urlActions.forward) { - var foundInStacks = { - back: -1, - forward: -1 - } - - for (var i = 0; i < backStack.length; i++) { - if (backStack[i].flexAppUrl == getHash() && i != (bsl - 2)) { - arbitraryUrl = true; - foundInStacks.back = i; - } - } - for (var i = 0; i < forwardStack.length; i++) { - if (forwardStack[i].flexAppUrl == getHash() && i != (bsl - 2)) { - arbitraryUrl = true; - foundInStacks.forward = i; - } - } - handleArbitraryUrl(); - } - - // Firefox changed; do a callback into BrowserManager to tell it. - currentHref = document.location.href; - var flexAppUrl = getHash(); - //ADR: to fix multiple - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { - var pl = getPlayers(); - for (var i = 0; i < pl.length; i++) { - pl[i].browserURLChange(flexAppUrl); - } - } else { - getPlayer().browserURLChange(flexAppUrl); - } - } - } - } - - var _initialize = function () { - - browserHasHashChange = ("onhashchange" in document.body); - - if (browser.ie) - { - var scripts = document.getElementsByTagName('script'); - for (var i = 0, s; s = scripts[i]; i++) { - if (s.src.indexOf("history.js") > -1) { - var iframe_location = (new String(s.src)).replace("history.js", "historyFrame.html"); - } - } - historyFrameSourcePrefix = iframe_location + "?"; - var src = historyFrameSourcePrefix; - - var iframe = document.createElement("iframe"); - iframe.id = 'ie_historyFrame'; - iframe.name = 'ie_historyFrame'; - iframe.src = 'javascript:false;'; - - try { - document.body.appendChild(iframe); - } catch(e) { - setTimeout(function() { - document.body.appendChild(iframe); - }, 0); - } - } - - if (browser.safari && !browserHasHashChange) - { - var rememberDiv = document.createElement("div"); - rememberDiv.id = 'safari_rememberDiv'; - document.body.appendChild(rememberDiv); - rememberDiv.innerHTML = ''; - - var formDiv = document.createElement("div"); - formDiv.id = 'safari_formDiv'; - document.body.appendChild(formDiv); - - var reloader_content = document.createElement('div'); - reloader_content.id = 'safarireloader'; - var scripts = document.getElementsByTagName('script'); - for (var i = 0, s; s = scripts[i]; i++) { - if (s.src.indexOf("history.js") > -1) { - html = (new String(s.src)).replace(".js", ".html"); - } - } - reloader_content.innerHTML = ''; - document.body.appendChild(reloader_content); - reloader_content.style.position = 'absolute'; - reloader_content.style.left = reloader_content.style.top = '-9999px'; - iframe = reloader_content.getElementsByTagName('iframe')[0]; - - if (document.getElementById("safari_remember_field").value != "" ) { - historyHash = document.getElementById("safari_remember_field").value.split(","); - } - } - - if (browserHasHashChange) - document.body.onhashchange = hashChangeHandler; - } - - return { - historyHash: historyHash, - backStack: function() { return backStack; }, - forwardStack: function() { return forwardStack }, - getPlayer: getPlayer, - initialize: function(src) { - _initialize(src); - }, - setURL: function(url) { - document.location.href = url; - }, - getURL: function() { - return document.location.href; - }, - getTitle: function() { - return document.title; - }, - setTitle: function(title) { - try { - backStack[backStack.length - 1].title = title; - } catch(e) { } - //if on safari, set the title to be the empty string. - if (browser.safari) { - if (title == "") { - try { - var tmp = window.location.href.toString(); - title = tmp.substring((tmp.lastIndexOf("/")+1), tmp.lastIndexOf("#")); - } catch(e) { - title = ""; - } - } - } - document.title = title; - }, - setDefaultURL: function(def) - { - defaultHash = def; - def = getHash(); - //trailing ? is important else an extra frame gets added to the history - //when navigating back to the first page. Alternatively could check - //in history frame navigation to compare # and ?. - if (browser.ie) - { - window['_ie_firstload'] = true; - var sourceToSet = historyFrameSourcePrefix + def; - var func = function() { - getHistoryFrame().src = sourceToSet; - window.location.replace("#" + def); - setInterval(checkForUrlChange, 50); - } - try { - func(); - } catch(e) { - window.setTimeout(function() { func(); }, 0); - } - } - - if (browser.safari) - { - currentHistoryLength = history.length; - if (historyHash.length == 0) { - historyHash[currentHistoryLength] = def; - var newloc = "#" + def; - window.location.replace(newloc); - } else { - //alert(historyHash[historyHash.length-1]); - } - setInterval(checkForUrlChange, 50); - } - - - if (browser.firefox || browser.opera) - { - var reg = new RegExp("#" + def + "$"); - if (window.location.toString().match(reg)) { - } else { - var newloc ="#" + def; - window.location.replace(newloc); - } - setInterval(checkForUrlChange, 50); - } - - }, - - /* Set the current browser URL; called from inside BrowserManager to propagate - * the application state out to the container. - */ - setBrowserURL: function(flexAppUrl, objectId) { - if (browser.ie && typeof objectId != "undefined") { - currentObjectId = objectId; - } - //fromIframe = fromIframe || false; - //fromFlex = fromFlex || false; - //alert("setBrowserURL: " + flexAppUrl); - //flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ; - - var pos = document.location.href.indexOf('#'); - var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : document.location.href; - var newUrl = baseUrl + '#' + flexAppUrl; - - if (document.location.href != newUrl && document.location.href + '#' != newUrl) { - currentHref = newUrl; - addHistoryEntry(baseUrl, newUrl, flexAppUrl); - currentHistoryLength = history.length; - } - }, - - browserURLChange: function(flexAppUrl) { - var objectId = null; - if (browser.ie && currentObjectId != null) { - objectId = currentObjectId; - } - - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { - var pl = getPlayers(); - for (var i = 0; i < pl.length; i++) { - try { - pl[i].browserURLChange(flexAppUrl); - } catch(e) { } - } - } else { - try { - getPlayer(objectId).browserURLChange(flexAppUrl); - } catch(e) { } - } - - currentObjectId = null; - }, - getUserAgent: function() { - return navigator.userAgent; - }, - getPlatform: function() { - return navigator.platform; - } - - } - -})(); - -// Initialization - -// Automated unit testing and other diagnostics - -function setURL(url) -{ - document.location.href = url; -} - -function backButton() -{ - history.back(); -} - -function forwardButton() -{ - history.forward(); -} - -function goForwardOrBackInHistory(step) -{ - history.go(step); -} - -//BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); }); -(function(i) { - var u =navigator.userAgent;var e=/*@cc_on!@*/false; - var st = setTimeout; - if(/webkit/i.test(u)){ - st(function(){ - var dr=document.readyState; - if(dr=="loaded"||dr=="complete"){i()} - else{st(arguments.callee,10);}},10); - } else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){ - document.addEventListener("DOMContentLoaded",i,false); - } else if(e){ - (function(){ - var t=document.createElement('doc:rdy'); - try{t.doScroll('left'); - i();t=null; - }catch(e){st(arguments.callee,0);}})(); - } else{ - window.onload=i; - } -})( function() {BrowserHistory.initialize();} ); diff --git a/html-template/history/historyFrame.html b/html-template/history/historyFrame.html deleted file mode 100644 index 07e3806..0000000 --- a/html-template/history/historyFrame.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - Hidden frame for Browser History support. - - diff --git a/html-template/index.template.html b/html-template/index.template.html deleted file mode 100644 index 478758f..0000000 --- a/html-template/index.template.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - ${title} - - - - - - - - - - - - - -
-

- To view this page ensure that Adobe Flash Player version - ${version_major}.${version_minor}.${version_revision} or greater is installed. -

- -
- - - - diff --git a/html-template/playerProductInstall.swf b/html-template/playerProductInstall.swf deleted file mode 100644 index bdc3437..0000000 Binary files a/html-template/playerProductInstall.swf and /dev/null differ diff --git a/html-template/swfobject.js b/html-template/swfobject.js deleted file mode 100644 index bf35c07..0000000 --- a/html-template/swfobject.js +++ /dev/null @@ -1,777 +0,0 @@ -/*! SWFObject v2.2 - is released under the MIT License -*/ - -var swfobject = function() { - - var UNDEF = "undefined", - OBJECT = "object", - SHOCKWAVE_FLASH = "Shockwave Flash", - SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash", - FLASH_MIME_TYPE = "application/x-shockwave-flash", - EXPRESS_INSTALL_ID = "SWFObjectExprInst", - ON_READY_STATE_CHANGE = "onreadystatechange", - - win = window, - doc = document, - nav = navigator, - - plugin = false, - domLoadFnArr = [main], - regObjArr = [], - objIdArr = [], - listenersArr = [], - storedAltContent, - storedAltContentId, - storedCallbackFn, - storedCallbackObj, - isDomLoaded = false, - isExpressInstallActive = false, - dynamicStylesheet, - dynamicStylesheetMedia, - autoHideShow = true, - - /* Centralized function for browser feature detection - - User agent string detection is only used when no good alternative is possible - - Is executed directly for optimal performance - */ - ua = function() { - var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF, - u = nav.userAgent.toLowerCase(), - p = nav.platform.toLowerCase(), - windows = p ? /win/.test(p) : /win/.test(u), - mac = p ? /mac/.test(p) : /mac/.test(u), - webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit - ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html - playerVersion = [0,0,0], - d = null; - if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) { - d = nav.plugins[SHOCKWAVE_FLASH].description; - if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+ - plugin = true; - ie = false; // cascaded feature detection for Internet Explorer - d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1"); - playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10); - playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10); - playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0; - } - } - else if (typeof win.ActiveXObject != UNDEF) { - try { - var a = new ActiveXObject(SHOCKWAVE_FLASH_AX); - if (a) { // a will return null when ActiveX is disabled - d = a.GetVariable("$version"); - if (d) { - ie = true; // cascaded feature detection for Internet Explorer - d = d.split(" ")[1].split(","); - playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; - } - } - } - catch(e) {} - } - return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac }; - }(), - - /* Cross-browser onDomLoad - - Will fire an event as soon as the DOM of a web page is loaded - - Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/ - - Regular onload serves as fallback - */ - onDomLoad = function() { - if (!ua.w3) { return; } - if ((typeof doc.readyState != UNDEF && doc.readyState == "complete") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically - callDomLoadFunctions(); - } - if (!isDomLoaded) { - if (typeof doc.addEventListener != UNDEF) { - doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false); - } - if (ua.ie && ua.win) { - doc.attachEvent(ON_READY_STATE_CHANGE, function() { - if (doc.readyState == "complete") { - doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee); - callDomLoadFunctions(); - } - }); - if (win == top) { // if not inside an iframe - (function(){ - if (isDomLoaded) { return; } - try { - doc.documentElement.doScroll("left"); - } - catch(e) { - setTimeout(arguments.callee, 0); - return; - } - callDomLoadFunctions(); - })(); - } - } - if (ua.wk) { - (function(){ - if (isDomLoaded) { return; } - if (!/loaded|complete/.test(doc.readyState)) { - setTimeout(arguments.callee, 0); - return; - } - callDomLoadFunctions(); - })(); - } - addLoadEvent(callDomLoadFunctions); - } - }(); - - function callDomLoadFunctions() { - if (isDomLoaded) { return; } - try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early - var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span")); - t.parentNode.removeChild(t); - } - catch (e) { return; } - isDomLoaded = true; - var dl = domLoadFnArr.length; - for (var i = 0; i < dl; i++) { - domLoadFnArr[i](); - } - } - - function addDomLoadEvent(fn) { - if (isDomLoaded) { - fn(); - } - else { - domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+ - } - } - - /* Cross-browser onload - - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/ - - Will fire an event as soon as a web page including all of its assets are loaded - */ - function addLoadEvent(fn) { - if (typeof win.addEventListener != UNDEF) { - win.addEventListener("load", fn, false); - } - else if (typeof doc.addEventListener != UNDEF) { - doc.addEventListener("load", fn, false); - } - else if (typeof win.attachEvent != UNDEF) { - addListener(win, "onload", fn); - } - else if (typeof win.onload == "function") { - var fnOld = win.onload; - win.onload = function() { - fnOld(); - fn(); - }; - } - else { - win.onload = fn; - } - } - - /* Main function - - Will preferably execute onDomLoad, otherwise onload (as a fallback) - */ - function main() { - if (plugin) { - testPlayerVersion(); - } - else { - matchVersions(); - } - } - - /* Detect the Flash Player version for non-Internet Explorer browsers - - Detecting the plug-in version via the object element is more precise than using the plugins collection item's description: - a. Both release and build numbers can be detected - b. Avoid wrong descriptions by corrupt installers provided by Adobe - c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports - - Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available - */ - function testPlayerVersion() { - var b = doc.getElementsByTagName("body")[0]; - var o = createElement(OBJECT); - o.setAttribute("type", FLASH_MIME_TYPE); - var t = b.appendChild(o); - if (t) { - var counter = 0; - (function(){ - if (typeof t.GetVariable != UNDEF) { - var d = t.GetVariable("$version"); - if (d) { - d = d.split(" ")[1].split(","); - ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; - } - } - else if (counter < 10) { - counter++; - setTimeout(arguments.callee, 10); - return; - } - b.removeChild(o); - t = null; - matchVersions(); - })(); - } - else { - matchVersions(); - } - } - - /* Perform Flash Player and SWF version matching; static publishing only - */ - function matchVersions() { - var rl = regObjArr.length; - if (rl > 0) { - for (var i = 0; i < rl; i++) { // for each registered object element - var id = regObjArr[i].id; - var cb = regObjArr[i].callbackFn; - var cbObj = {success:false, id:id}; - if (ua.pv[0] > 0) { - var obj = getElementById(id); - if (obj) { - if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match! - setVisibility(id, true); - if (cb) { - cbObj.success = true; - cbObj.ref = getObjectById(id); - cb(cbObj); - } - } - else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported - var att = {}; - att.data = regObjArr[i].expressInstall; - att.width = obj.getAttribute("width") || "0"; - att.height = obj.getAttribute("height") || "0"; - if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); } - if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); } - // parse HTML object param element's name-value pairs - var par = {}; - var p = obj.getElementsByTagName("param"); - var pl = p.length; - for (var j = 0; j < pl; j++) { - if (p[j].getAttribute("name").toLowerCase() != "movie") { - par[p[j].getAttribute("name")] = p[j].getAttribute("value"); - } - } - showExpressInstall(att, par, id, cb); - } - else { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF - displayAltContent(obj); - if (cb) { cb(cbObj); } - } - } - } - else { // if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content) - setVisibility(id, true); - if (cb) { - var o = getObjectById(id); // test whether there is an HTML object element or not - if (o && typeof o.SetVariable != UNDEF) { - cbObj.success = true; - cbObj.ref = o; - } - cb(cbObj); - } - } - } - } - } - - function getObjectById(objectIdStr) { - var r = null; - var o = getElementById(objectIdStr); - if (o && o.nodeName == "OBJECT") { - if (typeof o.SetVariable != UNDEF) { - r = o; - } - else { - var n = o.getElementsByTagName(OBJECT)[0]; - if (n) { - r = n; - } - } - } - return r; - } - - /* Requirements for Adobe Express Install - - only one instance can be active at a time - - fp 6.0.65 or higher - - Win/Mac OS only - - no Webkit engines older than version 312 - */ - function canExpressInstall() { - return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312); - } - - /* Show the Adobe Express Install dialog - - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75 - */ - function showExpressInstall(att, par, replaceElemIdStr, callbackFn) { - isExpressInstallActive = true; - storedCallbackFn = callbackFn || null; - storedCallbackObj = {success:false, id:replaceElemIdStr}; - var obj = getElementById(replaceElemIdStr); - if (obj) { - if (obj.nodeName == "OBJECT") { // static publishing - storedAltContent = abstractAltContent(obj); - storedAltContentId = null; - } - else { // dynamic publishing - storedAltContent = obj; - storedAltContentId = replaceElemIdStr; - } - att.id = EXPRESS_INSTALL_ID; - if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; } - if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; } - doc.title = doc.title.slice(0, 47) + " - Flash Player Installation"; - var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn", - fv = "MMredirectURL=" + encodeURI(window.location).toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title; - if (typeof par.flashvars != UNDEF) { - par.flashvars += "&" + fv; - } - else { - par.flashvars = fv; - } - // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it, - // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work - if (ua.ie && ua.win && obj.readyState != 4) { - var newObj = createElement("div"); - replaceElemIdStr += "SWFObjectNew"; - newObj.setAttribute("id", replaceElemIdStr); - obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf - obj.style.display = "none"; - (function(){ - if (obj.readyState == 4) { - obj.parentNode.removeChild(obj); - } - else { - setTimeout(arguments.callee, 10); - } - })(); - } - createSWF(att, par, replaceElemIdStr); - } - } - - /* Functions to abstract and display alternative content - */ - function displayAltContent(obj) { - if (ua.ie && ua.win && obj.readyState != 4) { - // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it, - // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work - var el = createElement("div"); - obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content - el.parentNode.replaceChild(abstractAltContent(obj), el); - obj.style.display = "none"; - (function(){ - if (obj.readyState == 4) { - obj.parentNode.removeChild(obj); - } - else { - setTimeout(arguments.callee, 10); - } - })(); - } - else { - obj.parentNode.replaceChild(abstractAltContent(obj), obj); - } - } - - function abstractAltContent(obj) { - var ac = createElement("div"); - if (ua.win && ua.ie) { - ac.innerHTML = obj.innerHTML; - } - else { - var nestedObj = obj.getElementsByTagName(OBJECT)[0]; - if (nestedObj) { - var c = nestedObj.childNodes; - if (c) { - var cl = c.length; - for (var i = 0; i < cl; i++) { - if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) { - ac.appendChild(c[i].cloneNode(true)); - } - } - } - } - } - return ac; - } - - /* Cross-browser dynamic SWF creation - */ - function createSWF(attObj, parObj, id) { - var r, el = getElementById(id); - if (ua.wk && ua.wk < 312) { return r; } - if (el) { - if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content - attObj.id = id; - } - if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML - var att = ""; - for (var i in attObj) { - if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries - if (i.toLowerCase() == "data") { - parObj.movie = attObj[i]; - } - else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword - att += ' class="' + attObj[i] + '"'; - } - else if (i.toLowerCase() != "classid") { - att += ' ' + i + '="' + attObj[i] + '"'; - } - } - } - var par = ""; - for (var j in parObj) { - if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries - par += ''; - } - } - el.outerHTML = '' + par + ''; - objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only) - r = getElementById(attObj.id); - } - else { // well-behaving browsers - var o = createElement(OBJECT); - o.setAttribute("type", FLASH_MIME_TYPE); - for (var m in attObj) { - if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries - if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword - o.setAttribute("class", attObj[m]); - } - else if (m.toLowerCase() != "classid") { // filter out IE specific attribute - o.setAttribute(m, attObj[m]); - } - } - } - for (var n in parObj) { - if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element - createObjParam(o, n, parObj[n]); - } - } - el.parentNode.replaceChild(o, el); - r = o; - } - } - return r; - } - - function createObjParam(el, pName, pValue) { - var p = createElement("param"); - p.setAttribute("name", pName); - p.setAttribute("value", pValue); - el.appendChild(p); - } - - /* Cross-browser SWF removal - - Especially needed to safely and completely remove a SWF in Internet Explorer - */ - function removeSWF(id) { - var obj = getElementById(id); - if (obj && obj.nodeName == "OBJECT") { - if (ua.ie && ua.win) { - obj.style.display = "none"; - (function(){ - if (obj.readyState == 4) { - removeObjectInIE(id); - } - else { - setTimeout(arguments.callee, 10); - } - })(); - } - else { - obj.parentNode.removeChild(obj); - } - } - } - - function removeObjectInIE(id) { - var obj = getElementById(id); - if (obj) { - for (var i in obj) { - if (typeof obj[i] == "function") { - obj[i] = null; - } - } - obj.parentNode.removeChild(obj); - } - } - - /* Functions to optimize JavaScript compression - */ - function getElementById(id) { - var el = null; - try { - el = doc.getElementById(id); - } - catch (e) {} - return el; - } - - function createElement(el) { - return doc.createElement(el); - } - - /* Updated attachEvent function for Internet Explorer - - Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks - */ - function addListener(target, eventType, fn) { - target.attachEvent(eventType, fn); - listenersArr[listenersArr.length] = [target, eventType, fn]; - } - - /* Flash Player and SWF content version matching - */ - function hasPlayerVersion(rv) { - var pv = ua.pv, v = rv.split("."); - v[0] = parseInt(v[0], 10); - v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0" - v[2] = parseInt(v[2], 10) || 0; - return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false; - } - - /* Cross-browser dynamic CSS creation - - Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php - */ - function createCSS(sel, decl, media, newStyle) { - if (ua.ie && ua.mac) { return; } - var h = doc.getElementsByTagName("head")[0]; - if (!h) { return; } // to also support badly authored HTML pages that lack a head element - var m = (media && typeof media == "string") ? media : "screen"; - if (newStyle) { - dynamicStylesheet = null; - dynamicStylesheetMedia = null; - } - if (!dynamicStylesheet || dynamicStylesheetMedia != m) { - // create dynamic stylesheet + get a global reference to it - var s = createElement("style"); - s.setAttribute("type", "text/css"); - s.setAttribute("media", m); - dynamicStylesheet = h.appendChild(s); - if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) { - dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1]; - } - dynamicStylesheetMedia = m; - } - // add style rule - if (ua.ie && ua.win) { - if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) { - dynamicStylesheet.addRule(sel, decl); - } - } - else { - if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) { - dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}")); - } - } - } - - function setVisibility(id, isVisible) { - if (!autoHideShow) { return; } - var v = isVisible ? "visible" : "hidden"; - if (isDomLoaded && getElementById(id)) { - getElementById(id).style.visibility = v; - } - else { - createCSS("#" + id, "visibility:" + v); - } - } - - /* Filter to avoid XSS attacks - */ - function urlEncodeIfNecessary(s) { - var regex = /[\\\"<>\.;]/; - var hasBadChars = regex.exec(s) != null; - return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s; - } - - /* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only) - */ - var cleanup = function() { - if (ua.ie && ua.win) { - window.attachEvent("onunload", function() { - // remove listeners to avoid memory leaks - var ll = listenersArr.length; - for (var i = 0; i < ll; i++) { - listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]); - } - // cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect - var il = objIdArr.length; - for (var j = 0; j < il; j++) { - removeSWF(objIdArr[j]); - } - // cleanup library's main closures to avoid memory leaks - for (var k in ua) { - ua[k] = null; - } - ua = null; - for (var l in swfobject) { - swfobject[l] = null; - } - swfobject = null; - }); - } - }(); - - return { - /* Public API - - Reference: http://code.google.com/p/swfobject/wiki/documentation - */ - registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) { - if (ua.w3 && objectIdStr && swfVersionStr) { - var regObj = {}; - regObj.id = objectIdStr; - regObj.swfVersion = swfVersionStr; - regObj.expressInstall = xiSwfUrlStr; - regObj.callbackFn = callbackFn; - regObjArr[regObjArr.length] = regObj; - setVisibility(objectIdStr, false); - } - else if (callbackFn) { - callbackFn({success:false, id:objectIdStr}); - } - }, - - getObjectById: function(objectIdStr) { - if (ua.w3) { - return getObjectById(objectIdStr); - } - }, - - embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) { - var callbackObj = {success:false, id:replaceElemIdStr}; - if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) { - setVisibility(replaceElemIdStr, false); - addDomLoadEvent(function() { - widthStr += ""; // auto-convert to string - heightStr += ""; - var att = {}; - if (attObj && typeof attObj === OBJECT) { - for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs - att[i] = attObj[i]; - } - } - att.data = swfUrlStr; - att.width = widthStr; - att.height = heightStr; - var par = {}; - if (parObj && typeof parObj === OBJECT) { - for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs - par[j] = parObj[j]; - } - } - if (flashvarsObj && typeof flashvarsObj === OBJECT) { - for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs - if (typeof par.flashvars != UNDEF) { - par.flashvars += "&" + k + "=" + flashvarsObj[k]; - } - else { - par.flashvars = k + "=" + flashvarsObj[k]; - } - } - } - if (hasPlayerVersion(swfVersionStr)) { // create SWF - var obj = createSWF(att, par, replaceElemIdStr); - if (att.id == replaceElemIdStr) { - setVisibility(replaceElemIdStr, true); - } - callbackObj.success = true; - callbackObj.ref = obj; - } - else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install - att.data = xiSwfUrlStr; - showExpressInstall(att, par, replaceElemIdStr, callbackFn); - return; - } - else { // show alternative content - setVisibility(replaceElemIdStr, true); - } - if (callbackFn) { callbackFn(callbackObj); } - }); - } - else if (callbackFn) { callbackFn(callbackObj); } - }, - - switchOffAutoHideShow: function() { - autoHideShow = false; - }, - - ua: ua, - - getFlashPlayerVersion: function() { - return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] }; - }, - - hasFlashPlayerVersion: hasPlayerVersion, - - createSWF: function(attObj, parObj, replaceElemIdStr) { - if (ua.w3) { - return createSWF(attObj, parObj, replaceElemIdStr); - } - else { - return undefined; - } - }, - - showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) { - if (ua.w3 && canExpressInstall()) { - showExpressInstall(att, par, replaceElemIdStr, callbackFn); - } - }, - - removeSWF: function(objElemIdStr) { - if (ua.w3) { - removeSWF(objElemIdStr); - } - }, - - createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) { - if (ua.w3) { - createCSS(selStr, declStr, mediaStr, newStyleBoolean); - } - }, - - addDomLoadEvent: addDomLoadEvent, - - addLoadEvent: addLoadEvent, - - getQueryParamValue: function(param) { - var q = doc.location.search || doc.location.hash; - if (q) { - if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark - if (param == null) { - return urlEncodeIfNecessary(q); - } - var pairs = q.split("&"); - for (var i = 0; i < pairs.length; i++) { - if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) { - return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1))); - } - } - } - return ""; - }, - - // For internal usage only - expressInstallCallback: function() { - if (isExpressInstallActive) { - var obj = getElementById(EXPRESS_INSTALL_ID); - if (obj && storedAltContent) { - obj.parentNode.replaceChild(storedAltContent, obj); - if (storedAltContentId) { - setVisibility(storedAltContentId, true); - if (ua.ie && ua.win) { storedAltContent.style.display = "block"; } - } - if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); } - } - isExpressInstallActive = false; - } - } - }; -}(); diff --git a/release/CapsuleExample.swf b/release/CapsuleExample.swf new file mode 100644 index 0000000..7507b7f Binary files /dev/null and b/release/CapsuleExample.swf differ diff --git a/release/ConeExample.swf b/release/ConeExample.swf new file mode 100644 index 0000000..007f998 Binary files /dev/null and b/release/ConeExample.swf differ diff --git a/release/CubeExample.swf b/release/CubeExample.swf new file mode 100644 index 0000000..f884e87 Binary files /dev/null and b/release/CubeExample.swf differ diff --git a/release/CylinderExample.swf b/release/CylinderExample.swf new file mode 100644 index 0000000..69750ab Binary files /dev/null and b/release/CylinderExample.swf differ diff --git a/release/PlaneExample.swf b/release/PlaneExample.swf new file mode 100644 index 0000000..a0f176c Binary files /dev/null and b/release/PlaneExample.swf differ diff --git a/release/RegularPolygonExample.swf b/release/RegularPolygonExample.swf new file mode 100644 index 0000000..d0d7798 Binary files /dev/null and b/release/RegularPolygonExample.swf differ diff --git a/release/SkyBoxExample.swf b/release/SkyBoxExample.swf new file mode 100644 index 0000000..6834b13 Binary files /dev/null and b/release/SkyBoxExample.swf differ diff --git a/release/SphereExample.swf b/release/SphereExample.swf new file mode 100644 index 0000000..470c125 Binary files /dev/null and b/release/SphereExample.swf differ diff --git a/release/TorusExample.swf b/release/TorusExample.swf new file mode 100644 index 0000000..dcb75a3 Binary files /dev/null and b/release/TorusExample.swf differ diff --git a/release/WireframeCubeExample.swf b/release/WireframeCubeExample.swf new file mode 100644 index 0000000..a926cd5 Binary files /dev/null and b/release/WireframeCubeExample.swf differ diff --git a/release/WireframeCylinderExample.swf b/release/WireframeCylinderExample.swf new file mode 100644 index 0000000..3e825a6 Binary files /dev/null and b/release/WireframeCylinderExample.swf differ diff --git a/release/WireframePlaneExample.swf b/release/WireframePlaneExample.swf new file mode 100644 index 0000000..44fd0dd Binary files /dev/null and b/release/WireframePlaneExample.swf differ diff --git a/release/WireframeSphereExample.swf b/release/WireframeSphereExample.swf new file mode 100644 index 0000000..cb469fc Binary files /dev/null and b/release/WireframeSphereExample.swf differ diff --git a/src/Advanced_TerrainDemo.as b/src/Advanced_TerrainDemo.as index 58ada26..5e22938 100644 --- a/src/Advanced_TerrainDemo.as +++ b/src/Advanced_TerrainDemo.as @@ -59,7 +59,7 @@ package import flash.events.*; import flash.filters.*; import flash.text.*; - import flash.ui.*; + import flash.ui.*; [SWF(backgroundColor="#000000", frameRate="30", quality="LOW")] @@ -287,7 +287,7 @@ package { //create skybox. scene.addChild(new SkyBox(cubeTexture)); - + //create mountain like terrain terrain = new Elevation(terrainMaterial, Cast.bitmapData(HeightMap), 5000, 1300, 5000, 250, 250); scene.addChild(terrain); diff --git a/src/Intermediate_LightProbes.as b/src/Intermediate_LightProbes.as new file mode 100644 index 0000000..56f2688 --- /dev/null +++ b/src/Intermediate_LightProbes.as @@ -0,0 +1,420 @@ +/* + + Light probe usage in Away3D 4.0 + + Demonstrates: + + How to use the Loader3D object to load an embedded internal obj model. + How to use LightProbe objects in combination with StaticLightPicker to simulate indirect lighting + How to use shadow mapping with point lights + + Code by David Lenaerts + www.derschmale.com + + This code is distributed under the MIT License + + Copyright (c) + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the “Software”), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + + */ + +package +{ + import away3d.cameras.Camera3D; + import away3d.containers.Scene3D; + import away3d.containers.View3D; + import away3d.controllers.LookAtController; + import away3d.debug.AwayStats; + import away3d.entities.Mesh; + import away3d.events.AssetEvent; + import away3d.library.AssetLibrary; + import away3d.library.assets.AssetType; + import away3d.lights.LightProbe; + import away3d.lights.PointLight; + import away3d.loaders.misc.AssetLoaderContext; + import away3d.loaders.parsers.OBJParser; + import away3d.materials.LightSources; + import away3d.materials.TextureMaterial; + import away3d.materials.lightpickers.StaticLightPicker; + import away3d.materials.methods.FresnelSpecularMethod; + import away3d.materials.methods.HardShadowMapMethod; + import away3d.materials.methods.LightMapMethod; + import away3d.materials.methods.RimLightMethod; + import away3d.textures.BitmapTexture; + import away3d.textures.SpecularBitmapTexture; + + import cornell.CornellDiffuseEnvMapFL; + import cornell.CornellDiffuseEnvMapFR; + import cornell.CornellDiffuseEnvMapNL; + import cornell.CornellDiffuseEnvMapNR; + + import flash.display.Bitmap; + import flash.display.BitmapData; + + import flash.display.Sprite; + import flash.display.StageAlign; + import flash.display.StageScaleMode; + import flash.events.Event; + import flash.events.KeyboardEvent; + import flash.events.MouseEvent; + import flash.geom.Vector3D; + import flash.ui.Keyboard; + + [SWF(backgroundColor="#000000", frameRate="60")] + + public class Intermediate_LightProbes extends Sprite + { + //signature swf + [Embed(source="/../embeds/signature.swf", symbol="Signature")] + public var SignatureSwf : Class; + + // cornell baked lighting map + [Embed(source="/../embeds/cornell.obj", mimeType="application/octet-stream")] + private var CornellOBJ : Class; + + [Embed(source="/../embeds/head.obj", mimeType="application/octet-stream")] + private var HeadOBJ : Class; + + // cornell map with baked AO and irradiance + [Embed(source="/../embeds/cornell_baked.jpg")] + private var CornellTexture : Class; + + // cornell map with baked AO and irradiance + [Embed(source="/../embeds/cornellWallNormals.jpg")] + private var CornellNormals : Class; + + [Embed(source="/../embeds/head_diffuse.jpg")] + private var HeadAlbedo : Class; + + [Embed(source="/../embeds/head_normals.jpg")] + private var HeadNormals : Class; + + [Embed(source="/../embeds/head_specular.jpg")] + private var HeadSpecular : Class; + + [Embed(source="/../embeds/head_AO.jpg")] + private var HeadOcclusion : Class; + + //engine variables + private var scene : Scene3D; + private var camera : Camera3D; + private var view : View3D; + private var cameraController : LookAtController; + + //signature variables + private var Signature : Sprite; + private var SignatureBitmap : Bitmap; + + //light objects + private var mainLight : PointLight; + private var lightProbeFL : LightProbe; + private var lightProbeFR : LightProbe; + private var lightProbeNL : LightProbe; + private var lightProbeNR : LightProbe; + + private var mesh : Mesh; + + // movement related + private var xDir : Number = 0; + private var zDir : Number = 0; + private var speed : Number = 2; + private var mouseDown : Boolean; + private var referenceMouseX : Number; + + private var headTexture : BitmapTexture; + private var whiteTexture : BitmapTexture; + private var headMaterial : TextureMaterial; + + /** + * Constructor + */ + public function Intermediate_LightProbes() + { + init(); + } + + /** + * Global initialise function + */ + private function init() : void + { + initEngine(); + initLights(); + initObjects(); + initListeners(); + } + + /** + * Initialise the engine + */ + private function initEngine() : void + { + stage.scaleMode = StageScaleMode.NO_SCALE; + stage.align = StageAlign.TOP_LEFT; + + scene = new Scene3D(); + + camera = new Camera3D(); + camera.lens.far = 2000; + camera.lens.near = 20; + camera.lookAt(new Vector3D(0, 0, 1000)); + + view = new View3D(); + view.antiAlias = 16; + view.scene = scene; + view.camera = camera; + + //setup controller to be used on the camera + cameraController = new LookAtController(camera); + + //view.addSourceURL("srcview/index.html"); + addChild(view); + + //add signature + Signature = Sprite(new SignatureSwf()); + SignatureBitmap = new Bitmap(new BitmapData(Signature.width, Signature.height, true, 0)); + SignatureBitmap.bitmapData.draw(Signature); + addChild(SignatureBitmap); + + addChild(new AwayStats(view)); + } + + private function initLights() : void + { + mainLight = new PointLight(); + mainLight.castsShadows = true; + // maximum, small scene + mainLight.shadowMapper.depthMapSize = 1024; + mainLight.y = 120; + mainLight.color = 0xffffff; + mainLight.diffuse = 1; + mainLight.specular = 1; + mainLight.radius = 400; + mainLight.fallOff = 500; + mainLight.ambient = 0xa0a0c0; + mainLight.ambient = .5; + scene.addChild(mainLight); + + // each map was taken at position +/-75, 0, +-/75 + lightProbeFL = new LightProbe(new CornellDiffuseEnvMapFL()); + lightProbeFL.x = -75; + lightProbeFL.z = 75; + scene.addChild(lightProbeFL); + lightProbeFR = new LightProbe(new CornellDiffuseEnvMapFR()); + lightProbeFR.x = 75; + lightProbeFR.z = 75; + scene.addChild(lightProbeFR); + lightProbeNL = new LightProbe(new CornellDiffuseEnvMapNL()); + lightProbeNL.x = -75; + lightProbeNL.z = -75; + scene.addChild(lightProbeNL); + lightProbeNR = new LightProbe(new CornellDiffuseEnvMapNR()); + lightProbeNR.x = 75; + lightProbeNR.z = -75; + scene.addChild(lightProbeNR); + } + + /** + * Initialise the listeners + */ + private function initListeners() : void + { + addEventListener(Event.ENTER_FRAME, onEnterFrame); + stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp); + stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); + stage.addEventListener(Event.RESIZE, onResize); + stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); + stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); + onResize(); + } + + private function onMouseDown(event : MouseEvent) : void + { + mouseDown = true; + referenceMouseX = stage.mouseX; + } + + private function onMouseUp(event : MouseEvent) : void + { + mouseDown = false; + } + + /** + * Navigation and render loop + */ + private function onEnterFrame(event : Event) : void + { + if (!mouseDown) { + camera.x = camera.x*.9 + (stage.stageWidth*.5 - mouseX)*.05; + camera.y = camera.y*.9 + (stage.stageHeight*.5 - mouseY)*.05; + camera.z = - 300; + } + + if (mesh) { + if (mouseDown) { + mesh.rotationY += (referenceMouseX - stage.mouseX)/5 + referenceMouseX = stage.mouseX; + } + mesh.x += xDir*speed; + mesh.z += zDir*speed; + if (mesh.x < -75) mesh.x = -75; + else if (mesh.x > 75) mesh.x = 75; + if (mesh.z < -75) mesh.z = -75; + else if (mesh.z > 75) mesh.z = 75; + } + + cameraController.update(); + + view.render(); + } + + /** + * Initialise the scene objects + */ + private function initObjects() : void + { + AssetLibrary.enableParser(OBJParser); + + AssetLibrary.addEventListener(AssetEvent.ASSET_COMPLETE, onCornellComplete); + AssetLibrary.loadData(CornellOBJ); + } + + /** + * Listener function for asset complete event on loader + */ + private function onCornellComplete(event : AssetEvent) : void + { + var material : TextureMaterial; + var mesh : Mesh; + + if (event.asset.assetType == AssetType.MESH) { + mesh = Mesh(event.asset); + //create material object and assign it to our mesh + material = new TextureMaterial(new BitmapTexture(new CornellTexture().bitmapData)); + material.normalMap = new BitmapTexture(new CornellNormals().bitmapData); + material.lightPicker = new StaticLightPicker([mainLight]); + material.shadowMethod = new HardShadowMapMethod(mainLight); + material.specular = .25; + material.gloss = 20; + mesh.material = material; + mesh.scale(100); + mesh.geometry.subGeometries[0].autoDeriveVertexNormals = true; + + scene.addChild(mesh); + + AssetLibrary.removeEventListener(AssetEvent.ASSET_COMPLETE, onCornellComplete); + AssetLibrary.addEventListener(AssetEvent.ASSET_COMPLETE, onHeadComplete); + AssetLibrary.loadData(HeadOBJ, new AssetLoaderContext(false)); + } + } + + /** + * Listener function for asset complete event on loader + */ + private function onHeadComplete(event : AssetEvent) : void + { + var specularMethod : FresnelSpecularMethod; + + if (event.asset.assetType == AssetType.MESH) { + mesh = Mesh(event.asset); + //create material object and assign it to our mesh + headTexture = new BitmapTexture(new HeadAlbedo().bitmapData); + whiteTexture = new BitmapTexture(new BitmapData(512, 512, false, 0xbbbbaa)); + headMaterial = new TextureMaterial(headTexture); + headMaterial.normalMap = new BitmapTexture(new HeadNormals().bitmapData); + headMaterial.specularMap = new SpecularBitmapTexture(new HeadSpecular().bitmapData); + specularMethod = new FresnelSpecularMethod(); + specularMethod.normalReflectance = .2; + headMaterial.specularMethod = specularMethod; + headMaterial.gloss = 10; + headMaterial.addMethod(new RimLightMethod(0xffffff, .4, 5, RimLightMethod.ADD)); + headMaterial.addMethod(new LightMapMethod(new BitmapTexture(new HeadOcclusion().bitmapData))); + headMaterial.lightPicker = new StaticLightPicker([mainLight, lightProbeFL, lightProbeFR, lightProbeNL, lightProbeNR]); + headMaterial.diffuseLightSources = LightSources.PROBES; + headMaterial.specularLightSources = LightSources.LIGHTS; + + // turn off ambient contribution from lights, it's included in the probes' contribution + headMaterial.ambient = 0; + mesh.scale(20); + mesh.material = headMaterial; + cameraController.lookAtObject = mesh; + scene.addChild(mesh); + } + } + + /** + * Key down listener for animation + */ + private function onKeyDown(event : KeyboardEvent) : void + { + switch (event.keyCode) { + case Keyboard.UP: + zDir = 1; + break; + case Keyboard.DOWN: + zDir = -1; + break; + case Keyboard.LEFT: + xDir = -1; + break; + case Keyboard.RIGHT: + xDir = 1; + break; + } + } + + private function onKeyUp(event : KeyboardEvent) : void + { + switch (event.keyCode) { + case Keyboard.UP: + case Keyboard.DOWN: + zDir = 0; + break; + case Keyboard.LEFT: + case Keyboard.RIGHT: + xDir = 0; + break; + case Keyboard.SPACE: + switchTextures(); + break; + } + } + + private function switchTextures() : void + { + if (!headMaterial) return; + + if (headMaterial.texture == whiteTexture) + headMaterial.texture = headTexture; + else + headMaterial.texture = whiteTexture; + } + + /** + * stage listener for resize events + */ + private function onResize(event : Event = null) : void + { + view.width = stage.stageWidth; + view.height = stage.stageHeight; + SignatureBitmap.y = stage.stageHeight - Signature.height; + } + } +} diff --git a/src/away3d/primitives/CapsuleExample.as b/src/away3d/primitives/CapsuleExample.as new file mode 100644 index 0000000..00652f0 --- /dev/null +++ b/src/away3d/primitives/CapsuleExample.as @@ -0,0 +1,110 @@ +package away3d.primitives +{ + import flash.display.DisplayObject; + import flash.display.Sprite; + import flash.events.Event; + import flash.utils.getTimer; + + import away3d.cameras.Camera3D; + import away3d.containers.View3D; + import away3d.debug.AwayStats; + import away3d.entities.Mesh; + import away3d.lights.DirectionalLight; + import away3d.lights.LightBase; + import away3d.materials.ColorMaterial; + import away3d.tools.helpers.LightsHelper; + + + [SWF(backgroundColor="#000000", frameRate="30", quality="LOW")] + public class CapsuleExample extends Sprite + { + + protected var view:View3D; + protected var geo:Mesh; + protected var lastTime:int; + + + public function CapsuleExample() + { + super(); + + // create a viewport and add it to the stage + view = new View3D(); + view.backgroundColor = 0x2a2a2a; + addChild(view); + + // add geometry to the scene + geo = createGeo(); + view.scene.addChild(geo); + + // add lighting to the scene + const lights:Vector. = createLights(); + for (var i:uint = 0; i < lights.length; i++) + view.scene.addChild(lights[i]); + + // apply lighting to geometry + LightsHelper.addStaticLightsToMaterials(geo, lights); + + // set the camera and object for a good view + const cam:Camera3D = view.camera; + cam.z = -240; + cam.lookAt(geo.position); + geo.rotationX = -30; + + // add debug stats + const stats:DisplayObject = addChild(new AwayStats(view)); + stats.x = stage.stageWidth - stats.width; + stats.y = 0; + + // listen for enterframe to to render updates + addEventListener(Event.ENTER_FRAME, update); + } + + protected function createGeo():Mesh + { + const geometry:CapsuleGeometry = new CapsuleGeometry(); + const material:ColorMaterial = new ColorMaterial(); + const mesh:Mesh = new Mesh(geometry, material); + + return mesh; + } + + protected function createLights():Vector. + { + // simple two-point light setup: key, fill + const key:DirectionalLight = new DirectionalLight(.5, -1, .75); + key.color = 0xffffff; + key.ambient = 0; + key.diffuse = .75; + key.specular = .4; + + const fill:DirectionalLight = new DirectionalLight(-1, .5, .75); + fill.color = 0xffffff; + fill.ambient = 0; + fill.diffuse = .25; + fill.specular = 0; + + const lights:Vector. = new [key, fill]; + return lights; + } + + protected function get elapsed():Number + { + const now:int = getTimer(); + const value:Number = (lastTime ? (now - lastTime) : now) * .001; // seconds elapsed + lastTime = now; + return value; + } + + protected function update(e:Event):void + { + const s:Number = elapsed; + + // apply rotations and render + geo.rotationX += 7 * s; // degrees per second + geo.rotationY += 12 * s; // degrees per second + + view.render(); + } + } +} diff --git a/src/away3d/primitives/ConeExample.as b/src/away3d/primitives/ConeExample.as new file mode 100644 index 0000000..0d8f364 --- /dev/null +++ b/src/away3d/primitives/ConeExample.as @@ -0,0 +1,110 @@ +package away3d.primitives +{ + import flash.display.DisplayObject; + import flash.display.Sprite; + import flash.events.Event; + import flash.utils.getTimer; + + import away3d.cameras.Camera3D; + import away3d.containers.View3D; + import away3d.debug.AwayStats; + import away3d.entities.Mesh; + import away3d.lights.DirectionalLight; + import away3d.lights.LightBase; + import away3d.materials.ColorMaterial; + import away3d.tools.helpers.LightsHelper; + + + [SWF(backgroundColor="#000000", frameRate="30", quality="LOW")] + public class ConeExample extends Sprite + { + + protected var view:View3D; + protected var geo:Mesh; + protected var lastTime:int; + + + public function ConeExample() + { + super(); + + // create a viewport and add it to the stage + view = new View3D(); + view.backgroundColor = 0x2a2a2a; + addChild(view); + + // add geometry to the scene + geo = createGeo(); + view.scene.addChild(geo); + + // add lighting to the scene + const lights:Vector. = createLights(); + for (var i:uint = 0; i < lights.length; i++) + view.scene.addChild(lights[i]); + + // apply lighting to geometry + LightsHelper.addStaticLightsToMaterials(geo, lights); + + // set the camera and object for a good view + const cam:Camera3D = view.camera; + cam.z = -180; + cam.lookAt(geo.position); + geo.rotationX = 30; + + // add debug stats + const stats:DisplayObject = addChild(new AwayStats(view)); + stats.x = stage.stageWidth - stats.width; + stats.y = 0; + + // listen for enterframe to to render updates + addEventListener(Event.ENTER_FRAME, update); + } + + protected function createGeo():Mesh + { + const geometry:ConeGeometry = new ConeGeometry(); + const material:ColorMaterial = new ColorMaterial(); + const mesh:Mesh = new Mesh(geometry, material); + + return mesh; + } + + protected function createLights():Vector. + { + // simple two-point light setup: key, fill + const key:DirectionalLight = new DirectionalLight(.5, -1, .75); + key.color = 0xffffff; + key.ambient = 0; + key.diffuse = .75; + key.specular = .4; + + const fill:DirectionalLight = new DirectionalLight(-1, .5, .75); + fill.color = 0xffffff; + fill.ambient = 0; + fill.diffuse = .25; + fill.specular = 0; + + const lights:Vector. = new [key, fill]; + return lights; + } + + protected function get elapsed():Number + { + const now:int = getTimer(); + const value:Number = (lastTime ? (now - lastTime) : now) * .001; // seconds elapsed + lastTime = now; + return value; + } + + protected function update(e:Event):void + { + const s:Number = elapsed; + + // apply rotations and render + geo.rotationX += 7 * s; // degrees per second + geo.rotationY += 12 * s; // degrees per second + + view.render(); + } + } +} diff --git a/src/away3d/primitives/CubeExample.as b/src/away3d/primitives/CubeExample.as new file mode 100644 index 0000000..940d190 --- /dev/null +++ b/src/away3d/primitives/CubeExample.as @@ -0,0 +1,124 @@ +package away3d.primitives +{ + import flash.display.DisplayObject; + import flash.display.Sprite; + import flash.events.Event; + import flash.geom.Vector3D; + import flash.utils.getTimer; + + import away3d.cameras.Camera3D; + import away3d.containers.View3D; + import away3d.debug.AwayStats; + import away3d.entities.Mesh; + import away3d.lights.DirectionalLight; + import away3d.lights.LightBase; + import away3d.materials.ColorMaterial; + import away3d.materials.DefaultMaterialBase; + import away3d.materials.TextureMaterial; + import away3d.textures.BitmapTexture; + import away3d.tools.helpers.LightsHelper; + + + [SWF(backgroundColor="#000000", frameRate="30", quality="LOW")] + public class CubeExample extends Sprite + { + [Embed(source="/../embeds/cube-tile6.jpg")] + protected const Tile6:Class; + + protected var view:View3D; + protected var geo1:Mesh; + protected var geo2:Mesh; + protected var lastTime:int; + + + public function CubeExample() + { + super(); + + // create a viewport and add it to the stage + view = new View3D(); + view.backgroundColor = 0x2a2a2a; + addChild(view); + + // add geometry to the scene + geo1 = createGeo(new ColorMaterial()); + view.scene.addChild(geo1); + geo2 = createGeo(new TextureMaterial(new BitmapTexture(new Tile6().bitmapData))); + view.scene.addChild(geo2); + + // add lighting to the scene + const lights:Vector. = createLights(); + for (var i:uint = 0; i < lights.length; i++) + view.scene.addChild(lights[i]); + + // apply lighting to geometry + LightsHelper.addStaticLightsToMaterials(geo1, lights); + LightsHelper.addStaticLightsToMaterials(geo2, lights); + + // set the camera and object for a good view + const cam:Camera3D = view.camera; + cam.y = 60; + cam.z = -350; + cam.lookAt(new Vector3D(0, 0, 0)); + geo1.x -= 85; + geo1.rotationY = -15; + geo2.x += 85; + geo2.rotationY = -15; + + // add debug stats + const stats:DisplayObject = addChild(new AwayStats(view)); + stats.x = stage.stageWidth - stats.width; + stats.y = 0; + + // listen for enterframe to to render updates + addEventListener(Event.ENTER_FRAME, update); + } + + protected function createGeo(material:DefaultMaterialBase):Mesh + { + const geometry:CubeGeometry = new CubeGeometry(); + const mesh:Mesh = new Mesh(geometry, material); + return mesh; + } + + protected function createLights():Vector. + { + // simple two-point light setup: key, fill + const key:DirectionalLight = new DirectionalLight(.5, -1, .75); + key.color = 0xffffff; + key.ambient = 0; + key.diffuse = .75; + key.specular = .4; + + const fill:DirectionalLight = new DirectionalLight(-1, .5, .75); + fill.color = 0xffffff; + fill.ambient = 0; + fill.diffuse = .25; + fill.specular = 0; + + const lights:Vector. = new [key, fill]; + return lights; + } + + protected function get elapsed():Number + { + const now:int = getTimer(); + const value:Number = (lastTime ? (now - lastTime) : now) * .001; // seconds elapsed + lastTime = now; + return value; + } + + protected function update(e:Event):void + { + const s:Number = elapsed; + + // apply rotations and render + geo1.rotationX += 7 * s; // degrees per second + geo1.rotationY += 12 * s; // degrees per second + geo2.rotationX += 7 * s; // degrees per second + geo2.rotationY += 12 * s; // degrees per second + + view.render(); + } + } +} diff --git a/src/away3d/primitives/CylinderExample.as b/src/away3d/primitives/CylinderExample.as new file mode 100644 index 0000000..2f31060 --- /dev/null +++ b/src/away3d/primitives/CylinderExample.as @@ -0,0 +1,111 @@ +package away3d.primitives +{ + import flash.display.DisplayObject; + import flash.display.Sprite; + import flash.events.Event; + import flash.utils.getTimer; + + import away3d.cameras.Camera3D; + import away3d.containers.View3D; + import away3d.debug.AwayStats; + import away3d.entities.Mesh; + import away3d.lights.DirectionalLight; + import away3d.lights.LightBase; + import away3d.materials.ColorMaterial; + import away3d.tools.helpers.LightsHelper; + + + [SWF(backgroundColor="#000000", frameRate="30", quality="LOW")] + public class CylinderExample extends Sprite + { + + protected var view:View3D; + protected var geo:Mesh; + protected var lastTime:int; + + + public function CylinderExample() + { + super(); + + // create a viewport and add it to the stage + view = new View3D(); + view.backgroundColor = 0x2a2a2a; + addChild(view); + + // add geometry to the scene + geo = createGeo(); + view.scene.addChild(geo); + + // add lighting to the scene + const lights:Vector. = createLights(); + for (var i:uint = 0; i < lights.length; i++) + view.scene.addChild(lights[i]); + + // apply lighting to geometry + LightsHelper.addStaticLightsToMaterials(geo, lights); + + // set the camera and object for a good view + const cam:Camera3D = view.camera; + cam.y = 60; + cam.z = -240; + cam.lookAt(geo.position); + geo.rotationX = -30; + + // add debug stats + const stats:DisplayObject = addChild(new AwayStats(view)); + stats.x = stage.stageWidth - stats.width; + stats.y = 0; + + // listen for enterframe to to render updates + addEventListener(Event.ENTER_FRAME, update); + } + + protected function createGeo():Mesh + { + const geometry:CylinderGeometry = new CylinderGeometry(); + const material:ColorMaterial = new ColorMaterial(); + const mesh:Mesh = new Mesh(geometry, material); + + return mesh; + } + + protected function createLights():Vector. + { + // simple two-point light setup: key, fill + const key:DirectionalLight = new DirectionalLight(.5, -1, .75); + key.color = 0xffffff; + key.ambient = 0; + key.diffuse = .75; + key.specular = .4; + + const fill:DirectionalLight = new DirectionalLight(-1, .5, .75); + fill.color = 0xffffff; + fill.ambient = 0; + fill.diffuse = .25; + fill.specular = 0; + + const lights:Vector. = new [key, fill]; + return lights; + } + + protected function get elapsed():Number + { + const now:int = getTimer(); + const value:Number = (lastTime ? (now - lastTime) : now) * .001; // seconds elapsed + lastTime = now; + return value; + } + + protected function update(e:Event):void + { + const s:Number = elapsed; + + // apply rotations and render + geo.rotationX += 7 * s; // degrees per second + geo.rotationY += 12 * s; // degrees per second + + view.render(); + } + } +} diff --git a/src/away3d/primitives/PlaneExample.as b/src/away3d/primitives/PlaneExample.as new file mode 100644 index 0000000..ad2a364 --- /dev/null +++ b/src/away3d/primitives/PlaneExample.as @@ -0,0 +1,103 @@ +package away3d.primitives +{ + import flash.display.DisplayObject; + import flash.display.Sprite; + import flash.events.Event; + import flash.utils.getTimer; + + import away3d.cameras.Camera3D; + import away3d.containers.View3D; + import away3d.debug.AwayStats; + import away3d.entities.Mesh; + import away3d.lights.DirectionalLight; + import away3d.lights.LightBase; + import away3d.materials.ColorMaterial; + import away3d.materials.lightpickers.StaticLightPicker; + + + [SWF(backgroundColor="#000000", frameRate="30", quality="LOW")] + public class PlaneExample extends Sprite + { + + protected var view:View3D; + protected var geo:Mesh; + protected var lastTime:int; + + + public function PlaneExample() + { + super(); + + // create a viewport and add it to the stage + view = new View3D(); + view.backgroundColor = 0x2a2a2a; + addChild(view); + + // add geometry to the scene + geo = createGeo(); + view.scene.addChild(geo); + + // add lighting to the scene + const light:LightBase = createLight(); + view.scene.addChild(light); + + // apply lighting to geometry + geo.material.lightPicker = new StaticLightPicker([light]); + // LightsHelper.addStaticLightToMaterials(geo, light); // <-- this is another alternative + + // set the camera and object for a good view + const cam:Camera3D = view.camera; + cam.y = 60; + cam.z = -180; + cam.lookAt(geo.position); + geo.rotationX = -15; + geo.rotationY = 10; + + // add debug stats + const stats:DisplayObject = addChild(new AwayStats(view)); + stats.x = stage.stageWidth - stats.width; + stats.y = 0; + + // listen for enterframe to to render updates + addEventListener(Event.ENTER_FRAME, update); + } + + protected function createGeo():Mesh + { + const geometry:PlaneGeometry = new PlaneGeometry(); // default yUp means horizontal plane (normal is +y) + const material:ColorMaterial = new ColorMaterial(); + const mesh:Mesh = new Mesh(geometry, material); + return mesh; + } + + protected function createLight():LightBase + { + const light:DirectionalLight = new DirectionalLight(0, -1, 1); + light.color = 0xffffff; + light.ambient = 0; + light.diffuse = .75; + light.specular = .4; + + return light; + } + + protected function get elapsed():Number + { + const now:int = getTimer(); + const value:Number = (lastTime ? (now - lastTime) : now) * .001; // seconds elapsed + lastTime = now; + return value; + } + + protected function update(e:Event):void + { + const s:Number = elapsed; + + // apply rotations and render + geo.rotationX = -30 + 30 * Math.sin(1 * geo.rotationY * Math.PI / 180 - Math.PI * .33); // sit up and lay down + geo.rotationY += 18 * s; // degrees per second + + view.render(); + } + } +} diff --git a/src/away3d/primitives/RegularPolygonExample.as b/src/away3d/primitives/RegularPolygonExample.as new file mode 100644 index 0000000..0c045e9 --- /dev/null +++ b/src/away3d/primitives/RegularPolygonExample.as @@ -0,0 +1,103 @@ +package away3d.primitives +{ + import flash.display.DisplayObject; + import flash.display.Sprite; + import flash.events.Event; + import flash.utils.getTimer; + + import away3d.cameras.Camera3D; + import away3d.containers.View3D; + import away3d.debug.AwayStats; + import away3d.entities.Mesh; + import away3d.lights.DirectionalLight; + import away3d.lights.LightBase; + import away3d.materials.ColorMaterial; + import away3d.materials.lightpickers.StaticLightPicker; + + + [SWF(backgroundColor="#000000", frameRate="30", quality="LOW")] + public class RegularPolygonExample extends Sprite + { + + protected var view:View3D; + protected var geo:Mesh; + protected var lastTime:int; + + + public function RegularPolygonExample() + { + super(); + + // create a viewport and add it to the stage + view = new View3D(); + view.backgroundColor = 0x2a2a2a; + addChild(view); + + // add geometry to the scene + geo = createGeo(); + view.scene.addChild(geo); + + // add lighting to the scene + const light:LightBase = createLight(); + view.scene.addChild(light); + + // apply lighting to geometry + geo.material.lightPicker = new StaticLightPicker([light]); + // LightsHelper.addStaticLightToMaterials(geo, light); // <-- this is another alternative + + // set the camera and object for a good view + const cam:Camera3D = view.camera; + cam.y = 60; + cam.z = -180; + cam.lookAt(geo.position); + geo.rotationX = -15; + geo.rotationY = 10; + + // add debug stats + const stats:DisplayObject = addChild(new AwayStats(view)); + stats.x = stage.stageWidth - stats.width; + stats.y = 0; + + // listen for enterframe to to render updates + addEventListener(Event.ENTER_FRAME, update); + } + + protected function createGeo():Mesh + { + const geometry:RegularPolygonGeometry = new RegularPolygonGeometry(50); + const material:ColorMaterial = new ColorMaterial(); + const mesh:Mesh = new Mesh(geometry, material); + return mesh; + } + + protected function createLight():LightBase + { + const light:DirectionalLight = new DirectionalLight(0, -1, 1); + light.color = 0xffffff; + light.ambient = 0; + light.diffuse = .75; + light.specular = .4; + + return light; + } + + protected function get elapsed():Number + { + const now:int = getTimer(); + const value:Number = (lastTime ? (now - lastTime) : now) * .001; // seconds elapsed + lastTime = now; + return value; + } + + protected function update(e:Event):void + { + const s:Number = elapsed; + + // apply rotations and render + geo.rotationX = -30 + 30 * Math.sin(1 * geo.rotationY * Math.PI / 180 - Math.PI * .33); // sit up and lay down + geo.rotationY += 18 * s; // degrees per second + + view.render(); + } + } +} diff --git a/src/away3d/primitives/SkyBoxExample.as b/src/away3d/primitives/SkyBoxExample.as new file mode 100644 index 0000000..78d2604 --- /dev/null +++ b/src/away3d/primitives/SkyBoxExample.as @@ -0,0 +1,80 @@ +package away3d.primitives +{ + import flash.display.DisplayObject; + import flash.display.Sprite; + import flash.events.Event; + import flash.utils.getTimer; + + import away3d.containers.ObjectContainer3D; + import away3d.containers.View3D; + import away3d.debug.AwayStats; + import away3d.textures.BitmapCubeTexture; + + + [SWF(backgroundColor="#000000", frameRate="30", quality="LOW")] + public class SkyBoxExample extends Sprite + { + + [Embed(source="/../embeds/skybox/grid-negX.png")] + protected const SkyNegX:Class; + [Embed(source="/../embeds/skybox/grid-negY.png")] + protected const SkyNegY:Class; + [Embed(source="/../embeds/skybox/grid-negZ.png")] + protected const SkyNegZ:Class; + + [Embed(source="/../embeds/skybox/grid-posX.png")] + protected const SkyPosX:Class; + [Embed(source="/../embeds/skybox/grid-posY.png")] + protected const SkyPosY:Class; + [Embed(source="/../embeds/skybox/grid-posZ.png")] + protected const SkyPosZ:Class; + + protected var view:View3D; + protected var lastTime:int; + + + public function SkyBoxExample() + { + super(); + + // create a viewport and add geometry to its scene + view = new View3D(); + view.scene.addChild(createGeo()); + addChild(view); + + // add debug stats + const stats:DisplayObject = addChild(new AwayStats(view)); + stats.x = stage.stageWidth - stats.width; + stats.y = 0; + + // listen for enterframe to to render updates + addEventListener(Event.ENTER_FRAME, update); + } + + protected function createGeo():ObjectContainer3D + { + // skybox has its own mesh primitive, and uses a BitmapCubeTexture as its material + const material:BitmapCubeTexture = new BitmapCubeTexture(new SkyPosX().bitmapData, new SkyNegX().bitmapData, new SkyPosY().bitmapData, new SkyNegY().bitmapData, new SkyPosZ().bitmapData, new SkyNegZ().bitmapData); + const geometry:SkyBox = new SkyBox(material); + + return geometry; + } + + protected function get elapsed():Number + { + const now:int = getTimer(); + const value:Number = (lastTime ? (now - lastTime) : now) * .001; // seconds elapsed + lastTime = now; + return value; + } + + protected function update(e:Event):void + { + // apply rotations and render + view.camera.rotationX = 75 * Math.sin(2 * view.camera.rotationY * Math.PI / 180); // neck bob + view.camera.rotationY += 12 * elapsed; // degrees per second + + view.render(); + } + } +} diff --git a/src/away3d/primitives/SphereExample.as b/src/away3d/primitives/SphereExample.as new file mode 100644 index 0000000..fc3ed79 --- /dev/null +++ b/src/away3d/primitives/SphereExample.as @@ -0,0 +1,93 @@ +package away3d.primitives +{ + import flash.display.DisplayObject; + import flash.display.Sprite; + import flash.events.Event; + + import away3d.cameras.Camera3D; + import away3d.containers.View3D; + import away3d.debug.AwayStats; + import away3d.entities.Mesh; + import away3d.lights.DirectionalLight; + import away3d.lights.LightBase; + import away3d.materials.ColorMaterial; + import away3d.tools.helpers.LightsHelper; + + + [SWF(backgroundColor="#000000", frameRate="30", quality="LOW")] + public class SphereExample extends Sprite + { + + protected var view:View3D; + protected var geo:Mesh; + protected var lastTime:int; + + + public function SphereExample() + { + super(); + + // create a viewport and add it to the stage + view = new View3D(); + view.backgroundColor = 0x2a2a2a; + addChild(view); + + // add geometry to the scene + geo = createGeo(); + view.scene.addChild(geo); + + // add lighting to the scene + const lights:Vector. = createLights(); + for (var i:uint = 0; i < lights.length; i++) + view.scene.addChild(lights[i]); + + // apply lighting to geometry + LightsHelper.addStaticLightsToMaterials(geo, lights); + + // set the camera and object for a good view + const cam:Camera3D = view.camera; + cam.z = -180; + cam.lookAt(geo.position); + + // add debug stats + const stats:DisplayObject = addChild(new AwayStats(view)); + stats.x = stage.stageWidth - stats.width; + stats.y = 0; + + // listen for enterframe to to render updates + addEventListener(Event.ENTER_FRAME, update); + } + + protected function createGeo():Mesh + { + const geometry:SphereGeometry = new SphereGeometry(); + const material:ColorMaterial = new ColorMaterial(); + const mesh:Mesh = new Mesh(geometry, material); + return mesh; + } + + protected function createLights():Vector. + { + // simple two-point light setup: key, fill + const key:DirectionalLight = new DirectionalLight(.5, -1, .75); + key.color = 0xffffff; + key.ambient = 0; + key.diffuse = .8; + key.specular = .4; + + const fill:DirectionalLight = new DirectionalLight(-1, .5, .75); + fill.color = 0xffffff; + fill.ambient = 0; + fill.diffuse = .25; + fill.specular = 0; + + const lights:Vector. = new [key, fill]; + return lights; + } + + protected function update(e:Event):void + { + view.render(); + } + } +} diff --git a/src/away3d/primitives/TorusExample.as b/src/away3d/primitives/TorusExample.as new file mode 100644 index 0000000..98637b2 --- /dev/null +++ b/src/away3d/primitives/TorusExample.as @@ -0,0 +1,111 @@ +package away3d.primitives +{ + import flash.display.DisplayObject; + import flash.display.Sprite; + import flash.events.Event; + import flash.utils.getTimer; + + import away3d.cameras.Camera3D; + import away3d.containers.View3D; + import away3d.debug.AwayStats; + import away3d.entities.Mesh; + import away3d.lights.DirectionalLight; + import away3d.lights.LightBase; + import away3d.materials.ColorMaterial; + import away3d.tools.helpers.LightsHelper; + + + [SWF(backgroundColor="#000000", frameRate="30", quality="LOW")] + public class TorusExample extends Sprite + { + + protected var view:View3D; + protected var geo:Mesh; + protected var lastTime:int; + + + public function TorusExample() + { + super(); + + // create a viewport and add it to the stage + view = new View3D(); + view.backgroundColor = 0x2a2a2a; + addChild(view); + + // add geometry to the scene + geo = createGeo(); + view.scene.addChild(geo); + + // add lighting to the scene + const lights:Vector. = createLights(); + for (var i:uint = 0; i < lights.length; i++) + view.scene.addChild(lights[i]); + + // apply lighting to geometry + LightsHelper.addStaticLightsToMaterials(geo, lights); + + // set the camera and object for a good view + const cam:Camera3D = view.camera; + cam.y = 60; + cam.z = -240; + cam.lookAt(geo.position); + geo.rotationX = -30; + + // add debug stats + const stats:DisplayObject = addChild(new AwayStats(view)); + stats.x = stage.stageWidth - stats.width; + stats.y = 0; + + // listen for enterframe to to render updates + addEventListener(Event.ENTER_FRAME, update); + } + + protected function createGeo():Mesh + { + const geometry:TorusGeometry = new TorusGeometry(50, 25); + const material:ColorMaterial = new ColorMaterial(); + const mesh:Mesh = new Mesh(geometry, material); + + return mesh; + } + + protected function createLights():Vector. + { + // simple two-point light setup: key, fill + const key:DirectionalLight = new DirectionalLight(.5, -1, .75); + key.color = 0xffffff; + key.ambient = 0; + key.diffuse = .75; + key.specular = .4; + + const fill:DirectionalLight = new DirectionalLight(-1, .5, .75); + fill.color = 0xffffff; + fill.ambient = 0; + fill.diffuse = .25; + fill.specular = 0; + + const lights:Vector. = new [key, fill]; + return lights; + } + + protected function get elapsed():Number + { + const now:int = getTimer(); + const value:Number = (lastTime ? (now - lastTime) : now) * .001; // seconds elapsed + lastTime = now; + return value; + } + + protected function update(e:Event):void + { + const s:Number = elapsed; + + // apply rotations and render + geo.rotationX += 7 * s; // degrees per second + geo.rotationY += 12 * s; // degrees per second + + view.render(); + } + } +} diff --git a/src/away3d/primitives/WireframeCubeExample.as b/src/away3d/primitives/WireframeCubeExample.as new file mode 100644 index 0000000..f669c8a --- /dev/null +++ b/src/away3d/primitives/WireframeCubeExample.as @@ -0,0 +1,77 @@ +package away3d.primitives +{ + import flash.display.DisplayObject; + import flash.display.Sprite; + import flash.events.Event; + import flash.utils.getTimer; + + import away3d.cameras.Camera3D; + import away3d.containers.ObjectContainer3D; + import away3d.containers.View3D; + import away3d.debug.AwayStats; + + + [SWF(backgroundColor="#000000", frameRate="30", quality="LOW")] + public class WireframeCubeExample extends Sprite + { + + protected var view:View3D; + protected var geo:ObjectContainer3D; + protected var lastTime:int; + + + public function WireframeCubeExample() + { + super(); + + // create a viewport and add it to the stage + view = new View3D(); + view.backgroundColor = 0x2a2a2a; + addChild(view); + + // add geometry to the scene + geo = createGeo(); + view.scene.addChild(geo); + + // set the camera and object for a good view + const cam:Camera3D = view.camera; + cam.y = 60; + cam.z = -200; + cam.lookAt(geo.position); + geo.rotationY = -15; + + // add debug stats + const stats:DisplayObject = addChild(new AwayStats(view)); + stats.x = stage.stageWidth - stats.width; + stats.y = 0; + + // listen for enterframe to to render updates + addEventListener(Event.ENTER_FRAME, update); + } + + protected function createGeo():ObjectContainer3D + { + const geometry:WireframeCube = new WireframeCube(100, 100, 100); + return geometry; + } + + protected function get elapsed():Number + { + const now:int = getTimer(); + const value:Number = (lastTime ? (now - lastTime) : now) * .001; // seconds elapsed + lastTime = now; + return value; + } + + protected function update(e:Event):void + { + const s:Number = elapsed; + + // apply rotations and render + geo.rotationX += 7 * s; // degrees per second + geo.rotationY += 12 * s; // degrees per second + + view.render(); + } + } +} diff --git a/src/away3d/primitives/WireframeCylinderExample.as b/src/away3d/primitives/WireframeCylinderExample.as new file mode 100644 index 0000000..dd7a16d --- /dev/null +++ b/src/away3d/primitives/WireframeCylinderExample.as @@ -0,0 +1,77 @@ +package away3d.primitives +{ + import flash.display.DisplayObject; + import flash.display.Sprite; + import flash.events.Event; + import flash.utils.getTimer; + + import away3d.cameras.Camera3D; + import away3d.containers.ObjectContainer3D; + import away3d.containers.View3D; + import away3d.debug.AwayStats; + + + [SWF(backgroundColor="#000000", frameRate="30", quality="LOW")] + public class WireframeCylinderExample extends Sprite + { + + protected var view:View3D; + protected var geo:ObjectContainer3D; + protected var lastTime:int; + + + public function WireframeCylinderExample() + { + super(); + + // create a viewport and add it to the stage + view = new View3D(); + view.backgroundColor = 0x2a2a2a; + addChild(view); + + // add geometry to the scene + geo = createGeo(); + view.scene.addChild(geo); + + // set the camera and object for a good view + const cam:Camera3D = view.camera; + cam.y = 60; + cam.z = -200; + cam.lookAt(geo.position); + geo.rotationY = -15; + + // add debug stats + const stats:DisplayObject = addChild(new AwayStats(view)); + stats.x = stage.stageWidth - stats.width; + stats.y = 0; + + // listen for enterframe to to render updates + addEventListener(Event.ENTER_FRAME, update); + } + + protected function createGeo():ObjectContainer3D + { + const geometry:WireframeCylinder = new WireframeCylinder(); + return geometry; + } + + protected function get elapsed():Number + { + const now:int = getTimer(); + const value:Number = (lastTime ? (now - lastTime) : now) * .001; // seconds elapsed + lastTime = now; + return value; + } + + protected function update(e:Event):void + { + const s:Number = elapsed; + + // apply rotations and render + geo.rotationX += 7 * s; // degrees per second + geo.rotationY += 12 * s; // degrees per second + + view.render(); + } + } +} diff --git a/src/away3d/primitives/WireframePlaneExample.as b/src/away3d/primitives/WireframePlaneExample.as new file mode 100644 index 0000000..e585f0d --- /dev/null +++ b/src/away3d/primitives/WireframePlaneExample.as @@ -0,0 +1,78 @@ +package away3d.primitives +{ + import flash.display.DisplayObject; + import flash.display.Sprite; + import flash.events.Event; + import flash.utils.getTimer; + + import away3d.cameras.Camera3D; + import away3d.containers.ObjectContainer3D; + import away3d.containers.View3D; + import away3d.debug.AwayStats; + + + [SWF(backgroundColor="#000000", frameRate="30", quality="LOW")] + public class WireframePlaneExample extends Sprite + { + + protected var view:View3D; + protected var geo:ObjectContainer3D; + protected var lastTime:int; + + + public function WireframePlaneExample() + { + super(); + + // create a viewport and add it to the stage + view = new View3D(); + view.backgroundColor = 0x2a2a2a; + addChild(view); + + // add geometry to the scene + geo = createGeo(); + view.scene.addChild(geo); + + // set the camera and object for a good view + const cam:Camera3D = view.camera; + cam.y = 60; + cam.z = -180; + cam.lookAt(geo.position); + geo.rotationX = -15; + geo.rotationY = 10; + + // add debug stats + const stats:DisplayObject = addChild(new AwayStats(view)); + stats.x = stage.stageWidth - stats.width; + stats.y = 0; + + // listen for enterframe to to render updates + addEventListener(Event.ENTER_FRAME, update); + } + + protected function createGeo():ObjectContainer3D + { + const geometry:WireframePlane = new WireframePlane(100, 100, 10, 10, 0xffffff, 1, "xz"); + return geometry; + } + + protected function get elapsed():Number + { + const now:int = getTimer(); + const value:Number = (lastTime ? (now - lastTime) : now) * .001; // seconds elapsed + lastTime = now; + return value; + } + + protected function update(e:Event):void + { + const s:Number = elapsed; + + // apply rotations and render + geo.rotationX = -30 + 30 * Math.sin(1 * geo.rotationY * Math.PI / 180 - Math.PI * .33); // sit up and lay down + geo.rotationY += 18 * s; // degrees per second + + view.render(); + } + } +} diff --git a/src/away3d/primitives/WireframeSphereExample.as b/src/away3d/primitives/WireframeSphereExample.as new file mode 100644 index 0000000..013810e --- /dev/null +++ b/src/away3d/primitives/WireframeSphereExample.as @@ -0,0 +1,75 @@ +package away3d.primitives +{ + import flash.display.DisplayObject; + import flash.display.Sprite; + import flash.events.Event; + import flash.utils.getTimer; + + import away3d.cameras.Camera3D; + import away3d.containers.ObjectContainer3D; + import away3d.containers.View3D; + import away3d.debug.AwayStats; + + + [SWF(backgroundColor="#000000", frameRate="30", quality="LOW")] + public class WireframeSphereExample extends Sprite + { + + protected var view:View3D; + protected var geo:ObjectContainer3D; + protected var lastTime:int; + + + public function WireframeSphereExample() + { + super(); + + // create a viewport and add it to the stage + view = new View3D(); + view.backgroundColor = 0x2a2a2a; + addChild(view); + + // add geometry to the scene + geo = createGeo(); + view.scene.addChild(geo); + + // set the camera and object for a good view + const cam:Camera3D = view.camera; + cam.z = -180; + cam.lookAt(geo.position); + + // add debug stats + const stats:DisplayObject = addChild(new AwayStats(view)); + stats.x = stage.stageWidth - stats.width; + stats.y = 0; + + // listen for enterframe to to render updates + addEventListener(Event.ENTER_FRAME, update); + } + + protected function createGeo():ObjectContainer3D + { + const geometry:WireframeSphere = new WireframeSphere(); + return geometry; + } + + protected function get elapsed():Number + { + const now:int = getTimer(); + const value:Number = (lastTime ? (now - lastTime) : now) * .001; // seconds elapsed + lastTime = now; + return value; + } + + protected function update(e:Event):void + { + const s:Number = elapsed; + + // apply rotations and render + geo.rotationX += 7 * s; // degrees per second + geo.rotationY += 12 * s; // degrees per second + + view.render(); + } + } +} diff --git a/src/cornell/CornellDiffuseEnvMapFL.as b/src/cornell/CornellDiffuseEnvMapFL.as new file mode 100644 index 0000000..75dc0a5 --- /dev/null +++ b/src/cornell/CornellDiffuseEnvMapFL.as @@ -0,0 +1,49 @@ +package cornell +{ + import away3d.textures.BitmapCubeTexture; + + import flash.display.BitmapData; + + public class CornellDiffuseEnvMapFL extends BitmapCubeTexture + { + [Embed(source="/../embeds/cornellEnvMap/negXposZ/posX.jpg")] + private var PosX : Class; + [Embed(source="/../embeds/cornellEnvMap/negXposZ/negX.jpg")] + private var NegX : Class; + [Embed(source="/../embeds/cornellEnvMap/negXposZ/posY.jpg")] + private var PosY : Class; + [Embed(source="/../embeds/cornellEnvMap/negXposZ/negY.jpg")] + private var NegY : Class; + [Embed(source="/../embeds/cornellEnvMap/negXposZ/posZ.jpg")] + private var PosZ : Class; + [Embed(source="/../embeds/cornellEnvMap/negXposZ/negZ.jpg")] + private var NegZ : Class; + + private var _posX : BitmapData; + private var _negX : BitmapData; + private var _posY : BitmapData; + private var _negY : BitmapData; + private var _posZ : BitmapData; + private var _negZ : BitmapData; + + public function CornellDiffuseEnvMapFL() + { + super ( _posX = new PosX().bitmapData, _negX = new NegX().bitmapData, + _posY = new PosY().bitmapData, _negY = new NegY().bitmapData, + _posZ = new PosZ().bitmapData, _negZ = new NegZ().bitmapData + ); + } + + + override public function dispose() : void + { + super.dispose(); + _posX.dispose(); + _negX.dispose(); + _posY.dispose(); + _negY.dispose(); + _posZ.dispose(); + _negZ.dispose(); + } + } +} diff --git a/src/cornell/CornellDiffuseEnvMapFR.as b/src/cornell/CornellDiffuseEnvMapFR.as new file mode 100644 index 0000000..d9bbd51 --- /dev/null +++ b/src/cornell/CornellDiffuseEnvMapFR.as @@ -0,0 +1,49 @@ +package cornell +{ + import away3d.textures.BitmapCubeTexture; + + import flash.display.BitmapData; + + public class CornellDiffuseEnvMapFR extends BitmapCubeTexture + { + [Embed(source="/../embeds/cornellEnvMap/posXposZ/posX.jpg")] + private var PosX : Class; + [Embed(source="/../embeds/cornellEnvMap/posXposZ/negX.jpg")] + private var NegX : Class; + [Embed(source="/../embeds/cornellEnvMap/posXposZ/posY.jpg")] + private var PosY : Class; + [Embed(source="/../embeds/cornellEnvMap/posXposZ/negY.jpg")] + private var NegY : Class; + [Embed(source="/../embeds/cornellEnvMap/posXposZ/posZ.jpg")] + private var PosZ : Class; + [Embed(source="/../embeds/cornellEnvMap/posXposZ/negZ.jpg")] + private var NegZ : Class; + + private var _posX : BitmapData; + private var _negX : BitmapData; + private var _posY : BitmapData; + private var _negY : BitmapData; + private var _posZ : BitmapData; + private var _negZ : BitmapData; + + public function CornellDiffuseEnvMapFR() + { + super ( _posX = new PosX().bitmapData, _negX = new NegX().bitmapData, + _posY = new PosY().bitmapData, _negY = new NegY().bitmapData, + _posZ = new PosZ().bitmapData, _negZ = new NegZ().bitmapData + ); + } + + + override public function dispose() : void + { + super.dispose(); + _posX.dispose(); + _negX.dispose(); + _posY.dispose(); + _negY.dispose(); + _posZ.dispose(); + _negZ.dispose(); + } + } +} diff --git a/src/cornell/CornellDiffuseEnvMapNL.as b/src/cornell/CornellDiffuseEnvMapNL.as new file mode 100644 index 0000000..c0718a5 --- /dev/null +++ b/src/cornell/CornellDiffuseEnvMapNL.as @@ -0,0 +1,49 @@ +package cornell +{ + import away3d.textures.BitmapCubeTexture; + + import flash.display.BitmapData; + + public class CornellDiffuseEnvMapNL extends BitmapCubeTexture + { + [Embed(source="/../embeds/cornellEnvMap/negXnegZ/posX.jpg")] + private var PosX : Class; + [Embed(source="/../embeds/cornellEnvMap/negXnegZ/negX.jpg")] + private var NegX : Class; + [Embed(source="/../embeds/cornellEnvMap/negXnegZ/posY.jpg")] + private var PosY : Class; + [Embed(source="/../embeds/cornellEnvMap/negXnegZ/negY.jpg")] + private var NegY : Class; + [Embed(source="/../embeds/cornellEnvMap/negXnegZ/posZ.jpg")] + private var PosZ : Class; + [Embed(source="/../embeds/cornellEnvMap/negXnegZ/negZ.jpg")] + private var NegZ : Class; + + private var _posX : BitmapData; + private var _negX : BitmapData; + private var _posY : BitmapData; + private var _negY : BitmapData; + private var _posZ : BitmapData; + private var _negZ : BitmapData; + + public function CornellDiffuseEnvMapNL() + { + super ( _posX = new PosX().bitmapData, _negX = new NegX().bitmapData, + _posY = new PosY().bitmapData, _negY = new NegY().bitmapData, + _posZ = new PosZ().bitmapData, _negZ = new NegZ().bitmapData + ); + } + + + override public function dispose() : void + { + super.dispose(); + _posX.dispose(); + _negX.dispose(); + _posY.dispose(); + _negY.dispose(); + _posZ.dispose(); + _negZ.dispose(); + } + } +} diff --git a/src/cornell/CornellDiffuseEnvMapNR.as b/src/cornell/CornellDiffuseEnvMapNR.as new file mode 100644 index 0000000..14b63e1 --- /dev/null +++ b/src/cornell/CornellDiffuseEnvMapNR.as @@ -0,0 +1,49 @@ +package cornell +{ + import away3d.textures.BitmapCubeTexture; + + import flash.display.BitmapData; + + public class CornellDiffuseEnvMapNR extends BitmapCubeTexture + { + [Embed(source="/../embeds/cornellEnvMap/posXnegZ/posX.jpg")] + private var PosX : Class; + [Embed(source="/../embeds/cornellEnvMap/posXnegZ/negX.jpg")] + private var NegX : Class; + [Embed(source="/../embeds/cornellEnvMap/posXnegZ/posY.jpg")] + private var PosY : Class; + [Embed(source="/../embeds/cornellEnvMap/posXnegZ/negY.jpg")] + private var NegY : Class; + [Embed(source="/../embeds/cornellEnvMap/posXnegZ/posZ.jpg")] + private var PosZ : Class; + [Embed(source="/../embeds/cornellEnvMap/posXnegZ/negZ.jpg")] + private var NegZ : Class; + + private var _posX : BitmapData; + private var _negX : BitmapData; + private var _posY : BitmapData; + private var _negY : BitmapData; + private var _posZ : BitmapData; + private var _negZ : BitmapData; + + public function CornellDiffuseEnvMapNR() + { + super ( _posX = new PosX().bitmapData, _negX = new NegX().bitmapData, + _posY = new PosY().bitmapData, _negY = new NegY().bitmapData, + _posZ = new PosZ().bitmapData, _negZ = new NegZ().bitmapData + ); + } + + + override public function dispose() : void + { + super.dispose(); + _posX.dispose(); + _negX.dispose(); + _posY.dispose(); + _negY.dispose(); + _posZ.dispose(); + _negZ.dispose(); + } + } +} diff --git a/tools/ant/flex.xml b/tools/ant/flex.xml new file mode 100644 index 0000000..700995f --- /dev/null +++ b/tools/ant/flex.xml @@ -0,0 +1,62 @@ + + + + + +Initialization of flex tools. +Requires FLEX_HOME property, sets $${flex.lib} and $${flex.frameworks} +Defines mxmlc and compc macros. + + + + ${NL} +Please set the FLEX_HOME property to a valid path for the Flex SDK on your machine. +${msg.props} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/ant/init.xml b/tools/ant/init.xml new file mode 100644 index 0000000..c978de9 --- /dev/null +++ b/tools/ant/init.xml @@ -0,0 +1,14 @@ + + + + + +Initialization of the build properties and tools. Import this file; it imports the rest. + + + + + + + + diff --git a/tools/ant/macros.xml b/tools/ant/macros.xml new file mode 100644 index 0000000..e88d9e7 --- /dev/null +++ b/tools/ant/macros.xml @@ -0,0 +1,54 @@ + + + + + +Reusable macros + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/ant/properties.xml b/tools/ant/properties.xml new file mode 100644 index 0000000..07be921 --- /dev/null +++ b/tools/ant/properties.xml @@ -0,0 +1,75 @@ + + + + + +Shared properties + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/ant/targets.xml b/tools/ant/targets.xml new file mode 100644 index 0000000..3d92e7b --- /dev/null +++ b/tools/ant/targets.xml @@ -0,0 +1,30 @@ + + + + + +Shared targets + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/away3d/away3d-core-fp11-4.0.120726.swc b/tools/away3d/away3d-core-fp11-4.0.120726.swc new file mode 100644 index 0000000..86edd33 Binary files /dev/null and b/tools/away3d/away3d-core-fp11-4.0.120726.swc differ diff --git a/tools/flashplayer/debug/.gitignore b/tools/flashplayer/debug/.gitignore new file mode 100644 index 0000000..49e5974 --- /dev/null +++ b/tools/flashplayer/debug/.gitignore @@ -0,0 +1 @@ +/flashplayer.app/ diff --git a/tools/flashplayer/debug/flashplayer.app.zip b/tools/flashplayer/debug/flashplayer.app.zip new file mode 100644 index 0000000..545d1b6 Binary files /dev/null and b/tools/flashplayer/debug/flashplayer.app.zip differ diff --git a/tools/flashplayer/debug/flashplayer.exe b/tools/flashplayer/debug/flashplayer.exe new file mode 100644 index 0000000..f4ab277 Binary files /dev/null and b/tools/flashplayer/debug/flashplayer.exe differ diff --git a/tools/mxmlc/asdoc-config.xml b/tools/mxmlc/asdoc-config.xml new file mode 100644 index 0000000..d642735 --- /dev/null +++ b/tools/mxmlc/asdoc-config.xml @@ -0,0 +1,44 @@ + + + + + Away3D 4.0 Examples + 300 + + + + + + + Away3D 4.0 Examples + + + EN + + + http://www.away3d.com/ + + + the Away3D team + + + http://www.away3d.com/ + + + + true + + + true + + + true + + + + false + + + + diff --git a/tools/mxmlc/compc-config.xml b/tools/mxmlc/compc-config.xml new file mode 100644 index 0000000..e2a2cc4 --- /dev/null +++ b/tools/mxmlc/compc-config.xml @@ -0,0 +1,49 @@ + + + + + + true + + + + Away3D 4.0 Examples + + + EN + + + http://www.away3d.com/ + + + the Away3D team + + + http://www.away3d.com/ + + + + true + + + true + + + true + + + true + + + + false + + + false + + + true + + + + diff --git a/tools/mxmlc/mxmlc-config.xml b/tools/mxmlc/mxmlc-config.xml new file mode 100644 index 0000000..69a5078 --- /dev/null +++ b/tools/mxmlc/mxmlc-config.xml @@ -0,0 +1,61 @@ + + + + + + 0x000000 + + + 30 + + + + 640 + 480 + + + + true + + + + Away3D 4.0 Examples + + + EN + + + http://www.away3d.com/ + + + the Away3D team + + + http://www.away3d.com/ + + + + true + + + true + + + true + + + true + + + + false + + + false + + + true + + + +