diff --git a/tests/AppHarness.js b/tests/AppHarness.js new file mode 100755 index 00000000..a8b76a44 --- /dev/null +++ b/tests/AppHarness.js @@ -0,0 +1,337 @@ +//--------------------------------------------------- +// Application Harness +var AppHarness = (function () { + //------------------------------------------------------------------------------ + function AppHarness() { + var _this = this; + //------------------------------------------------------------------------------ + this.tests = new Array(); + this.counter = 0; + this.sourceVisible = false; + this.loadDefault = true; + this.initFrameSet(); + this.initInterface(); + this.previousBtn.onclick = function () { return _this.nagigateBy(-1); }; + this.nextBtn.onclick = function () { return _this.nagigateBy(1); }; + this.sourceBtn.onclick = function () { return _this.toggleSource(); }; + this.dropDown.onchange = function (e) { return _this.dropDownChange(e); }; + } + //------------------------------------------------------------------------------ + /** + * + * Load a test + * + * @param classPath - Module and Class path of test + * @param js Path to JavaScript file + * @param ts Path to Typescript file ( not yet used - reserved for future show source ) + */ + AppHarness.prototype.load = function (classPath, js, ts) { + this.loadFromURL(); + if (this.loadDefault) { + window.history.pushState(js, js, '?test=' + js); + this.testIframe.src = 'frame.html?name=' + classPath + '&js=' + js; + this.srcIframe.src = "data:text/html;charset=utf-8," + this.createSourceViewHTML(ts); + } + }; + /** + * + * Add a test to the AppHarness + * + * @param name Name of test + * @param classPath - Module and Class path of test + * @param js Path to JavaScript file + * @param ts Path to Typescript file ( not yet used - reserved for future show source ) + */ + AppHarness.prototype.addTest = function (name, classpath, js, ts) { + this.tests.push(new TestData(name, classpath, js, ts)); + }; + /** + * + * Add a separator to the menu + * + * @param name + */ + AppHarness.prototype.addSeperator = function (name) { + if (name === void 0) { name = ''; } + this.tests.push(new TestData('-- ' + name, '', '', '')); + }; + /** + * + * Start the application harness + * + */ + AppHarness.prototype.start = function (slideshowMode) { + var _this = this; + if (slideshowMode === void 0) { slideshowMode = false; } + for (var c = 0; c < this.tests.length; c++) { + var option = new Option(this.tests[c].name, String(c)); + this.dropDown.add(option); + } + if (slideshowMode) { + setInterval(function () { return _this.nagigateBy(1); }, 15000); + } + }; + //------------------------------------------------------------------------------ + AppHarness.prototype.loadFromURL = function () { + var queryParams = Utils.getQueryParams(document.location.search); + if (queryParams.test != null) { + var l = this.tests.length; + for (var c = 0; c < l; c++) { + if (this.tests[c].js == queryParams.test) { + console.log('======>>>> LOAD TEST'); + this.navigateToSection(this.tests[c]); + this.loadDefault = false; + } + } + } + }; + /** + * + */ + AppHarness.prototype.initInterface = function () { + var testSelector = document.createElement('div'); + testSelector.style.cssFloat = 'none'; + testSelector.style.position = 'absolute'; + testSelector.style.bottom = '15px'; + testSelector.style.width = '600px'; + testSelector.style.left = '50%'; + testSelector.style.marginLeft = '-300px'; + testSelector.style.textAlign = 'center'; + this.dropDown = document.createElement('select'); + this.dropDown.name = "selectTestDropDown"; + this.dropDown.id = "selectTest"; + this.sourceBtn = document.createElement('button'); + this.sourceBtn.innerHTML = 'Show Source'; + this.sourceBtn.id = 'previous'; + this.previousBtn = document.createElement('button'); + this.previousBtn.innerHTML = '<<'; + this.previousBtn.id = 'previous'; + this.nextBtn = document.createElement('button'); + this.nextBtn.innerHTML = '>>'; + this.nextBtn.id = 'next'; + testSelector.appendChild(this.sourceBtn); + testSelector.appendChild(this.previousBtn); + testSelector.appendChild(this.dropDown); + testSelector.appendChild(this.nextBtn); + document.body.appendChild(testSelector); + }; + /** + * + */ + AppHarness.prototype.initFrameSet = function () { + var iframeContainer = document.createElement('div'); + iframeContainer.style.width = '100%'; + iframeContainer.style.height = '100%'; + this.testIframe = document.createElement('iframe'); + this.testIframe.id = 'testContainer'; + this.testIframe.style.backgroundColor = '#9e9e9e'; + this.testIframe.style.cssFloat = 'none'; + this.testIframe.style.position = 'absolute'; + this.testIframe.style.top = '0px'; + this.testIframe.style.left = '0px'; + this.testIframe.style.border = '0px'; + this.testIframe.style.width = '100%'; + this.testIframe.style.height = '100%'; + //bottom: 120px; + this.srcIframe = document.createElement('iframe'); + this.srcIframe.id = 'testSourceContainer'; + this.srcIframe.style.backgroundColor = '#9e9e9e'; + this.srcIframe.style.cssFloat = 'none'; + this.srcIframe.style.position = 'absolute'; + this.srcIframe.style.right = '0px'; + this.srcIframe.style.top = '0px'; + this.srcIframe.style.bottom = '0px'; + this.srcIframe.style.border = '0px'; + this.srcIframe.style.width = '0%'; + this.srcIframe.style.height = '100%'; + iframeContainer.appendChild(this.testIframe); + iframeContainer.appendChild(this.srcIframe); + document.body.appendChild(iframeContainer); + }; + /** + * + * Selectnext / previous menu item + * + * @param direction + */ + AppHarness.prototype.nagigateBy = function (direction) { + if (direction === void 0) { direction = 1; } + var l = this.tests.length; + var nextCounter = this.counter + direction; + if (nextCounter < 0) { + nextCounter = this.tests.length - 1; + } + else if (nextCounter > this.tests.length - 1) { + nextCounter = 0; + } + var testData = this.tests[nextCounter]; + if (testData.name.indexOf('--') != -1) { + this.counter = nextCounter; + this.nagigateBy(direction); + } + else { + this.navigateToSection(testData); + this.dropDown.selectedIndex = nextCounter; + this.counter = nextCounter; + } + }; + /** + * + * Navigate to a section + * + * @param testData + */ + AppHarness.prototype.navigateToSection = function (testData) { + window.history.pushState(testData.js, testData.js, '?test=' + testData.js); + this.srcIframe.src = "data:text/html;charset=utf-8," + this.createSourceViewHTML(testData.src); + this.testIframe.src = 'frame.html?name=' + testData.classpath + '&js=' + testData.js; + }; + AppHarness.prototype.toggleSource = function () { + if (this.sourceVisible) { + this.testIframe.style.width = '100%'; + this.srcIframe.style.width = '0%'; + this.sourceBtn.innerHTML = 'Show Source'; + } + else { + this.testIframe.style.width = '20%'; + this.srcIframe.style.width = '80%'; + this.sourceBtn.innerHTML = 'Hide Source'; + } + this.sourceVisible = !this.sourceVisible; + }; + AppHarness.prototype.createSourceViewHTML = function (url) { + var html = ''; + html += ''; + html += ''; + html += ' '; + html += ' '; + html += ' '; + html += ' '; + html += ''; + html += ''; + html += ''; + html += ''; + return html; + }; + //------------------------------------------------------------------------------ + // Utils + /** + * + * Util function - get Element by ID + * + * @param id + * @returns {HTMLElement} + */ + AppHarness.prototype.getId = function (id) { + return document.getElementById(id); + }; + //------------------------------------------------------------------------------ + // Events + /** + * + * Dropbox event handler + * + * @param e + */ + AppHarness.prototype.dropDownChange = function (e) { + this.dropDown.options[this.dropDown.selectedIndex].value; + this.counter = this.dropDown.selectedIndex; + var dataIndex = parseInt(this.dropDown.options[this.dropDown.selectedIndex].value); + if (!isNaN(dataIndex)) { + this.navigateToSection(this.tests[dataIndex]); + } + }; + return AppHarness; +})(); +//--------------------------------------------------- +// Application Frame +var AppFrame = (function () { + function AppFrame() { + this.classPath = ''; + this.jsPath = ''; + var queryParams = Utils.getQueryParams(document.location.search); + if (queryParams.js != undefined && queryParams.name != undefined) { + this.jsPath = queryParams.js; + this.classPath = queryParams.name; + this.loadJS(this.jsPath); + } + } + /** + * + * Load a JavaScript file + * + * @param url - URL of JavaScript file + */ + AppFrame.prototype.loadJS = function (url) { + var _this = this; + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement("script"); + script.type = "text/javascript"; + script.src = url; + script.onload = function () { return _this.jsLoaded(); }; + head.appendChild(script); + }; + /** + * + * Event Handler for loaded JavaScript files + * + */ + AppFrame.prototype.jsLoaded = function () { + var createPath = this.classPath.split('.'); // Split the classpath + var obj; + for (var c = 0; c < createPath.length; c++) { + if (obj == null) { + obj = window[createPath[c]]; // reference base module ( will be a child of the window ) + } + else { + obj = obj[createPath[c]]; // reference sub module / Class + } + } + if (obj != null) { + new obj(); // if Class has been found - start the test + } + }; + return AppFrame; +})(); +//--------------------------------------------------- +// Common Utilities +var Utils = (function () { + function Utils() { + } + /** + * + * Utility function - Parse a Query formatted string + * + * @param qs + * @returns {{}} + */ + Utils.getQueryParams = function (qs) { + qs = qs.split("+").join(" "); + var params = {}, tokens, re = /[?&]?([^=]+)=([^&]*)/g; + while (tokens = re.exec(qs)) { + params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]); + } + return params; + }; + return Utils; +})(); +//--------------------------------------------------- +// Data +var TestData = (function () { + function TestData(name, classpath, js, src) { + this.js = js; + this.classpath = classpath; + this.src = src; + this.name = name; + } + return TestData; +})(); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwcGhhcm5lc3MudHMiXSwibmFtZXMiOlsiQXBwSGFybmVzcyIsIkFwcEhhcm5lc3MuY29uc3RydWN0b3IiLCJBcHBIYXJuZXNzLmxvYWQiLCJBcHBIYXJuZXNzLmFkZFRlc3QiLCJBcHBIYXJuZXNzLmFkZFNlcGVyYXRvciIsIkFwcEhhcm5lc3Muc3RhcnQiLCJBcHBIYXJuZXNzLmxvYWRGcm9tVVJMIiwiQXBwSGFybmVzcy5pbml0SW50ZXJmYWNlIiwiQXBwSGFybmVzcy5pbml0RnJhbWVTZXQiLCJBcHBIYXJuZXNzLm5hZ2lnYXRlQnkiLCJBcHBIYXJuZXNzLm5hdmlnYXRlVG9TZWN0aW9uIiwiQXBwSGFybmVzcy50b2dnbGVTb3VyY2UiLCJBcHBIYXJuZXNzLmNyZWF0ZVNvdXJjZVZpZXdIVE1MIiwiQXBwSGFybmVzcy5nZXRJZCIsIkFwcEhhcm5lc3MuZHJvcERvd25DaGFuZ2UiLCJBcHBGcmFtZSIsIkFwcEZyYW1lLmNvbnN0cnVjdG9yIiwiQXBwRnJhbWUubG9hZEpTIiwiQXBwRnJhbWUuanNMb2FkZWQiLCJVdGlscyIsIlV0aWxzLmNvbnN0cnVjdG9yIiwiVXRpbHMuZ2V0UXVlcnlQYXJhbXMiLCJUZXN0RGF0YSIsIlRlc3REYXRhLmNvbnN0cnVjdG9yIl0sIm1hcHBpbmdzIjoiQUFBQSxxREFBcUQ7QUFDckQsc0JBQXNCO0FBRXRCLElBQU0sVUFBVTtJQWdCZkEsZ0ZBQWdGQTtJQUVoRkEsU0FsQktBLFVBQVVBO1FBQWhCQyxpQkErVUNBO1FBNVVBQSxnRkFBZ0ZBO1FBRXhFQSxVQUFLQSxHQUErQkEsSUFBSUEsS0FBS0EsRUFBWUEsQ0FBQ0E7UUFPMURBLFlBQU9BLEdBQW9CQSxDQUFDQSxDQUFDQTtRQUM3QkEsa0JBQWFBLEdBQWVBLEtBQUtBLENBQUNBO1FBQ2xDQSxnQkFBV0EsR0FBaUJBLElBQUlBLENBQUNBO1FBT3hDQSxJQUFJQSxDQUFDQSxZQUFZQSxFQUFFQSxDQUFDQTtRQUNwQkEsSUFBSUEsQ0FBQ0EsYUFBYUEsRUFBRUEsQ0FB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QSxJQUFJQSxDQUFDQSxXQUFXQSxHQUEwQ0EsUUFBUUEsQ0FBQ0EsYUFBYUEsQ0FBRUEsUUFBUUEsQ0FBRUEsQ0FBQ0E7UUFDN0ZBLElBQUlBLENBQUNBLFdBQVdBLENBQUNBLFNBQVNBLEdBQVlBLElBQUlBLENBQUNBO1FBQzNDQSxJQUFJQSxDQUFDQSxXQUFXQSxDQUFDQSxFQUFFQSxHQUFtQkEsVUFBVUEsQ0FBQ0E7UUFFakRBLElBQUlBLENBQUNBLE9BQU9BLEdBQThDQSxRQUFRQSxDQUFDQSxhQUFhQSxDQUFFQSxRQUFRQSxDQUFFQSxDQUFDQTtRQUM3RkEsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsU0FBU0EsR0FBZ0JBLElBQUlBLENBQUNBO1FBQzNDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxFQUFFQSxHQUF1QkEsTUFBTUEsQ0FBQ0E7UUFHN0NBLFlBQVlBLENBQUNBLFdBQVdBLENBQUVBLElBQUlBLENBQUNBLFNBQVNBLENBQUVBLENBQUNBO1FBQzNDQSxZQUFZQSxDQUFDQSxXQUFXQSxDQUFFQSxJQUFJQSxDQUFDQSxXQUFXQSxDQUFFQSxDQUFDQTtRQUM3Q0EsWUFBWUEsQ0FBQ0EsV0FBV0EsQ0FBRUEsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBRUEsQ0FBQ0E7UUFDMUNBLFlBQVlBLENBQUNBLFdBQVdBLENBQUVBLElBQUlBLENBQUNBLE9BQU9BLENBQUVBLENBQUNBO1FBQ3pDQSxRQUFRQSxDQUFDQSxJQUFJQSxDQUFDQSxXQUFXQSxDQUFFQSxZQUFZQSxDQUFFQSxDQUFDQTtJQUMzQ0EsQ0FBQ0E7SUFDRFA7O09BRUdBO0lBQ0tBLGlDQUFZQSxHQUFwQkE7UUFHQ1EsSUFBSUEsZUFBZUEsR0FBd0NBLFFBQVFBLENBQUNBLGFBQWFBLENBQUVBLEtBQUtBLENBQUVBLENBQUNBO1FBQzFGQSxlQUFlQSxDQUFDQSxLQUFLQSxDQUFDQSxLQUFLQSxHQUFXQSxNQUFNQSxDQUFDQTtRQUM3Q0EsZUFBZUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsTUFBTUEsR0FBVUEsTUFBTUEsQ0FBQ0E7UUFFOUNB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QSxDQUFDQTtRQUVEQSxNQUFNQSxDQUFDQSxNQUFNQSxDQUFDQTtJQUNmQSxDQUFDQTtJQUNGRixZQUFDQTtBQUFEQSxDQXRCQSxBQXNCQ0EsSUFBQTtBQUVELEFBR0EscURBSHFEO0FBQ3JELE9BQU87SUFFRCxRQUFRO0lBT2JHLFNBUEtBLFFBQVFBLENBT0FBLElBQWFBLEVBQUdBLFNBQWtCQSxFQUFHQSxFQUFXQSxFQUFHQSxHQUFZQTtRQUUzRUMsSUFBSUEsQ0FBQ0EsRUFBRUEsR0FBV0EsRUFBRUEsQ0FBQ0E7UUFDckJBLElBQUlBLENBQUNBLFNBQVNBLEdBQUlBLFNBQVNBLENBQUNBO1FBQzVCQSxJQUFJQSxDQUFDQSxHQUFHQSxHQUFVQSxHQUFHQSxDQUFDQTtRQUN0QkEsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBU0EsSUFBSUEsQ0FBQ0E7SUFDeEJBLENBQUNBO0lBQ0ZELGVBQUNBO0FBQURBLENBZEEsQUFjQ0EsSUFBQSIsImZpbGUiOiJBcHBIYXJuZXNzLmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9yb2JiYXRlbWFuL1dlYnN0b3JtUHJvamVjdHMvYXdheWpzLXN0YWdlZ2wvIiwic291cmNlc0NvbnRlbnQiOlsiLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEFwcGxpY2F0aW9uIEhhcm5lc3NcblxuY2xhc3MgQXBwSGFybmVzc1xue1xuXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblx0cHJpdmF0ZSB0ZXN0cyAgICAgICAgICAgOiBBcnJheTxUZXN0RGF0YT4gPSBuZXcgQXJyYXk8VGVzdERhdGE+KCk7XG5cdHByaXZhdGUgZHJvcERvd24gICAgICAgIDogSFRNTFNlbGVjdEVsZW1lbnQ7XG5cdHByaXZhdGUgcHJldmlvdXNCdG4gICAgIDogSFRNTEJ1dHRvbkVsZW1lbnQ7XG5cdHByaXZhdGUgbmV4dEJ0biAgICAgICAgIDogSFRNTEJ1dHRvbkVsZW1lbnQ7XG5cdHByaXZhdGUgc291cmNlQnRuICAgICAgIDogSFRNTEJ1dHRvbkVsZW1lbnQ7XG5cdHByaXZhdGUgdGVzdElmcmFtZSAgICAgIDogSFRNTElGcmFtZUVsZW1lbnQ7XG5cdHByaXZhdGUgc3JjSWZyYW1lICAgICAgIDogSFRNTElGcmFtZUVsZW1lbnQ7XG5cdHByaXZhdGUgY291bnRlciAgICAgICAgIDogbnVtYmVyID0gMDtcblx0cHJpdmF0ZSBzb3VyY2VWaXNpYmxlICAgOiBib29sZWFuID0gZmFsc2U7XG5cdHByaXZhdGUgbG9hZERlZmF1bHQgICAgIDogYm9vbGVhbiA9IHRydWU7XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRjb25zdHJ1Y3RvcigpXG5cdHtcblxuXHRcdHRoaXMuaW5pdEZyYW1lU2V0KCk7XG5cdFx0dGhpcy5pbml0SW50ZXJmYWNlKCk7XG5cblxuXHRcdHRoaXMucHJldmlvdXNCdG4ub25jbGljayAgID0gKCkgPT4gdGhpcy5uYWdpZ2F0ZUJ5KCAtMSApO1xuXHRcdHRoaXMubmV4dEJ0bi5vbmNsaWNrICAgICAgID0gKCkgPT4gdGhpcy5uYWdpZ2F0ZUJ5KCAxICk7XG5cdFx0dGhpcy5zb3VyY2VCdG4ub25jbGljayAgICAgPSAoKSA9PiB0aGlzLnRvZ2dsZVNvdXJjZSgpO1xuXHRcdHRoaXMuZHJvcERvd24ub25jaGFuZ2UgICAgICA9ICggZSApID0+IHRoaXMuZHJvcERvd25DaGFuZ2UoIGUgKTtcblxuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHQvKipcblx0ICpcblx0ICogTG9hZCBhIHRlc3Rcblx0ICpcblx0ICogQHBhcmFtIGNsYXNzUGF0aCAtIE1vZHVsZSBhbmQgQ2xhc3MgcGF0aCBvZiB0ZXN0XG5cdCAqIEBwYXJhbSBqcyBQYXRoIHRvIEphdmFTY3JpcHQgZmlsZVxuXHQgKiBAcGFyYW0gdHMgUGF0aCB0byBUeXBlc2NyaXB0IGZpbGUgKCBub3QgeWV0IHVzZWQgLSByZXNlcnZlZCBmb3IgZnV0dXJlIHNob3cgc291cmNlIClcblx0ICovXG5cdHB1YmxpYyBsb2FkKCBjbGFzc1BhdGggOiBzdHJpbmcgLCBqcyA6IHN0cmluZyAsIHRzIDogc3RyaW5nICkgOiB2b2lkXG5cdHtcblxuXHRcdHRoaXMubG9hZEZyb21VUkwoKTtcblxuXHRcdGlmICggdGhpcy5sb2FkRGVmYXVsdCApXG5cdFx0e1xuXHRcdFx0d2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKGpzLCBqcywgJz90ZXN0PScgKyBqcyk7XG5cdFx0XHR0aGlzLnRlc3RJZnJhbWUuc3JjID0gJ2ZyYW1lLmh0bWw/bmFtZT0nICsgY2xhc3NQYXRoICsgJyZqcz0nICsganM7XG5cdFx0XHR0aGlzLnNyY0lmcmFtZS5zcmMgPSBcImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyB0aGlzLmNyZWF0ZVNvdXJjZVZpZXdIVE1MKCB0cyApO1xuXG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEFkZCBhIHRlc3QgdG8gdGhlIEFwcEhhcm5lc3Ncblx0ICpcblx0ICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0ZXN0XG5cdCAqIEBwYXJhbSBjbGFzc1BhdGggLSBNb2R1bGUgYW5kIENsYXNzIHBhdGggb2YgdGVzdFxuXHQgKiBAcGFyYW0ganMgUGF0aCB0byBKYXZhU2NyaXB0IGZpbGVcblx0ICogQHBhcmFtIHRzIFBhdGggdG8gVHlwZXNjcmlwdCBmaWxlICggbm90IHlldCB1c2VkIC0gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBzaG93IHNvdXJjZSApXG5cdCAqL1xuXHRwdWJsaWMgYWRkVGVzdCggbmFtZSA6IHN0cmluZyAsIGNsYXNzcGF0aCA6IHN0cmluZyAsIGpzIDogc3RyaW5nICwgdHMgOiBzdHJpbmcgKSA6IHZvaWRcblx0e1xuXHRcdHRoaXMudGVzdHMucHVzaCAoIG5ldyBUZXN0RGF0YSggbmFtZSAsIGNsYXNzcGF0aCAsIGpzICwgdHMgKSApO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEFkZCBhIHNlcGFyYXRvciB0byB0aGUgbWVudVxuXHQgKlxuXHQgKiBAcGFyYW0gbmFtZVxuXHQgKi9cblx0cHVibGljIGFkZFNlcGVyYXRvciggbmFtZSA6IHN0cmluZyA9ICcnICkgOiB2b2lkXG5cdHtcblx0XHR0aGlzLnRlc3RzLnB1c2ggKCBuZXcgVGVzdERhdGEoICctLSAnICsgbmFtZSAsICcnICwgJycgLCAnJykgKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBTdGFydCB0aGUgYXBwbGljYXRpb24gaGFybmVzc1xuXHQgKlxuXHQgKi9cblx0cHVibGljIHN0YXJ0KCBzbGlkZXNob3dNb2RlIDogYm9vbGVhbiA9IGZhbHNlICkgOiB2b2lkXG5cdHtcblx0XHRmb3IgKCB2YXIgYyA6IG51bWJlciA9IDAgOyBjIDwgdGhpcy50ZXN0cy5sZW5ndGggOyBjICsrICApXG5cdFx0e1xuXHRcdFx0dmFyIG9wdGlvbiA6IEhUTUxPcHRpb25FbGVtZW50ID0gPEhUTUxPcHRpb25FbGVtZW50PiBuZXcgT3B0aW9uKCB0aGlzLnRlc3RzW2NdLm5hbWUgLCBTdHJpbmcoIGMgKSApO1xuXHRcdFx0dGhpcy5kcm9wRG93bi5hZGQoIG9wdGlvbiApO1xuXHRcdH1cblxuXHRcdGlmICggc2xpZGVzaG93TW9kZSApXG5cdFx0e1xuXG5cdFx0XHRzZXRJbnRlcnZhbCggKCkgPT4gdGhpcy5uYWdpZ2F0ZUJ5KCAxICkgLCAxNTAwMCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXHRwcml2YXRlIGxvYWRGcm9tVVJMKCkgOiB2b2lkXG5cdHtcblx0XHR2YXIgcXVlcnlQYXJhbXMgOiBhbnkgPSBVdGlscy5nZXRRdWVyeVBhcmFtcyggZG9jdW1lbnQubG9jYXRpb24uc2VhcmNoICk7XG5cblx0XHRpZiAoIHF1ZXJ5UGFyYW1zLnRlc3QgIT0gbnVsbCApXG5cdFx0e1xuXHRcdFx0dmFyIGwgOiBudW1iZXIgPSAgdGhpcy50ZXN0cy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIHZhciBjIDogbnVtYmVyID0gMCA7IGMgPCBsIDsgYyArKyApXG5cdFx0XHR7XG5cdFx0XHRcdGlmICggdGhpcy50ZXN0c1tjXS5qcyA9PSBxdWVyeVBhcmFtcy50ZXN0IClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nICggJz09PT09PT4+Pj4gTE9BRCBURVNUJyk7XG5cblx0XHRcdFx0XHR0aGlzLm5hdmlnYXRlVG9TZWN0aW9uKCB0aGlzLnRlc3RzW2NdICk7XG5cdFx0XHRcdFx0dGhpcy5sb2FkRGVmYXVsdCA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0cHJpdmF0ZSBpbml0SW50ZXJmYWNlKCkgOiB2b2lkXG5cdHtcblxuXHRcdHZhciB0ZXN0U2VsZWN0b3IgOiBIVE1MRGl2RWxlbWVudCAgID0gPEhUTUxEaXZFbGVtZW50PiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2JyApO1xuXHRcdFx0dGVzdFNlbGVjdG9yLnN0eWxlLmNzc0Zsb2F0ICAgICA9ICdub25lJztcblx0XHRcdHRlc3RTZWxlY3Rvci5zdHlsZS5wb3NpdGlvbiAgICAgPSAnYWJzb2x1dGUnO1xuXHRcdFx0dGVzdFNlbGVjdG9yLnN0eWxlLmJvdHRvbSAgICAgICA9ICcxNXB4Jztcblx0XHRcdHRlc3RTZWxlY3Rvci5zdHlsZS53aWR0aCAgICAgICAgPSAnNjAwcHgnO1xuXHRcdFx0dGVzdFNlbGVjdG9yLnN0eWxlLmxlZnQgICAgICAgICA9ICc1MCUnO1xuXHRcdFx0dGVzdFNlbGVjdG9yLnN0eWxlLm1hcmdpbkxlZnQgICA9ICctMzAwcHgnXG5cdFx0XHR0ZXN0U2VsZWN0b3Iuc3R5bGUudGV4dEFsaWduICAgID0gJ2NlbnRlcic7XG5cblxuXHRcdHRoaXMuZHJvcERvd24gICAgICAgICAgICAgICAgICAgICAgID0gPEhUTUxTZWxlY3RFbGVtZW50PiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnc2VsZWN0JyApO1xuXHRcdHRoaXMuZHJvcERvd24ubmFtZSAgICAgICAgICAgICAgICAgID0gXCJzZWxlY3RUZXN0RHJvcERvd25cIlxuXHRcdHRoaXMuZHJvcERvd24uaWQgICAgICAgICAgICAgICAgICAgID0gXCJzZWxlY3RUZXN0XCJcblxuXHRcdHRoaXMuc291cmNlQnRuICAgICAgICAgICAgICAgICAgICAgID0gPEhUTUxCdXR0b25FbGVtZW50PiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnYnV0dG9uJyApO1xuXHRcdHRoaXMuc291cmNlQnRuLmlubmVySFRNTCAgICAgICAgICAgID0gJ1Nob3cgU291cmNlJztcblx0XHR0aGlzLnNvdXJjZUJ0bi5pZCAgICAgICAgICAgICAgICAgICA9ICdwcmV2aW91cyc7XG5cblx0XHR0aGlzLnByZXZpb3VzQnRuICAgICAgICAgICAgICAgICAgICA9IDxIVE1MQnV0dG9uRWxlbWVudD4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2J1dHRvbicgKTtcblx0XHR0aGlzLnByZXZpb3VzQnRuLmlubmVySFRNTCAgICAgICAgICA9ICc8PCc7XG5cdFx0dGhpcy5wcmV2aW91c0J0bi5pZCAgICAgICAgICAgICAgICAgPSAncHJldmlvdXMnO1xuXG5cdFx0dGhpcy5uZXh0QnRuICAgICAgICAgICAgICAgICAgICAgICAgPSA8SFRNTEJ1dHRvbkVsZW1lbnQ+IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdidXR0b24nICk7XG5cdFx0dGhpcy5uZXh0QnRuLmlubmVySFRNTCAgICAgICAgICAgICAgPSAnPj4nO1xuXHRcdHRoaXMubmV4dEJ0bi5pZCAgICAgICAgICAgICAgICAgICAgID0gJ25leHQnO1xuXG5cblx0XHR0ZXN0U2VsZWN0b3IuYXBwZW5kQ2hpbGQoIHRoaXMuc291cmNlQnRuICk7XG5cdFx0dGVzdFNlbGVjdG9yLmFwcGVuZENoaWxkKCB0aGlzLnByZXZpb3VzQnRuICk7XG5cdFx0dGVzdFNlbGVjdG9yLmFwcGVuZENoaWxkKCB0aGlzLmRyb3BEb3duICk7XG5cdFx0dGVzdFNlbGVjdG9yLmFwcGVuZENoaWxkKCB0aGlzLm5leHRCdG4gKTtcblx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCB0ZXN0U2VsZWN0b3IgKTtcblx0fVxuXHQvKipcblx0ICpcblx0ICovXG5cdHByaXZhdGUgaW5pdEZyYW1lU2V0KCkgOiB2b2lkXG5cdHtcblxuXHRcdHZhciBpZnJhbWVDb250YWluZXIgOiBIVE1MRGl2RWxlbWVudCAgICA9IDxIVE1MRGl2RWxlbWVudD4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicgKTtcblx0XHRcdGlmcmFtZUNvbnRhaW5lci5zdHlsZS53aWR0aCAgICAgICAgID0gJzEwMCUnO1xuXHRcdFx0aWZyYW1lQ29udGFpbmVyLnN0eWxlLmhlaWdodCAgICAgICAgPSAnMTAwJSc7XG5cblx0XHR0aGlzLnRlc3RJZnJhbWUgICAgICAgICAgICAgICAgICAgICAgPSA8SFRNTElGcmFtZUVsZW1lbnQ+IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdpZnJhbWUnICk7XG5cdFx0dGhpcy50ZXN0SWZyYW1lLmlkICAgICAgICAgICAgICAgICAgID0gJ3Rlc3RDb250YWluZXInO1xuXHRcdHRoaXMudGVzdElmcmFtZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnIzllOWU5ZSc7XG5cdFx0dGhpcy50ZXN0SWZyYW1lLnN0eWxlLmNzc0Zsb2F0ICAgICAgID0gJ25vbmUnO1xuXHRcdHRoaXMudGVzdElmcmFtZS5zdHlsZS5wb3NpdGlvbiAgICAgICA9ICdhYnNvbHV0ZSc7XG5cdFx0dGhpcy50ZXN0SWZyYW1lLnN0eWxlLnRvcCAgICAgICAgICAgID0gJzBweCc7XG5cdFx0dGhpcy50ZXN0SWZyYW1lLnN0eWxlLmxlZnQgICAgICAgICAgID0gJzBweCc7XG5cdFx0dGhpcy50ZXN0SWZyYW1lLnN0eWxlLmJvcmRlciAgICAgICAgID0gJzBweCc7XG5cdFx0dGhpcy50ZXN0SWZyYW1lLnN0eWxlLndpZHRoICAgICAgICAgID0gJzEwMCUnO1xuXHRcdHRoaXMudGVzdElmcmFtZS5zdHlsZS5oZWlnaHQgICAgICAgICA9ICcxMDAlJztcblx0XHQvL2JvdHRvbTogMTIwcHg7XG5cblx0XHR0aGlzLnNyY0lmcmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgPSA8SFRNTElGcmFtZUVsZW1lbnQ+IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdpZnJhbWUnICk7XG5cdFx0dGhpcy5zcmNJZnJhbWUuaWQgICAgICAgICAgICAgICAgICAgICAgID0gJ3Rlc3RTb3VyY2VDb250YWluZXInO1xuXHRcdHRoaXMuc3JjSWZyYW1lLnN0eWxlLmJhY2tncm91bmRDb2xvciAgICA9ICcjOWU5ZTllJztcblx0XHR0aGlzLnNyY0lmcmFtZS5zdHlsZS5jc3NGbG9hdCAgICAgICAgICAgPSAnbm9uZSc7XG5cdFx0dGhpcy5zcmNJZnJhbWUuc3R5bGUucG9zaXRpb24gICAgICAgICAgID0gJ2Fic29sdXRlJztcblx0XHR0aGlzLnNyY0lmcmFtZS5zdHlsZS5yaWdodCAgICAgICAgICAgICAgPSAnMHB4Jztcblx0XHR0aGlzLnNyY0lmcmFtZS5zdHlsZS50b3AgICAgICAgICAgICAgICAgPSAnMHB4Jztcblx0XHR0aGlzLnNyY0lmcmFtZS5zdHlsZS5ib3R0b20gICAgICAgICAgICAgPSAnMHB4Jztcblx0XHR0aGlzLnNyY0lmcmFtZS5zdHlsZS5ib3JkZXIgICAgICAgICAgICAgPSAnMHB4Jztcblx0XHR0aGlzLnNyY0lmcmFtZS5zdHlsZS53aWR0aCAgICAgICAgICAgICAgPSAnMCUnO1xuXHRcdHRoaXMuc3JjSWZyYW1lLnN0eWxlLmhlaWdodCAgICAgICAgICAgICA9ICcxMDAlJztcblxuXHRcdGlmcmFtZUNvbnRhaW5lci5hcHBlbmRDaGlsZCggdGhpcy50ZXN0SWZyYW1lICk7XG5cdFx0aWZyYW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKCB0aGlzLnNyY0lmcmFtZSApO1xuXG5cdFx0ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCggaWZyYW1lQ29udGFpbmVyICk7XG5cblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBTZWxlY3RuZXh0IC8gcHJldmlvdXMgbWVudSBpdGVtXG5cdCAqXG5cdCAqIEBwYXJhbSBkaXJlY3Rpb25cblx0ICovXG5cdHByaXZhdGUgbmFnaWdhdGVCeSggZGlyZWN0aW9uIDogbnVtYmVyID0gMSApIDogdm9pZFxuXHR7XG5cblx0XHR2YXIgbCA6IG51bWJlciAgPSB0aGlzLnRlc3RzLmxlbmd0aDtcblx0XHR2YXIgbmV4dENvdW50ZXIgPSB0aGlzLmNvdW50ZXIgKyBkaXJlY3Rpb247XG5cblx0XHRpZiAoIG5leHRDb3VudGVyIDwgMCApXG5cdFx0e1xuXHRcdFx0bmV4dENvdW50ZXIgPSB0aGlzLnRlc3RzLmxlbmd0aCAtIDE7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKCBuZXh0Q291bnRlciA+IHRoaXMudGVzdHMubGVuZ3RoIC0gMSApXG5cdFx0e1xuXHRcdFx0bmV4dENvdW50ZXIgPSAwO1xuXHRcdH1cblxuXHRcdHZhciB0ZXN0RGF0YSA6IFRlc3REYXRhID0gdGhpcy50ZXN0c1tuZXh0Q291bnRlcl07XG5cblx0XHRpZiAoIHRlc3REYXRhLm5hbWUuaW5kZXhPZiAoJy0tJykgIT0gLTEgKSAvLyBza2lwIHNlY3Rpb24gaGVhZGVyc1xuXHRcdHtcblx0XHRcdHRoaXMuY291bnRlciA9IG5leHRDb3VudGVyO1xuXHRcdFx0dGhpcy5uYWdpZ2F0ZUJ5KCBkaXJlY3Rpb24gKTtcblx0XHR9XG5cdFx0ZWxzZVxuXHRcdHtcblx0XHRcdHRoaXMubmF2aWdhdGVUb1NlY3Rpb24oIHRlc3REYXRhICk7XG5cdFx0XHR0aGlzLmRyb3BEb3duLnNlbGVjdGVkSW5kZXggPSBuZXh0Q291bnRlcjtcblx0XHRcdHRoaXMuY291bnRlciA9IG5leHRDb3VudGVyO1xuXHRcdH1cblxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIE5hdmlnYXRlIHRvIGEgc2VjdGlvblxuXHQgKlxuXHQgKiBAcGFyYW0gdGVzdERhdGFcblx0ICovXG5cdHByaXZhdGUgbmF2aWdhdGVUb1NlY3Rpb24gKCB0ZXN0RGF0YSA6IFRlc3REYXRhICkgOiB2b2lkXG5cdHtcblx0XHR3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUodGVzdERhdGEuanMsIHRlc3REYXRhLmpzLCAnP3Rlc3Q9JyArIHRlc3REYXRhLmpzKTtcblx0XHR0aGlzLnNyY0lmcmFtZS5zcmMgPSBcImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgsXCIgKyB0aGlzLmNyZWF0ZVNvdXJjZVZpZXdIVE1MKCB0ZXN0RGF0YS5zcmMgKTtcblx0XHR0aGlzLnRlc3RJZnJhbWUuc3JjID0gJ2ZyYW1lLmh0bWw/bmFtZT0nICsgdGVzdERhdGEuY2xhc3NwYXRoICsgJyZqcz0nICsgdGVzdERhdGEuanM7XG5cdH1cblxuXHRwcml2YXRlIHRvZ2dsZVNvdXJjZSgpIDogdm9pZFxuXHR7XG5cblx0XHRpZiAoIHRoaXMuc291cmNlVmlzaWJsZSApXG5cdFx0e1xuXHRcdFx0dGhpcy50ZXN0SWZyYW1lLnN0eWxlLndpZHRoICAgICAgICAgPSAnMTAwJSc7XG5cdFx0XHR0aGlzLnNyY0lmcmFtZS5zdHlsZS53aWR0aCAgICAgICAgICA9ICcwJSc7XG5cdFx0XHR0aGlzLnNvdXJjZUJ0bi5pbm5lckhUTUwgICAgICAgICAgICA9ICdTaG93IFNvdXJjZSc7XG5cdFx0fVxuXHRcdGVsc2Vcblx0XHR7XG5cdFx0XHR0aGlzLnRlc3RJZnJhbWUuc3R5bGUud2lkdGggICAgICAgICA9ICcyMCUnO1xuXHRcdFx0dGhpcy5zcmNJZnJhbWUuc3R5bGUud2lkdGggICAgICAgICAgPSAnODAlJztcblx0XHRcdHRoaXMuc291cmNlQnRuLmlubmVySFRNTCAgICAgICAgICAgID0gJ0hpZGUgU291cmNlJztcblx0XHR9XG5cblx0XHR0aGlzLnNvdXJjZVZpc2libGUgPSAhdGhpcy5zb3VyY2VWaXNpYmxlO1xuXG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVNvdXJjZVZpZXdIVE1MICggdXJsIDogc3RyaW5nICkgOiBzdHJpbmdcblx0e1xuXG5cdFx0dmFyIGh0bWwgOiBzdHJpbmcgPSAnJztcblxuXHRcdGh0bWwgKz0gJzwhRE9DVFlQRSBodG1sPic7XG5cdFx0aHRtbCArPSAnPGh0bWw+Jztcblx0XHRodG1sICs9ICcgICA8aGVhZD4nO1xuXHRcdGh0bWwgKz0gJyAgICAgICA8dGl0bGU+PC90aXRsZT4nO1xuXHRcdGh0bWwgKz0gJyAgICAgICA8c3R5bGU+Jztcblx0XHRodG1sICs9ICcgICAgICAgICAgIGh0bWwnO1xuXHRcdGh0bWwgKz0gJyAgICAgICAgICAgeyc7XG5cdFx0aHRtbCArPSAnICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOyc7XG5cdFx0aHRtbCArPSAnICAgICAgICAgICAgICAgYm9yZGVyOiAwcHg7Jztcblx0XHRodG1sICs9ICcgICAgICAgICAgICAgICBwYWRkaW5nOiAwcHg7Jztcblx0XHRodG1sICs9ICcgICAgICAgICAgfSc7XG5cdFx0aHRtbCArPSAnICAgICAgIDwvc3R5bGU+Jztcblx0XHRodG1sICs9ICcgICA8c2NyaXB0IHNyYz1cImh0dHA6Ly9naXN0LWl0LmFwcHNwb3QuY29tL2dpdGh1Yi9hd2F5anMvc3RhZ2VnbC1jb250ZXh0LXRzL3RyZWUvbWFzdGVyL3Rlc3RzLycgKyB1cmwgKyAnP2Zvb3Rlcj1ub1wiPjwvc2NyaXB0Pic7XG5cdFx0aHRtbCArPSAnPC9oZWFkPic7XG5cdFx0aHRtbCArPSAnPGJvZHk+Jztcblx0XHRodG1sICs9ICc8L2JvZHk+Jztcblx0XHRodG1sICs9ICc8L2h0bWw+JztcblxuXHRcdHJldHVybiBodG1sO1xuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8gVXRpbHNcblxuXHQvKipcblx0ICpcblx0ICogVXRpbCBmdW5jdGlvbiAtIGdldCBFbGVtZW50IGJ5IElEXG5cdCAqXG5cdCAqIEBwYXJhbSBpZFxuXHQgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG5cdCAqL1xuXHRwcml2YXRlIGdldElkKGlkIDogc3RyaW5nICkgOiBIVE1MRWxlbWVudFxuXHR7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXHR9XG5cblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblx0Ly8gRXZlbnRzXG5cblx0LyoqXG5cdCAqXG5cdCAqIERyb3Bib3ggZXZlbnQgaGFuZGxlclxuXHQgKlxuXHQgKiBAcGFyYW0gZVxuXHQgKi9cblx0cHJpdmF0ZSBkcm9wRG93bkNoYW5nZSggZSApIDogdm9pZFxuXHR7XG5cdFx0dGhpcy5kcm9wRG93bi5vcHRpb25zW3RoaXMuZHJvcERvd24uc2VsZWN0ZWRJbmRleF0udmFsdWVcblx0XHR0aGlzLmNvdW50ZXIgPSB0aGlzLmRyb3BEb3duLnNlbGVjdGVkSW5kZXg7XG5cdFx0dmFyIGRhdGFJbmRleCA6IG51bWJlciA9IHBhcnNlSW50KCB0aGlzLmRyb3BEb3duLm9wdGlvbnNbdGhpcy5kcm9wRG93bi5zZWxlY3RlZEluZGV4XS52YWx1ZSApIDtcblxuXHRcdGlmICggISBpc05hTiggZGF0YUluZGV4ICkgKVxuXHRcdHtcblx0XHRcdHRoaXMubmF2aWdhdGVUb1NlY3Rpb24oIHRoaXMudGVzdHNbZGF0YUluZGV4XSApO1xuXHRcdH1cblx0fVxuXG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBBcHBsaWNhdGlvbiBGcmFtZVxuXG5jbGFzcyBBcHBGcmFtZVxue1xuXG5cdHByaXZhdGUgY2xhc3NQYXRoICAgOiBzdHJpbmcgPSAnJztcblx0cHJpdmF0ZSBqc1BhdGggICAgICA6IHN0cmluZyA9ICcnO1xuXG5cdGNvbnN0cnVjdG9yKCApXG5cdHtcblxuXHRcdHZhciBxdWVyeVBhcmFtcyA6IGFueSA9IFV0aWxzLmdldFF1ZXJ5UGFyYW1zKCBkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2ggKTtcblxuXHRcdGlmICggcXVlcnlQYXJhbXMuanMgIT0gdW5kZWZpbmVkICYmIHF1ZXJ5UGFyYW1zLm5hbWUgIT0gdW5kZWZpbmVkIClcblx0XHR7XG5cblx0XHRcdHRoaXMuanNQYXRoICAgICA9IHF1ZXJ5UGFyYW1zLmpzO1xuXHRcdFx0dGhpcy5jbGFzc1BhdGggID0gcXVlcnlQYXJhbXMubmFtZTtcblx0XHRcdHRoaXMubG9hZEpTKCB0aGlzLmpzUGF0aCApO1xuXG5cdFx0fVxuXG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogTG9hZCBhIEphdmFTY3JpcHQgZmlsZVxuXHQgKlxuXHQgKiBAcGFyYW0gdXJsIC0gVVJMIG9mIEphdmFTY3JpcHQgZmlsZVxuXHQgKi9cblx0cHJpdmF0ZSBsb2FkSlModXJsIDogc3RyaW5nIClcblx0e1xuXG5cdFx0dmFyIGhlYWQgOiBIVE1MRWxlbWVudCA9IDxIVE1MRWxlbWVudD4gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdO1xuXHRcdHZhciBzY3JpcHQgOiBIVE1MU2NyaXB0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG5cdFx0c2NyaXB0LnR5cGUgICAgID0gXCJ0ZXh0L2phdmFzY3JpcHRcIjtcblx0XHRzY3JpcHQuc3JjICAgICAgPSB1cmw7XG5cdFx0c2NyaXB0Lm9ubG9hZCAgID0gKCkgPT4gdGhpcy5qc0xvYWRlZCgpO1xuXG5cdFx0aGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEV2ZW50IEhhbmRsZXIgZm9yIGxvYWRlZCBKYXZhU2NyaXB0IGZpbGVzXG5cdCAqXG5cdCAqL1xuXHRwcml2YXRlIGpzTG9hZGVkKClcblx0e1xuXG5cdFx0dmFyIGNyZWF0ZVBhdGggOiBBcnJheTxzdHJpbmc+ID0gdGhpcy5jbGFzc1BhdGguc3BsaXQoJy4nKTsgLy8gU3BsaXQgdGhlIGNsYXNzcGF0aFxuXHRcdHZhciBvYmogICAgICAgICA6IGFueTtcblxuXHRcdGZvciAoIHZhciBjIDogbnVtYmVyID0gMCA7IGMgPCBjcmVhdGVQYXRoLmxlbmd0aCA7IGMrKyApXG5cdFx0e1xuXG5cdFx0XHRpZiAoIG9iaiA9PSBudWxsIClcblx0XHRcdHtcblx0XHRcdFx0b2JqID0gd2luZG93W2NyZWF0ZVBhdGhbY11dOyAvLyByZWZlcmVuY2UgYmFzZSBtb2R1bGUgKCB3aWxsIGJlIGEgY2hpbGQgb2YgdGhlIHdpbmRvdyApXG5cdFx0XHR9XG5cdFx0XHRlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdG9iaiA9IG9ialtjcmVhdGVQYXRoW2NdXTsgLy8gcmVmZXJlbmNlIHN1YiBtb2R1bGUgLyBDbGFzc1xuXHRcdFx0fVxuXG5cblx0XHR9XG5cblx0XHRpZiAoIG9iaiAhPSBudWxsIClcblx0XHR7XG5cdFx0XHRuZXcgb2JqKCk7IC8vIGlmIENsYXNzIGhhcyBiZWVuIGZvdW5kIC0gc3RhcnQgdGhlIHRlc3Rcblx0XHR9XG5cblx0fVxuXG5cblxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ29tbW9uIFV0aWxpdGllc1xuXG5jbGFzcyBVdGlsc1xue1xuXHQvKipcblx0ICpcblx0ICogVXRpbGl0eSBmdW5jdGlvbiAtIFBhcnNlIGEgUXVlcnkgZm9ybWF0dGVkIHN0cmluZ1xuXHQgKlxuXHQgKiBAcGFyYW0gcXNcblx0ICogQHJldHVybnMge3t9fVxuXHQgKi9cblx0c3RhdGljIGdldFF1ZXJ5UGFyYW1zKCBxcyApIDogT2JqZWN0IHtcblxuXHRcdHFzID0gcXMuc3BsaXQoXCIrXCIpLmpvaW4oXCIgXCIpO1xuXG5cdFx0dmFyIHBhcmFtcyA9IHt9LCB0b2tlbnMsXG5cdFx0XHRyZSA9IC9bPyZdPyhbXj1dKyk9KFteJl0qKS9nO1xuXG5cdFx0d2hpbGUgKHRva2VucyA9IHJlLmV4ZWMocXMpKSB7XG5cdFx0XHRwYXJhbXNbZGVjb2RlVVJJQ29tcG9uZW50KHRva2Vuc1sxXSldID0gZGVjb2RlVVJJQ29tcG9uZW50KHRva2Vuc1syXSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBhcmFtcztcblx0fVxufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRGF0YVxuXG5jbGFzcyBUZXN0RGF0YVxue1xuXHRwdWJsaWMganMgICAgICAgICAgIDogc3RyaW5nO1xuXHRwdWJsaWMgY2xhc3NwYXRoICAgIDogc3RyaW5nO1xuXHRwdWJsaWMgc3JjICAgICAgICAgIDogc3RyaW5nO1xuXHRwdWJsaWMgbmFtZSAgICAgICAgIDogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yKCBuYW1lIDogc3RyaW5nICwgY2xhc3NwYXRoIDogc3RyaW5nICwganMgOiBzdHJpbmcgLCBzcmMgOiBzdHJpbmcgKVxuXHR7XG5cdFx0dGhpcy5qcyAgICAgICAgID0ganM7XG5cdFx0dGhpcy5jbGFzc3BhdGggID0gY2xhc3NwYXRoO1xuXHRcdHRoaXMuc3JjICAgICAgICA9IHNyYztcblx0XHR0aGlzLm5hbWUgICAgICAgPSBuYW1lO1xuXHR9XG59Il19 \ No newline at end of file diff --git a/tests/AppHarness.ts b/tests/AppHarness.ts new file mode 100644 index 00000000..dbd1bf03 --- /dev/null +++ b/tests/AppHarness.ts @@ -0,0 +1,465 @@ +//--------------------------------------------------- +// Application Harness + +class AppHarness +{ + + //------------------------------------------------------------------------------ + + private tests : Array = new Array(); + private dropDown : HTMLSelectElement; + private previousBtn : HTMLButtonElement; + private nextBtn : HTMLButtonElement; + private sourceBtn : HTMLButtonElement; + private testIframe : HTMLIFrameElement; + private srcIframe : HTMLIFrameElement; + private counter : number = 0; + private sourceVisible : boolean = false; + private loadDefault : boolean = true; + + //------------------------------------------------------------------------------ + + constructor() + { + + this.initFrameSet(); + this.initInterface(); + + + this.previousBtn.onclick = () => this.nagigateBy( -1 ); + this.nextBtn.onclick = () => this.nagigateBy( 1 ); + this.sourceBtn.onclick = () => this.toggleSource(); + this.dropDown.onchange = ( e ) => this.dropDownChange( e ); + + } + + //------------------------------------------------------------------------------ + + /** + * + * Load a test + * + * @param classPath - Module and Class path of test + * @param js Path to JavaScript file + * @param ts Path to Typescript file ( not yet used - reserved for future show source ) + */ + public load( classPath : string , js : string , ts : string ) : void + { + + this.loadFromURL(); + + if ( this.loadDefault ) + { + window.history.pushState(js, js, '?test=' + js); + this.testIframe.src = 'frame.html?name=' + classPath + '&js=' + js; + this.srcIframe.src = "data:text/html;charset=utf-8," + this.createSourceViewHTML( ts ); + + } + } + + /** + * + * Add a test to the AppHarness + * + * @param name Name of test + * @param classPath - Module and Class path of test + * @param js Path to JavaScript file + * @param ts Path to Typescript file ( not yet used - reserved for future show source ) + */ + public addTest( name : string , classpath : string , js : string , ts : string ) : void + { + this.tests.push ( new TestData( name , classpath , js , ts ) ); + } + + /** + * + * Add a separator to the menu + * + * @param name + */ + public addSeperator( name : string = '' ) : void + { + this.tests.push ( new TestData( '-- ' + name , '' , '' , '') ); + } + + /** + * + * Start the application harness + * + */ + public start( slideshowMode : boolean = false ) : void + { + for ( var c : number = 0 ; c < this.tests.length ; c ++ ) + { + var option : HTMLOptionElement = new Option( this.tests[c].name , String( c ) ); + this.dropDown.add( option ); + } + + if ( slideshowMode ) + { + + setInterval( () => this.nagigateBy( 1 ) , 15000); + } + } + + //------------------------------------------------------------------------------ + + private loadFromURL() : void + { + var queryParams : any = Utils.getQueryParams( document.location.search ); + + if ( queryParams.test != null ) + { + var l : number = this.tests.length; + + for ( var c : number = 0 ; c < l ; c ++ ) + { + if ( this.tests[c].js == queryParams.test ) + { + console.log ( '======>>>> LOAD TEST'); + + this.navigateToSection( this.tests[c] ); + this.loadDefault = false; + } + } + } + } + /** + * + */ + private initInterface() : void + { + + var testSelector : HTMLDivElement = document.createElement( 'div' ); + testSelector.style.cssFloat = 'none'; + testSelector.style.position = 'absolute'; + testSelector.style.bottom = '15px'; + testSelector.style.width = '600px'; + testSelector.style.left = '50%'; + testSelector.style.marginLeft = '-300px' + testSelector.style.textAlign = 'center'; + + + this.dropDown = document.createElement( 'select' ); + this.dropDown.name = "selectTestDropDown" + this.dropDown.id = "selectTest" + + this.sourceBtn = document.createElement( 'button' ); + this.sourceBtn.innerHTML = 'Show Source'; + this.sourceBtn.id = 'previous'; + + this.previousBtn = document.createElement( 'button' ); + this.previousBtn.innerHTML = '<<'; + this.previousBtn.id = 'previous'; + + this.nextBtn = document.createElement( 'button' ); + this.nextBtn.innerHTML = '>>'; + this.nextBtn.id = 'next'; + + + testSelector.appendChild( this.sourceBtn ); + testSelector.appendChild( this.previousBtn ); + testSelector.appendChild( this.dropDown ); + testSelector.appendChild( this.nextBtn ); + document.body.appendChild( testSelector ); + } + /** + * + */ + private initFrameSet() : void + { + + var iframeContainer : HTMLDivElement = document.createElement( 'div' ); + iframeContainer.style.width = '100%'; + iframeContainer.style.height = '100%'; + + this.testIframe = document.createElement( 'iframe' ); + this.testIframe.id = 'testContainer'; + this.testIframe.style.backgroundColor = '#9e9e9e'; + this.testIframe.style.cssFloat = 'none'; + this.testIframe.style.position = 'absolute'; + this.testIframe.style.top = '0px'; + this.testIframe.style.left = '0px'; + this.testIframe.style.border = '0px'; + this.testIframe.style.width = '100%'; + this.testIframe.style.height = '100%'; + //bottom: 120px; + + this.srcIframe = document.createElement( 'iframe' ); + this.srcIframe.id = 'testSourceContainer'; + this.srcIframe.style.backgroundColor = '#9e9e9e'; + this.srcIframe.style.cssFloat = 'none'; + this.srcIframe.style.position = 'absolute'; + this.srcIframe.style.right = '0px'; + this.srcIframe.style.top = '0px'; + this.srcIframe.style.bottom = '0px'; + this.srcIframe.style.border = '0px'; + this.srcIframe.style.width = '0%'; + this.srcIframe.style.height = '100%'; + + iframeContainer.appendChild( this.testIframe ); + iframeContainer.appendChild( this.srcIframe ); + + document.body.appendChild( iframeContainer ); + + } + + /** + * + * Selectnext / previous menu item + * + * @param direction + */ + private nagigateBy( direction : number = 1 ) : void + { + + var l : number = this.tests.length; + var nextCounter = this.counter + direction; + + if ( nextCounter < 0 ) + { + nextCounter = this.tests.length - 1; + } + else if ( nextCounter > this.tests.length - 1 ) + { + nextCounter = 0; + } + + var testData : TestData = this.tests[nextCounter]; + + if ( testData.name.indexOf ('--') != -1 ) // skip section headers + { + this.counter = nextCounter; + this.nagigateBy( direction ); + } + else + { + this.navigateToSection( testData ); + this.dropDown.selectedIndex = nextCounter; + this.counter = nextCounter; + } + + } + + /** + * + * Navigate to a section + * + * @param testData + */ + private navigateToSection ( testData : TestData ) : void + { + window.history.pushState(testData.js, testData.js, '?test=' + testData.js); + this.srcIframe.src = "data:text/html;charset=utf-8," + this.createSourceViewHTML( testData.src ); + this.testIframe.src = 'frame.html?name=' + testData.classpath + '&js=' + testData.js; + } + + private toggleSource() : void + { + + if ( this.sourceVisible ) + { + this.testIframe.style.width = '100%'; + this.srcIframe.style.width = '0%'; + this.sourceBtn.innerHTML = 'Show Source'; + } + else + { + this.testIframe.style.width = '20%'; + this.srcIframe.style.width = '80%'; + this.sourceBtn.innerHTML = 'Hide Source'; + } + + this.sourceVisible = !this.sourceVisible; + + } + + private createSourceViewHTML ( url : string ) : string + { + + var html : string = ''; + + html += ''; + html += ''; + html += ' '; + html += ' '; + html += ' '; + html += ' '; + html += ''; + html += ''; + html += ''; + html += ''; + + return html; + } + + //------------------------------------------------------------------------------ + // Utils + + /** + * + * Util function - get Element by ID + * + * @param id + * @returns {HTMLElement} + */ + private getId(id : string ) : HTMLElement + { + return document.getElementById( id ); + } + + //------------------------------------------------------------------------------ + // Events + + /** + * + * Dropbox event handler + * + * @param e + */ + private dropDownChange( e ) : void + { + this.dropDown.options[this.dropDown.selectedIndex].value + this.counter = this.dropDown.selectedIndex; + var dataIndex : number = parseInt( this.dropDown.options[this.dropDown.selectedIndex].value ) ; + + if ( ! isNaN( dataIndex ) ) + { + this.navigateToSection( this.tests[dataIndex] ); + } + } + +} + +//--------------------------------------------------- +// Application Frame + +class AppFrame +{ + + private classPath : string = ''; + private jsPath : string = ''; + + constructor( ) + { + + var queryParams : any = Utils.getQueryParams( document.location.search ); + + if ( queryParams.js != undefined && queryParams.name != undefined ) + { + + this.jsPath = queryParams.js; + this.classPath = queryParams.name; + this.loadJS( this.jsPath ); + + } + + } + + /** + * + * Load a JavaScript file + * + * @param url - URL of JavaScript file + */ + private loadJS(url : string ) + { + + var head : HTMLElement = document.getElementsByTagName("head")[0]; + var script : HTMLScriptElement = document.createElement("script"); + script.type = "text/javascript"; + script.src = url; + script.onload = () => this.jsLoaded(); + + head.appendChild(script); + } + + /** + * + * Event Handler for loaded JavaScript files + * + */ + private jsLoaded() + { + + var createPath : Array = this.classPath.split('.'); // Split the classpath + var obj : any; + + for ( var c : number = 0 ; c < createPath.length ; c++ ) + { + + if ( obj == null ) + { + obj = window[createPath[c]]; // reference base module ( will be a child of the window ) + } + else + { + obj = obj[createPath[c]]; // reference sub module / Class + } + + + } + + if ( obj != null ) + { + new obj(); // if Class has been found - start the test + } + + } + + + +} + +//--------------------------------------------------- +// Common Utilities + +class Utils +{ + /** + * + * Utility function - Parse a Query formatted string + * + * @param qs + * @returns {{}} + */ + static getQueryParams( qs ) : Object { + + qs = qs.split("+").join(" "); + + var params = {}, tokens, + re = /[?&]?([^=]+)=([^&]*)/g; + + while (tokens = re.exec(qs)) { + params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]); + } + + return params; + } +} + +//--------------------------------------------------- +// Data + +class TestData +{ + public js : string; + public classpath : string; + public src : string; + public name : string; + + constructor( name : string , classpath : string , js : string , src : string ) + { + this.js = js; + this.classpath = classpath; + this.src = src; + this.name = name; + } +} \ No newline at end of file diff --git a/tests/assets/1.png b/tests/assets/1.png new file mode 100755 index 00000000..109d8dde Binary files /dev/null and b/tests/assets/1.png differ diff --git a/tests/assets/130909wall_big.png b/tests/assets/130909wall_big.png new file mode 100755 index 00000000..109d8dde Binary files /dev/null and b/tests/assets/130909wall_big.png differ diff --git a/tests/assets/256x256.png b/tests/assets/256x256.png new file mode 100755 index 00000000..109d8dde Binary files /dev/null and b/tests/assets/256x256.png differ diff --git a/tests/assets/CubeTextureTest.cube b/tests/assets/CubeTextureTest.cube new file mode 100644 index 00000000..ddc90681 --- /dev/null +++ b/tests/assets/CubeTextureTest.cube @@ -0,0 +1,28 @@ +{ + "data":[ + { + "id":"posX", + "image":"sky_posX.jpg" + }, + { + "id":"negX", + "image":"sky_negX.jpg" + }, + { + "id":"posY", + "image":"sky_posY.jpg" + }, + { + "id":"negY", + "image":"sky_negY.jpg" + }, + { + "id":"posZ", + "image":"sky_posZ.jpg" + }, + { + "id":"negZ", + "image":"sky_negZ.jpg" + } + ] +} diff --git a/tests/assets/custom_uv_horizontal.png b/tests/assets/custom_uv_horizontal.png new file mode 100755 index 00000000..7db084b9 Binary files /dev/null and b/tests/assets/custom_uv_horizontal.png differ diff --git a/tests/assets/dots.png b/tests/assets/dots.png new file mode 100755 index 00000000..ce903166 Binary files /dev/null and b/tests/assets/dots.png differ diff --git a/tests/assets/sky_negX.jpg b/tests/assets/sky_negX.jpg new file mode 100755 index 00000000..a7cff5ae Binary files /dev/null and b/tests/assets/sky_negX.jpg differ diff --git a/tests/assets/sky_negY.jpg b/tests/assets/sky_negY.jpg new file mode 100755 index 00000000..57f7a532 Binary files /dev/null and b/tests/assets/sky_negY.jpg differ diff --git a/tests/assets/sky_negZ.jpg b/tests/assets/sky_negZ.jpg new file mode 100755 index 00000000..8458a09e Binary files /dev/null and b/tests/assets/sky_negZ.jpg differ diff --git a/tests/assets/sky_posX.jpg b/tests/assets/sky_posX.jpg new file mode 100755 index 00000000..511555f7 Binary files /dev/null and b/tests/assets/sky_posX.jpg differ diff --git a/tests/assets/sky_posY.jpg b/tests/assets/sky_posY.jpg new file mode 100755 index 00000000..c18ce753 Binary files /dev/null and b/tests/assets/sky_posY.jpg differ diff --git a/tests/assets/sky_posZ.jpg b/tests/assets/sky_posZ.jpg new file mode 100755 index 00000000..e8130bca Binary files /dev/null and b/tests/assets/sky_posZ.jpg differ diff --git a/tests/containers/View3DTest.js b/tests/containers/View3DTest.js new file mode 100755 index 00000000..2dbdfa1a --- /dev/null +++ b/tests/containers/View3DTest.js @@ -0,0 +1,53 @@ +var View = require("awayjs-core/lib/containers/View"); +var PointLight = require("awayjs-core/lib/entities/PointLight"); +var PrimitiveTorusPrefab = require("awayjs-core/lib/prefabs/PrimitiveTorusPrefab"); +var RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +var Debug = require("awayjs-core/lib/utils/Debug"); +var DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +var TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); +var View3DTest = (function () { + function View3DTest() { + var _this = this; + Debug.THROW_ERRORS = false; + Debug.LOG_PI_ERRORS = false; + this.meshes = new Array(); + this.light = new PointLight(); + this.view = new View(new DefaultRenderer()); + this.view.camera.z = 0; + this.view.backgroundColor = 0x776655; + this.torus = new PrimitiveTorusPrefab(150, 50, 32, 32, false); + var l = 10; + var radius = 1000; + var matB = new TriangleMethodMaterial(); + this.torus.material = matB; + for (var c = 0; c < l; c++) { + var t = Math.PI * 2 * c / l; + var mesh = this.torus.getNewObject(); + mesh.x = Math.cos(t) * radius; + mesh.y = 0; + mesh.z = Math.sin(t) * radius; + this.view.scene.addChild(mesh); + this.meshes.push(mesh); + } + this.view.scene.addChild(this.light); + this.raf = new RequestAnimationFrame(this.tick, this); + this.raf.start(); + this.resize(null); + window.onresize = function (e) { return _this.resize(null); }; + } + View3DTest.prototype.tick = function (e) { + for (var c = 0; c < this.meshes.length; c++) + this.meshes[c].rotationY += 2; + this.view.camera.rotationY += .5; + this.view.render(); + }; + View3DTest.prototype.resize = function (e) { + this.view.y = 0; + this.view.x = 0; + this.view.width = window.innerWidth; + this.view.height = window.innerHeight; + }; + return View3DTest; +})(); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnRhaW5lcnMvdmlldzNkdGVzdC50cyJdLCJuYW1lcyI6WyJWaWV3M0RUZXN0IiwiVmlldzNEVGVzdC5jb25zdHJ1Y3RvciIsIlZpZXczRFRlc3QudGljayIsIlZpZXczRFRlc3QucmVzaXplIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFPLElBQUksV0FBaUIsaUNBQWlDLENBQUMsQ0FBQztBQUUvRCxJQUFPLFVBQVUsV0FBZSxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3ZFLElBQU8sb0JBQW9CLFdBQWEsOENBQThDLENBQUMsQ0FBQztBQUN4RixJQUFPLHFCQUFxQixXQUFZLDZDQUE2QyxDQUFDLENBQUM7QUFDdkYsSUFBTyxLQUFLLFdBQWdCLDZCQUE2QixDQUFDLENBQUM7QUFFM0QsSUFBTyxlQUFlLFdBQWMsZ0RBQWdELENBQUMsQ0FBQztBQUN0RixJQUFPLHNCQUFzQixXQUFZLHFEQUFxRCxDQUFDLENBQUM7QUFFaEcsSUFBTSxVQUFVO0lBVWZBLFNBVktBLFVBQVVBO1FBQWhCQyxpQkF1RUNBO1FBMURDQSxLQUFLQSxDQUFDQSxZQUFZQSxHQUFHQSxLQUFLQSxDQUFDQTtRQUMzQkEsS0FBS0EsQ0FBQ0EsYUFBYUEsR0FBR0EsS0FBS0EsQ0FBQ0E7UUFFNUJBLElBQUlBLENBQUNBLE1BQU1BLEdBQUdBLElBQUlBLEtBQUtBLEVBQVFBLENBQUNBO1FBQ2hDQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxVQUFVQSxFQUFFQSxDQUFDQTtRQUM5QkEsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsSUFBSUEsSUFBSUEsQ0FBQ0EsSUFBSUEsZUFBZUEsRUFBRUEsQ0FBQ0EsQ0FBQUE7UUFDM0NBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1FBQ3ZCQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxlQUFlQSxHQUFHQSxRQUFRQSxDQUFDQTtRQUNyQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsSUFBSUEsb0JBQW9CQSxDQUFDQSxHQUFHQSxFQUFHQSxFQUFFQSxFQUFHQSxFQUFFQSxFQUFHQSxFQUFFQSxFQUFHQSxLQUFLQSxDQUFDQSxDQUFDQTtRQUVsRUEsSUFBSUEsQ0FBQ0EsR0FBaUJBLEVBQUVBLENBQUNBO1FBQ3pCQSxJQUFJQSxNQUFNQSxHQUFpQkEsSUFBSUEsQ0FBQ0E7UUFDaENBLElBQUlBLElBQUlBLEdBQTBCQSxJQUFJQSxzQkFBc0JBLEVBQUVBLENBQUNBO1FBRS9EQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxRQUFRQSxHQUFHQSxJQUFJQSxDQUFDQTtRQUUzQkEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBVUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsRUFBRUEsRUFBRUEsQ0FBQ0E7WUFFbkNBLElBQUlBLENBQUNBLEdBQVFBLElBQUlBLENBQUNBLEVBQUVBLEdBQUdBLENBQUNBLEdBQUdBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1lBRWpDQSxJQUFJQSxJQUFJQSxHQUFlQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxZQUFZQSxFQUFFQSxDQUFDQTtZQUNqREEsSUFBSUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsTUFBTUEsQ0FBQ0E7WUFDNUJBLElBQUlBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1lBQ1hBLElBQUlBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLE1BQU1BLENBQUNBO1lBRTVCQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxRQUFRQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtZQUMvQkEsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFFeEJBLENBQUNBO1FBRURBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFFBQVFBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBO1FBRXJDQSxJQUFJQSxDQUFDQSxHQUFHQSxHQUFHQSxJQUFJQSxxQkFBcUJBLENBQUNBLElBQUlBLENBQUNBLElBQUlBLEVBQUdBLElBQUlBLENBQUNBLENBQUNBO1FBQ3ZEQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxLQUFLQSxFQUFFQSxDQUFDQTtRQUNqQkEsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBRUEsSUFBSUEsQ0FBRUEsQ0FBQ0E7UUFFcEJBLE1BQU1BLENBQUNBLFFBQVFBLEdBQUdBLFVBQUNBLENBQUNBLElBQUtBLE9BQUFBLEtBQUlBLENBQUNBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLEVBQWpCQSxDQUFpQkEsQ0FBQ0E7SUFFNUNBLENBQUNBO0lBRU9ELHlCQUFJQSxHQUFaQSxVQUFhQSxDQUFDQTtRQUdiRSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFVQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxNQUFNQSxFQUFFQSxDQUFDQSxFQUFFQTtZQUNqREEsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsU0FBU0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFFL0JBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLFNBQVNBLElBQUlBLEVBQUVBLENBQUNBO1FBQ2pDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxFQUFFQSxDQUFDQTtJQUNwQkEsQ0FBQ0E7SUFFTUYsMkJBQU1BLEdBQWJBLFVBQWNBLENBQUNBO1FBRWRHLElBQUlBLENBQUNBLElBQUlBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1FBQ2hCQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUVoQkEsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsTUFBTUEsQ0FBQ0EsVUFBVUEsQ0FBQ0E7UUFDcENBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLEdBQUdBLE1BQU1BLENBQUNBLFdBQVdBLENBQUNBO0lBQ3ZDQSxDQUFDQTtJQUNGSCxpQkFBQ0E7QUFBREEsQ0F2RUEsQUF1RUNBLElBQUEiLCJmaWxlIjoiY29udGFpbmVycy9WaWV3M0RUZXN0LmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9yb2JiYXRlbWFuL1dlYnN0b3JtUHJvamVjdHMvYXdheWpzLXN0YWdlZ2wvIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZpZXdcdFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb250YWluZXJzL1ZpZXdcIik7XG5pbXBvcnQgTWVzaFx0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2VudGl0aWVzL01lc2hcIik7XG5pbXBvcnQgUG9pbnRMaWdodFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZW50aXRpZXMvUG9pbnRMaWdodFwiKTtcbmltcG9ydCBQcmltaXRpdmVUb3J1c1ByZWZhYlx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9wcmVmYWJzL1ByaW1pdGl2ZVRvcnVzUHJlZmFiXCIpO1xuaW1wb3J0IFJlcXVlc3RBbmltYXRpb25GcmFtZVx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvUmVxdWVzdEFuaW1hdGlvbkZyYW1lXCIpO1xuaW1wb3J0IERlYnVnXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL0RlYnVnXCIpO1xuXG5pbXBvcnQgRGVmYXVsdFJlbmRlcmVyXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9yZW5kZXIvRGVmYXVsdFJlbmRlcmVyXCIpO1xuaW1wb3J0IFRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWxcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9UcmlhbmdsZU1ldGhvZE1hdGVyaWFsXCIpO1xuXG5jbGFzcyBWaWV3M0RUZXN0XG57XG5cblx0cHJpdmF0ZSB2aWV3OlZpZXc7XG5cdHByaXZhdGUgdG9ydXM6UHJpbWl0aXZlVG9ydXNQcmVmYWI7XG5cblx0cHJpdmF0ZSBsaWdodDpQb2ludExpZ2h0O1xuXHRwcml2YXRlIHJhZjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5cdHByaXZhdGUgbWVzaGVzOkFycmF5PE1lc2g+O1xuXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXG5cdFx0RGVidWcuVEhST1dfRVJST1JTID0gZmFsc2U7XG5cdFx0RGVidWcuTE9HX1BJX0VSUk9SUyA9IGZhbHNlO1xuXG5cdFx0dGhpcy5tZXNoZXMgPSBuZXcgQXJyYXk8TWVzaD4oKTtcblx0XHR0aGlzLmxpZ2h0ID0gbmV3IFBvaW50TGlnaHQoKTtcblx0XHR0aGlzLnZpZXcgPSBuZXcgVmlldyhuZXcgRGVmYXVsdFJlbmRlcmVyKCkpXG5cdFx0dGhpcy52aWV3LmNhbWVyYS56ID0gMDtcblx0XHR0aGlzLnZpZXcuYmFja2dyb3VuZENvbG9yID0gMHg3NzY2NTU7XG5cdFx0dGhpcy50b3J1cyA9IG5ldyBQcmltaXRpdmVUb3J1c1ByZWZhYigxNTAgLCA1MCAsIDMyICwgMzIgLCBmYWxzZSk7XG5cblx0XHR2YXIgbDpudW1iZXIgICAgICAgID0gMTA7XG5cdFx0dmFyIHJhZGl1czpudW1iZXIgICAgICAgID0gMTAwMDtcblx0XHR2YXIgbWF0QjpUcmlhbmdsZU1ldGhvZE1hdGVyaWFsID0gbmV3IFRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwoKTtcblxuXHRcdHRoaXMudG9ydXMubWF0ZXJpYWwgPSBtYXRCO1xuXG5cdFx0Zm9yICh2YXIgYzpudW1iZXIgPSAwOyBjIDwgbDsgYysrKSB7XG5cblx0XHRcdHZhciB0Om51bWJlcj1NYXRoLlBJICogMiAqIGMgLyBsO1xuXG5cdFx0XHR2YXIgbWVzaDpNZXNoID0gPE1lc2g+IHRoaXMudG9ydXMuZ2V0TmV3T2JqZWN0KCk7XG5cdFx0XHRtZXNoLnggPSBNYXRoLmNvcyh0KSpyYWRpdXM7XG5cdFx0XHRtZXNoLnkgPSAwO1xuXHRcdFx0bWVzaC56ID0gTWF0aC5zaW4odCkqcmFkaXVzO1xuXG5cdFx0XHR0aGlzLnZpZXcuc2NlbmUuYWRkQ2hpbGQobWVzaCk7XG5cdFx0XHR0aGlzLm1lc2hlcy5wdXNoKG1lc2gpO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy52aWV3LnNjZW5lLmFkZENoaWxkKHRoaXMubGlnaHQpO1xuXG5cdFx0dGhpcy5yYWYgPSBuZXcgUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMudGljayAsIHRoaXMpO1xuXHRcdHRoaXMucmFmLnN0YXJ0KCk7XG5cdFx0dGhpcy5yZXNpemUoIG51bGwgKTtcblxuXHRcdHdpbmRvdy5vbnJlc2l6ZSA9IChlKSA9PiB0aGlzLnJlc2l6ZShudWxsKTtcblxuXHR9XG5cblx0cHJpdmF0ZSB0aWNrKGUpXG5cdHtcblxuXHRcdGZvciAodmFyIGM6bnVtYmVyID0gMDsgYyA8IHRoaXMubWVzaGVzLmxlbmd0aDsgYysrKVxuXHRcdFx0dGhpcy5tZXNoZXNbY10ucm90YXRpb25ZICs9IDI7XG5cblx0XHR0aGlzLnZpZXcuY2FtZXJhLnJvdGF0aW9uWSArPSAuNTtcblx0XHR0aGlzLnZpZXcucmVuZGVyKCk7XG5cdH1cblxuXHRwdWJsaWMgcmVzaXplKGUpXG5cdHtcblx0XHR0aGlzLnZpZXcueSA9IDA7XG5cdFx0dGhpcy52aWV3LnggPSAwO1xuXG5cdFx0dGhpcy52aWV3LndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG5cdFx0dGhpcy52aWV3LmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0fVxufSJdfQ== \ No newline at end of file diff --git a/tests/containers/View3DTest.ts b/tests/containers/View3DTest.ts new file mode 100644 index 00000000..87b3b15a --- /dev/null +++ b/tests/containers/View3DTest.ts @@ -0,0 +1,82 @@ +import View = require("awayjs-core/lib/containers/View"); +import Mesh = require("awayjs-core/lib/entities/Mesh"); +import PointLight = require("awayjs-core/lib/entities/PointLight"); +import PrimitiveTorusPrefab = require("awayjs-core/lib/prefabs/PrimitiveTorusPrefab"); +import RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +import Debug = require("awayjs-core/lib/utils/Debug"); + +import DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +import TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); + +class View3DTest +{ + + private view:View; + private torus:PrimitiveTorusPrefab; + + private light:PointLight; + private raf:RequestAnimationFrame; + private meshes:Array; + + constructor() + { + + Debug.THROW_ERRORS = false; + Debug.LOG_PI_ERRORS = false; + + this.meshes = new Array(); + this.light = new PointLight(); + this.view = new View(new DefaultRenderer()) + this.view.camera.z = 0; + this.view.backgroundColor = 0x776655; + this.torus = new PrimitiveTorusPrefab(150 , 50 , 32 , 32 , false); + + var l:number = 10; + var radius:number = 1000; + var matB:TriangleMethodMaterial = new TriangleMethodMaterial(); + + this.torus.material = matB; + + for (var c:number = 0; c < l; c++) { + + var t:number=Math.PI * 2 * c / l; + + var mesh:Mesh = this.torus.getNewObject(); + mesh.x = Math.cos(t)*radius; + mesh.y = 0; + mesh.z = Math.sin(t)*radius; + + this.view.scene.addChild(mesh); + this.meshes.push(mesh); + + } + + this.view.scene.addChild(this.light); + + this.raf = new RequestAnimationFrame(this.tick , this); + this.raf.start(); + this.resize( null ); + + window.onresize = (e) => this.resize(null); + + } + + private tick(e) + { + + for (var c:number = 0; c < this.meshes.length; c++) + this.meshes[c].rotationY += 2; + + this.view.camera.rotationY += .5; + this.view.render(); + } + + public resize(e) + { + this.view.y = 0; + this.view.x = 0; + + this.view.width = window.innerWidth; + this.view.height = window.innerHeight; + } +} \ No newline at end of file diff --git a/tests/controllers/HoverControllerTest.js b/tests/controllers/HoverControllerTest.js new file mode 100755 index 00000000..11fc419a --- /dev/null +++ b/tests/controllers/HoverControllerTest.js @@ -0,0 +1,53 @@ +var View = require("awayjs-core/lib/containers/View"); +var HoverController = require("awayjs-core/lib/controllers/HoverController"); +var PrimitiveCubePrefab = require("awayjs-core/lib/prefabs/PrimitiveCubePrefab"); +var RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +var DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +var HoverControllerTest = (function () { + function HoverControllerTest() { + var _this = this; + this._move = false; + this._view = new View(new DefaultRenderer()); + this._cube = new PrimitiveCubePrefab(400, 400, 400); + this._cube.geometryType = "lineSubGeometry"; + this._mesh = this._cube.getNewObject(); + this._view.scene.addChild(this._mesh); + this._hoverControl = new HoverController(this._view.camera, this._mesh, 150, 10); + window.onresize = function (event) { return _this.onResize(event); }; + document.onmousedown = function (event) { return _this.onMouseDown(event); }; + document.onmouseup = function (event) { return _this.onMouseUp(event); }; + document.onmousemove = function (event) { return _this.onMouseMove(event); }; + this.onResize(); + this._timer = new RequestAnimationFrame(this.render, this); + this._timer.start(); + } + HoverControllerTest.prototype.onResize = function (event) { + if (event === void 0) { event = null; } + this._view.y = 0; + this._view.x = 0; + this._view.width = window.innerWidth; + this._view.height = window.innerHeight; + }; + HoverControllerTest.prototype.render = function (dt) { + this._view.render(); + }; + HoverControllerTest.prototype.onMouseUp = function (event) { + this._move = false; + }; + HoverControllerTest.prototype.onMouseMove = function (event) { + if (this._move) { + this._hoverControl.panAngle = 0.3 * (event.clientX - this._lastMouseX) + this._lastPanAngle; + this._hoverControl.tiltAngle = 0.3 * (event.clientY - this._lastMouseY) + this._lastTiltAngle; + } + }; + HoverControllerTest.prototype.onMouseDown = function (event) { + this._lastPanAngle = this._hoverControl.panAngle; + this._lastTiltAngle = this._hoverControl.tiltAngle; + this._lastMouseX = event.clientX; + this._lastMouseY = event.clientY; + this._move = true; + }; + return HoverControllerTest; +})(); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnRyb2xsZXJzL2hvdmVyY29udHJvbGxlcnRlc3QudHMiXSwibmFtZXMiOlsiSG92ZXJDb250cm9sbGVyVGVzdCIsIkhvdmVyQ29udHJvbGxlclRlc3QuY29uc3RydWN0b3IiLCJIb3ZlckNvbnRyb2xsZXJUZXN0Lm9uUmVzaXplIiwiSG92ZXJDb250cm9sbGVyVGVzdC5yZW5kZXIiLCJIb3ZlckNvbnRyb2xsZXJUZXN0Lm9uTW91c2VVcCIsIkhvdmVyQ29udHJvbGxlclRlc3Qub25Nb3VzZU1vdmUiLCJIb3ZlckNvbnRyb2xsZXJUZXN0Lm9uTW91c2VEb3duIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFPLElBQUksV0FBaUIsaUNBQWlDLENBQUMsQ0FBQztBQUMvRCxJQUFPLGVBQWUsV0FBYyw2Q0FBNkMsQ0FBQyxDQUFDO0FBR25GLElBQU8sbUJBQW1CLFdBQWEsNkNBQTZDLENBQUMsQ0FBQztBQUN0RixJQUFPLHFCQUFxQixXQUFZLDZDQUE2QyxDQUFDLENBQUM7QUFFdkYsSUFBTyxlQUFlLFdBQWMsZ0RBQWdELENBQUMsQ0FBQztBQUV0RixJQUFNLG1CQUFtQjtJQWV4QkEsU0FmS0EsbUJBQW1CQTtRQUF6QkMsaUJBeUVDQTtRQWxFUUEsVUFBS0EsR0FBV0EsS0FBS0EsQ0FBQ0E7UUFVN0JBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLElBQUlBLElBQUlBLENBQUNBLElBQUlBLGVBQWVBLEVBQUVBLENBQUNBLENBQUNBO1FBRTdDQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxtQkFBbUJBLENBQUNBLEdBQUdBLEVBQUVBLEdBQUdBLEVBQUVBLEdBQUdBLENBQUNBLENBQUNBO1FBQ3BEQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxZQUFZQSxHQUFHQSxpQkFBaUJBLENBQUNBO1FBQzVDQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFVQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxZQUFZQSxFQUFFQSxDQUFDQTtRQUM5Q0EsSUFBSUEsQ0FBQ0Es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QWFBLEdBQUdBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBLFFBQVFBLENBQUNBO1FBQ2pEQSxJQUFJQSxDQUFDQSxjQUFjQSxHQUFHQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQSxTQUFTQSxDQUFDQTtRQUNuREEsSUFBSUEsQ0FBQ0EsV0FBV0EsR0FBR0EsS0FBS0EsQ0FBQ0EsT0FBT0EsQ0FBQ0E7UUFDakNBLElBQUlBLENBQUNBLFdBQVdBLEdBQUdBLEtBQUtBLENBQUNBLE9BQU9BLENBQUNBO1FBQ2pDQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxDQUFDQTtJQUNuQkEsQ0FBQ0E7SUFDRk4sMEJBQUNBO0FBQURBLENBekVBLEFBeUVDQSxJQUFBIiwiZmlsZSI6ImNvbnRyb2xsZXJzL0hvdmVyQ29udHJvbGxlclRlc3QuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL3JvYmJhdGVtYW4vV2Vic3Rvcm1Qcm9qZWN0cy9hd2F5anMtc3RhZ2VnbC8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlld1x0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvbnRhaW5lcnMvVmlld1wiKTtcbmltcG9ydCBIb3ZlckNvbnRyb2xsZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb250cm9sbGVycy9Ib3ZlckNvbnRyb2xsZXJcIik7XG5pbXBvcnQgTWVzaFx0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2VudGl0aWVzL01lc2hcIik7XG5pbXBvcnQgTG9hZGVyRXZlbnRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2V2ZW50cy9Mb2FkZXJFdmVudFwiKTtcbmltcG9ydCBQcmltaXRpdmVDdWJlUHJlZmFiXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3ByZWZhYnMvUHJpbWl0aXZlQ3ViZVByZWZhYlwiKTtcbmltcG9ydCBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL1JlcXVlc3RBbmltYXRpb25GcmFtZVwiKTtcblxuaW1wb3J0IERlZmF1bHRSZW5kZXJlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcmVuZGVyL0RlZmF1bHRSZW5kZXJlclwiKTtcblxuY2xhc3MgSG92ZXJDb250cm9sbGVyVGVzdFxue1xuXG5cdHByaXZhdGUgX3ZpZXc6Vmlldztcblx0cHJpdmF0ZSBfdGltZXI6UmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuXHRwcml2YXRlIF9ob3ZlckNvbnRyb2w6SG92ZXJDb250cm9sbGVyO1xuXG5cdHByaXZhdGUgX21vdmU6Ym9vbGVhbiA9IGZhbHNlO1xuXHRwcml2YXRlIF9sYXN0UGFuQW5nbGU6bnVtYmVyO1xuXHRwcml2YXRlIF9sYXN0VGlsdEFuZ2xlOm51bWJlcjtcblx0cHJpdmF0ZSBfbGFzdE1vdXNlWDpudW1iZXI7XG5cdHByaXZhdGUgX2xhc3RNb3VzZVk6bnVtYmVyO1xuXHRwcml2YXRlIF9jdWJlOlByaW1pdGl2ZUN1YmVQcmVmYWI7XG5cdHByaXZhdGUgX21lc2g6TWVzaDtcblxuXHRjb25zdHJ1Y3RvcigpXG5cdHtcblx0XHR0aGlzLl92aWV3ID0gbmV3IFZpZXcobmV3IERlZmF1bHRSZW5kZXJlcigpKTtcblxuXHRcdHRoaXMuX2N1YmUgPSBuZXcgUHJpbWl0aXZlQ3ViZVByZWZhYig0MDAsIDQwMCwgNDAwKTtcblx0XHR0aGlzLl9jdWJlLmdlb21ldHJ5VHlwZSA9IFwibGluZVN1Ykdlb21ldHJ5XCI7XG5cdFx0dGhpcy5fbWVzaCA9IDxNZXNoPiB0aGlzLl9jdWJlLmdldE5ld09iamVjdCgpO1xuXHRcdHRoaXMuX3ZpZXcuc2NlbmUuYWRkQ2hpbGQodGhpcy5fbWVzaCk7XG5cblx0XHR0aGlzLl9ob3ZlckNvbnRyb2wgPSBuZXcgSG92ZXJDb250cm9sbGVyKHRoaXMuX3ZpZXcuY2FtZXJhLCB0aGlzLl9tZXNoLCAxNTAsIDEwKTtcblxuXHRcdHdpbmRvdy5vbnJlc2l6ZSAgPSAoZXZlbnQ6VUlFdmVudCkgPT4gdGhpcy5vblJlc2l6ZShldmVudCk7XG5cblx0XHRkb2N1bWVudC5vbm1vdXNlZG93biA9IChldmVudDpNb3VzZUV2ZW50KSA9PiB0aGlzLm9uTW91c2VEb3duKGV2ZW50KTtcblx0XHRkb2N1bWVudC5vbm1vdXNldXAgPSAoZXZlbnQ6TW91c2VFdmVudCkgPT4gdGhpcy5vbk1vdXNlVXAoZXZlbnQpO1xuXHRcdGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gKGV2ZW50Ok1vdXNlRXZlbnQpID0+IHRoaXMub25Nb3VzZU1vdmUoZXZlbnQpO1xuXG5cblx0XHR0aGlzLm9uUmVzaXplKCk7XG5cblx0XHR0aGlzLl90aW1lciA9IG5ldyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZW5kZXIgLCB0aGlzKTtcblx0XHR0aGlzLl90aW1lci5zdGFydCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBvblJlc2l6ZShldmVudDpVSUV2ZW50ID0gbnVsbClcblx0e1xuXHRcdHRoaXMuX3ZpZXcueSA9IDA7XG5cdFx0dGhpcy5fdmlldy54ID0gMDtcblx0XHR0aGlzLl92aWV3LndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG5cdFx0dGhpcy5fdmlldy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdH1cblxuXHRwcml2YXRlIHJlbmRlcihkdDpudW1iZXIpXG5cdHtcblx0XHR0aGlzLl92aWV3LnJlbmRlcigpO1xuXHR9XG5cblx0cHJpdmF0ZSBvbk1vdXNlVXAoZXZlbnQ6TW91c2VFdmVudClcblx0e1xuXHRcdHRoaXMuX21vdmUgPSBmYWxzZTtcblx0fVxuXG5cdHByaXZhdGUgb25Nb3VzZU1vdmUoZXZlbnQ6TW91c2VFdmVudClcblx0e1xuXHRcdGlmICh0aGlzLl9tb3ZlKSB7XG5cdFx0XHR0aGlzLl9ob3ZlckNvbnRyb2wucGFuQW5nbGUgPSAwLjMqKGV2ZW50LmNsaWVudFggLSB0aGlzLl9sYXN0TW91c2VYKSArIHRoaXMuX2xhc3RQYW5BbmdsZTtcblx0XHRcdHRoaXMuX2hvdmVyQ29udHJvbC50aWx0QW5nbGUgPSAwLjMqKGV2ZW50LmNsaWVudFkgLSB0aGlzLl9sYXN0TW91c2VZKSArIHRoaXMuX2xhc3RUaWx0QW5nbGU7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBvbk1vdXNlRG93bihldmVudDpNb3VzZUV2ZW50KVxuXHR7XG5cdFx0dGhpcy5fbGFzdFBhbkFuZ2xlID0gdGhpcy5faG92ZXJDb250cm9sLnBhbkFuZ2xlO1xuXHRcdHRoaXMuX2xhc3RUaWx0QW5nbGUgPSB0aGlzLl9ob3ZlckNvbnRyb2wudGlsdEFuZ2xlO1xuXHRcdHRoaXMuX2xhc3RNb3VzZVggPSBldmVudC5jbGllbnRYO1xuXHRcdHRoaXMuX2xhc3RNb3VzZVkgPSBldmVudC5jbGllbnRZO1xuXHRcdHRoaXMuX21vdmUgPSB0cnVlO1xuXHR9XG59Il19 \ No newline at end of file diff --git a/tests/controllers/HoverControllerTest.ts b/tests/controllers/HoverControllerTest.ts new file mode 100644 index 00000000..502412c5 --- /dev/null +++ b/tests/controllers/HoverControllerTest.ts @@ -0,0 +1,83 @@ +import View = require("awayjs-core/lib/containers/View"); +import HoverController = require("awayjs-core/lib/controllers/HoverController"); +import Mesh = require("awayjs-core/lib/entities/Mesh"); +import LoaderEvent = require("awayjs-core/lib/events/LoaderEvent"); +import PrimitiveCubePrefab = require("awayjs-core/lib/prefabs/PrimitiveCubePrefab"); +import RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); + +import DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); + +class HoverControllerTest +{ + + private _view:View; + private _timer:RequestAnimationFrame; + private _hoverControl:HoverController; + + private _move:boolean = false; + private _lastPanAngle:number; + private _lastTiltAngle:number; + private _lastMouseX:number; + private _lastMouseY:number; + private _cube:PrimitiveCubePrefab; + private _mesh:Mesh; + + constructor() + { + this._view = new View(new DefaultRenderer()); + + this._cube = new PrimitiveCubePrefab(400, 400, 400); + this._cube.geometryType = "lineSubGeometry"; + this._mesh = this._cube.getNewObject(); + this._view.scene.addChild(this._mesh); + + this._hoverControl = new HoverController(this._view.camera, this._mesh, 150, 10); + + window.onresize = (event:UIEvent) => this.onResize(event); + + document.onmousedown = (event:MouseEvent) => this.onMouseDown(event); + document.onmouseup = (event:MouseEvent) => this.onMouseUp(event); + document.onmousemove = (event:MouseEvent) => this.onMouseMove(event); + + + this.onResize(); + + this._timer = new RequestAnimationFrame(this.render , this); + this._timer.start(); + } + + private onResize(event:UIEvent = null) + { + this._view.y = 0; + this._view.x = 0; + this._view.width = window.innerWidth; + this._view.height = window.innerHeight; + } + + private render(dt:number) + { + this._view.render(); + } + + private onMouseUp(event:MouseEvent) + { + this._move = false; + } + + private onMouseMove(event:MouseEvent) + { + if (this._move) { + this._hoverControl.panAngle = 0.3*(event.clientX - this._lastMouseX) + this._lastPanAngle; + this._hoverControl.tiltAngle = 0.3*(event.clientY - this._lastMouseY) + this._lastTiltAngle; + } + } + + private onMouseDown(event:MouseEvent) + { + this._lastPanAngle = this._hoverControl.panAngle; + this._lastTiltAngle = this._hoverControl.tiltAngle; + this._lastMouseX = event.clientX; + this._lastMouseY = event.clientY; + this._move = true; + } +} \ No newline at end of file diff --git a/tests/display/BitmapDataReflectionTest.js b/tests/display/BitmapDataReflectionTest.js new file mode 100755 index 00000000..87991553 --- /dev/null +++ b/tests/display/BitmapDataReflectionTest.js @@ -0,0 +1,78 @@ +var View = require("awayjs-core/lib/containers/View"); +var BitmapData = require("awayjs-core/lib/core/base/BitmapData"); +var AssetLibrary = require("awayjs-core/lib/core/library/AssetLibrary"); +var AssetType = require("awayjs-core/lib/core/library/AssetType"); +var URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +var LoaderEvent = require("awayjs-core/lib/events/LoaderEvent"); +var PrimitivePlanePrefab = require("awayjs-core/lib/prefabs/PrimitivePlanePrefab"); +var BitmapTexture = require("awayjs-core/lib/textures/BitmapTexture"); +var RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +var DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +var TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); +var BitmapDataReflectionTest = (function () { + function BitmapDataReflectionTest() { + var _this = this; + this.view = new View(new DefaultRenderer()); + this.raf = new RequestAnimationFrame(this.render, this); + var token = AssetLibrary.load(new URLRequest('assets/dots.png')); + token.addEventListener(LoaderEvent.RESOURCE_COMPLETE, function (event) { return _this.onResourceComplete(event); }); + window.onresize = function (event) { return _this.onResize(event); }; + } + BitmapDataReflectionTest.prototype.onResourceComplete = function (event) { + var loader = event.target; + var l = loader.baseDependency.assets.length; + for (var c = 0; c < l; c++) { + var asset = loader.baseDependency.assets[c]; + switch (asset.assetType) { + case AssetType.TEXTURE: + var prefab = new PrimitivePlanePrefab(500, 500, 1, 1, false); + var tx = asset; + var bitmap = new BitmapData(1024, 1024, true, 0x00000000); + bitmap.context.translate(0, 1024); + bitmap.context.scale(1, -1); + bitmap.context.drawImage(tx.htmlImageElement, 0, 0, 1024, 1024); + var gradient = bitmap.context.createLinearGradient(0, 0, 0, 1024); + gradient.addColorStop(0.8, "rgba(255, 255, 255, 1.0)"); + gradient.addColorStop(1, "rgba(255, 255, 255, 0.5)"); + bitmap.context.fillStyle = gradient; + bitmap.context.rect(0, 0, 1024, 1024); + bitmap.context.globalCompositeOperation = "destination-out"; + bitmap.context.fill(); + var bitmapClone = new BitmapData(1024, 1024, true, 0x00000000); + bitmapClone.copyPixels(bitmap, bitmapClone.rect, bitmapClone.rect); + document.body.appendChild(bitmap.canvas); + var bmpTX = new BitmapTexture(bitmapClone, false); + var material = new TriangleMethodMaterial(bmpTX); + material.bothSides = true; + material.alphaBlending = true; + var material2 = new TriangleMethodMaterial(tx); + material2.bothSides = true; + material2.alphaBlending = true; + this.reflectionMesh = prefab.getNewObject(); + this.reflectionMesh.material = material; + this.view.scene.addChild(this.reflectionMesh); + this.fullmesh = prefab.getNewObject(); + this.fullmesh.material = material2; + this.fullmesh.rotationY = 90; + this.view.scene.addChild(this.fullmesh); + break; + } + } + this.raf.start(); + this.onResize(); + }; + BitmapDataReflectionTest.prototype.onResize = function (event) { + if (event === void 0) { event = null; } + this.view.x = window.innerWidth / 2; + this.view.width = window.innerWidth / 2; + this.view.height = window.innerHeight; + }; + BitmapDataReflectionTest.prototype.render = function () { + this.fullmesh.rotationY += .5; + this.reflectionMesh.rotationY += .5; + this.view.render(); + }; + return BitmapDataReflectionTest; +})(); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRpc3BsYXkvYml0bWFwZGF0YXJlZmxlY3Rpb250ZXN0LnRzIl0sIm5hbWVzIjpbIkJpdG1hcERhdGFSZWZsZWN0aW9uVGVzdCIsIkJpdG1hcERhdGFSZWZsZWN0aW9uVGVzdC5jb25zdHJ1Y3RvciIsIkJpdG1hcERhdGFSZWZsZWN0aW9uVGVzdC5vblJlc291cmNlQ29tcGxldGUiLCJCaXRtYXBEYXRhUmVmbGVjdGlvblRlc3Qub25SZXNpemUiLCJCaXRtYXBEYXRhUmVmbGVjdGlvblRlc3QucmVuZGVyIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFPLElBQUksV0FBaUIsaUNBQWlDLENBQUMsQ0FBQztBQUMvRCxJQUFPLFVBQVUsV0FBZSxzQ0FBc0MsQ0FBQyxDQUFDO0FBQ3hFLElBQU8sWUFBWSxXQUFlLDJDQUEyQyxDQUFDLENBQUM7QUFHL0UsSUFBTyxTQUFTLFdBQWUsd0NBQXdDLENBQUMsQ0FBQztBQUV6RSxJQUFPLFVBQVUsV0FBZSxxQ0FBcUMsQ0FBQyxDQUFDO0FBRXZFLElBQU8sV0FBVyxXQUFlLG9DQUFvQyxDQUFDLENBQUM7QUFDdkUsSUFBTyxvQkFBb0IsV0FBYSw4Q0FBOEMsQ0FBQyxDQUFDO0FBQ3hGLElBQU8sYUFBYSxXQUFjLHdDQUF3QyxDQUFDLENBQUM7QUFFNUUsSUFBTyxxQkFBcUIsV0FBWSw2Q0FBNkMsQ0FBQyxDQUFDO0FBRXZGLElBQU8sZUFBZSxXQUFjLGdEQUFnRCxDQUFDLENBQUM7QUFDdEYsSUFBTyxzQkFBc0IsV0FBWSxxREFBcUQsQ0FBQyxDQUFDO0FBRWhHLElBQU0sd0JBQXdCO0lBTzdCQSxTQVBLQSx3QkFBd0JBO1FBQTlCQyxpQkE2RkNBO1FBcEZDQSxJQUFJQSxDQUFDQSxJQUFJQSxHQUFHQSxJQUFJQSxJQUFJQSxDQUFDQSxJQUFJQSxlQUFlQSxFQUFFQSxDQUFDQSxDQUFDQTtRQUM1Q0EsSUFBSUEsQ0FBQ0EsR0FBR0EsR0FBR0EsSUFBSUEscUJBQXFCQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxFQUFFQSxJ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QSxDQUFDQTtJQUNGSiwrQkFBQ0E7QUFBREEsQ0E3RkEsQUE2RkNBLElBQUEiLCJmaWxlIjoiZGlzcGxheS9CaXRtYXBEYXRhUmVmbGVjdGlvblRlc3QuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL3JvYmJhdGVtYW4vV2Vic3Rvcm1Qcm9qZWN0cy9hd2F5anMtc3RhZ2VnbC8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlld1x0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvbnRhaW5lcnMvVmlld1wiKTtcbmltcG9ydCBCaXRtYXBEYXRhXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb3JlL2Jhc2UvQml0bWFwRGF0YVwiKTtcbmltcG9ydCBBc3NldExpYnJhcnlcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvcmUvbGlicmFyeS9Bc3NldExpYnJhcnlcIik7XG5pbXBvcnQgQXNzZXRMb2FkZXJcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvcmUvbGlicmFyeS9Bc3NldExvYWRlclwiKTtcbmltcG9ydCBBc3NldExvYWRlclRva2VuXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29yZS9saWJyYXJ5L0Fzc2V0TG9hZGVyVG9rZW5cIik7XG5pbXBvcnQgQXNzZXRUeXBlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb3JlL2xpYnJhcnkvQXNzZXRUeXBlXCIpO1xuaW1wb3J0IElBc3NldFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb3JlL2xpYnJhcnkvSUFzc2V0XCIpO1xuaW1wb3J0IFVSTFJlcXVlc3RcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvcmUvbmV0L1VSTFJlcXVlc3RcIik7XG5pbXBvcnQgTWVzaFx0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2VudGl0aWVzL01lc2hcIik7XG5pbXBvcnQgTG9hZGVyRXZlbnRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2V2ZW50cy9Mb2FkZXJFdmVudFwiKTtcbmltcG9ydCBQcmltaXRpdmVQbGFuZVByZWZhYlx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9wcmVmYWJzL1ByaW1pdGl2ZVBsYW5lUHJlZmFiXCIpO1xuaW1wb3J0IEJpdG1hcFRleHR1cmVcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9CaXRtYXBUZXh0dXJlXCIpO1xuaW1wb3J0IEltYWdlVGV4dHVyZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvSW1hZ2VUZXh0dXJlXCIpO1xuaW1wb3J0IFJlcXVlc3RBbmltYXRpb25GcmFtZVx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvUmVxdWVzdEFuaW1hdGlvbkZyYW1lXCIpO1xuXG5pbXBvcnQgRGVmYXVsdFJlbmRlcmVyXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9yZW5kZXIvRGVmYXVsdFJlbmRlcmVyXCIpO1xuaW1wb3J0IFRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWxcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9UcmlhbmdsZU1ldGhvZE1hdGVyaWFsXCIpO1xuXG5jbGFzcyBCaXRtYXBEYXRhUmVmbGVjdGlvblRlc3Rcbntcblx0cHJpdmF0ZSB2aWV3OlZpZXc7XG5cdHByaXZhdGUgcmFmOlJlcXVlc3RBbmltYXRpb25GcmFtZTtcblx0cHJpdmF0ZSByZWZsZWN0aW9uTWVzaDpNZXNoO1xuXHRwcml2YXRlIGZ1bGxtZXNoOk1lc2g7XG5cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdFx0dGhpcy52aWV3ID0gbmV3IFZpZXcobmV3IERlZmF1bHRSZW5kZXJlcigpKTtcblx0XHR0aGlzLnJhZiA9IG5ldyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZW5kZXIsIHRoaXMpO1xuXG5cdFx0dmFyIHRva2VuOkFzc2V0TG9hZGVyVG9rZW4gPSBBc3NldExpYnJhcnkubG9hZCggbmV3IFVSTFJlcXVlc3QoJ2Fzc2V0cy9kb3RzLnBuZycpKTtcblx0XHR0b2tlbi5hZGRFdmVudExpc3RlbmVyKExvYWRlckV2ZW50LlJFU09VUkNFX0NPTVBMRVRFLCAoZXZlbnQ6TG9hZGVyRXZlbnQpID0+IHRoaXMub25SZXNvdXJjZUNvbXBsZXRlKGV2ZW50KSk7XG5cblx0XHR3aW5kb3cub25yZXNpemUgPSAoZXZlbnQ6VUlFdmVudCkgPT4gdGhpcy5vblJlc2l6ZShldmVudCk7XG5cdH1cblxuXHRwcml2YXRlIG9uUmVzb3VyY2VDb21wbGV0ZShldmVudDpMb2FkZXJFdmVudClcblx0e1xuXHRcdHZhciBsb2FkZXI6QXNzZXRMb2FkZXIgICA9IDxBc3NldExvYWRlcj4gZXZlbnQudGFyZ2V0O1xuXHRcdHZhciBsOm51bWJlciA9IGxvYWRlci5iYXNlRGVwZW5kZW5jeS5hc3NldHMubGVuZ3RoO1xuXG5cdFx0Zm9yICh2YXIgYzpudW1iZXIgPSAwOyBjIDwgbDsgYysrKSB7XG5cblx0XHRcdHZhciBhc3NldDpJQXNzZXQgPSBsb2FkZXIuYmFzZURlcGVuZGVuY3kuYXNzZXRzW2NdO1xuXG5cdFx0XHRzd2l0Y2ggKGFzc2V0LmFzc2V0VHlwZSkge1xuXHRcdFx0XHRjYXNlIEFzc2V0VHlwZS5URVhUVVJFOlxuXG5cdFx0XHRcdFx0dmFyIHByZWZhYjpQcmltaXRpdmVQbGFuZVByZWZhYiA9IG5ldyBQcmltaXRpdmVQbGFuZVByZWZhYig1MDAgLCA1MDAsIDEsIDEsIGZhbHNlKTtcblx0XHRcdFx0XHR2YXIgdHg6SW1hZ2VUZXh0dXJlID0gPEltYWdlVGV4dHVyZT4gYXNzZXQ7XG5cdFx0XHRcdFx0dmFyIGJpdG1hcDpCaXRtYXBEYXRhID0gbmV3IEJpdG1hcERhdGEoMTAyNCwgMTAyNCwgdHJ1ZSwgMHgwMDAwMDAwMCk7XG5cblx0XHRcdFx0XHRiaXRtYXAuY29udGV4dC50cmFuc2xhdGUoMCwgMTAyNCk7XG5cdFx0XHRcdFx0Yml0bWFwLmNvbnRleHQuc2NhbGUoMSwgLTEpO1xuXHRcdFx0XHRcdGJpdG1hcC5jb250ZXh0LmRyYXdJbWFnZSh0eC5odG1sSW1hZ2VFbGVtZW50LCAwLCAwLCAxMDI0LCAxMDI0KTtcblxuXHRcdFx0XHRcdHZhciBncmFkaWVudCA9IGJpdG1hcC5jb250ZXh0LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsIDAsIDAsIDEwMjQpO1xuXHRcdFx0XHRcdGdyYWRpZW50LmFkZENvbG9yU3RvcCgwLjgsIFwicmdiYSgyNTUsIDI1NSwgMjU1LCAxLjApXCIpO1xuXHRcdFx0XHRcdGdyYWRpZW50LmFkZENvbG9yU3RvcCgxLCBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiKTtcblxuXHRcdFx0XHRcdGJpdG1hcC5jb250ZXh0LmZpbGxTdHlsZSA9IGdyYWRpZW50O1xuXHRcdFx0XHRcdGJpdG1hcC5jb250ZXh0LnJlY3QoMCwgMCwgMTAyNCwgMTAyNCk7XG5cdFx0XHRcdFx0Yml0bWFwLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gXCJkZXN0aW5hdGlvbi1vdXRcIjtcblx0XHRcdFx0XHRiaXRtYXAuY29udGV4dC5maWxsKCk7XG5cblx0XHRcdFx0XHR2YXIgYml0bWFwQ2xvbmU6Qml0bWFwRGF0YSA9IG5ldyBCaXRtYXBEYXRhKDEwMjQsIDEwMjQsIHRydWUsIDB4MDAwMDAwMDApO1xuXHRcdFx0XHRcdGJpdG1hcENsb25lLmNvcHlQaXhlbHMoYml0bWFwLCBiaXRtYXBDbG9uZS5yZWN0LCBiaXRtYXBDbG9uZS5yZWN0KTtcblxuXHRcdFx0XHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYml0bWFwLmNhbnZhcyk7XG5cblx0XHRcdFx0XHR2YXIgYm1wVFg6Qml0bWFwVGV4dHVyZSA9IG5ldyBCaXRtYXBUZXh0dXJlKGJpdG1hcENsb25lLCBmYWxzZSk7XG5cblx0XHRcdFx0XHR2YXIgbWF0ZXJpYWw6VHJpYW5nbGVNZXRob2RNYXRlcmlhbCA9IG5ldyBUcmlhbmdsZU1ldGhvZE1hdGVyaWFsKGJtcFRYKTtcblx0XHRcdFx0XHRtYXRlcmlhbC5ib3RoU2lkZXMgPSB0cnVlO1xuXHRcdFx0XHRcdG1hdGVyaWFsLmFscGhhQmxlbmRpbmcgPSB0cnVlO1xuXG5cdFx0XHRcdFx0dmFyIG1hdGVyaWFsMjpUcmlhbmdsZU1ldGhvZE1hdGVyaWFsID0gbmV3IFRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwodHgpO1xuXHRcdFx0XHRcdG1hdGVyaWFsMi5ib3RoU2lkZXMgPSB0cnVlO1xuXHRcdFx0XHRcdG1hdGVyaWFsMi5hbHBoYUJsZW5kaW5nID0gdHJ1ZTtcblxuXHRcdFx0XHRcdHRoaXMucmVmbGVjdGlvbk1lc2ggPSA8TWVzaD4gcHJlZmFiLmdldE5ld09iamVjdCgpO1xuXHRcdFx0XHRcdHRoaXMucmVmbGVjdGlvbk1lc2gubWF0ZXJpYWwgPSBtYXRlcmlhbDtcblx0XHRcdFx0XHR0aGlzLnZpZXcuc2NlbmUuYWRkQ2hpbGQodGhpcy5yZWZsZWN0aW9uTWVzaCk7XG5cblx0XHRcdFx0XHR0aGlzLmZ1bGxtZXNoID0gPE1lc2g+IHByZWZhYi5nZXROZXdPYmplY3QoKTtcblx0XHRcdFx0XHR0aGlzLmZ1bGxtZXNoLm1hdGVyaWFsID0gbWF0ZXJpYWwyO1xuXHRcdFx0XHRcdHRoaXMuZnVsbG1lc2gucm90YXRpb25ZID0gOTA7XG5cdFx0XHRcdFx0dGhpcy52aWV3LnNjZW5lLmFkZENoaWxkKHRoaXMuZnVsbG1lc2gpO1xuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5yYWYuc3RhcnQoKTtcblx0XHR0aGlzLm9uUmVzaXplKCk7XG5cdH1cblxuXHRwcml2YXRlIG9uUmVzaXplKGV2ZW50OlVJRXZlbnQgPSBudWxsKVxuXHR7XG5cdFx0dGhpcy52aWV3LnggPSB3aW5kb3cuaW5uZXJXaWR0aC8yO1xuXHRcdHRoaXMudmlldy53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoLzI7XG5cdFx0dGhpcy52aWV3LmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0fVxuXG5cdHByaXZhdGUgcmVuZGVyKClcblx0e1xuXHRcdHRoaXMuZnVsbG1lc2gucm90YXRpb25ZICs9LjU7XG5cdFx0dGhpcy5yZWZsZWN0aW9uTWVzaC5yb3RhdGlvblkgKz0uNTtcblxuXHRcdHRoaXMudmlldy5yZW5kZXIoKTtcblx0fVxufSJdfQ== \ No newline at end of file diff --git a/tests/display/BitmapDataReflectionTest.ts b/tests/display/BitmapDataReflectionTest.ts new file mode 100644 index 00000000..7301fa5b --- /dev/null +++ b/tests/display/BitmapDataReflectionTest.ts @@ -0,0 +1,112 @@ +import View = require("awayjs-core/lib/containers/View"); +import BitmapData = require("awayjs-core/lib/core/base/BitmapData"); +import AssetLibrary = require("awayjs-core/lib/core/library/AssetLibrary"); +import AssetLoader = require("awayjs-core/lib/core/library/AssetLoader"); +import AssetLoaderToken = require("awayjs-core/lib/core/library/AssetLoaderToken"); +import AssetType = require("awayjs-core/lib/core/library/AssetType"); +import IAsset = require("awayjs-core/lib/core/library/IAsset"); +import URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +import Mesh = require("awayjs-core/lib/entities/Mesh"); +import LoaderEvent = require("awayjs-core/lib/events/LoaderEvent"); +import PrimitivePlanePrefab = require("awayjs-core/lib/prefabs/PrimitivePlanePrefab"); +import BitmapTexture = require("awayjs-core/lib/textures/BitmapTexture"); +import ImageTexture = require("awayjs-core/lib/textures/ImageTexture"); +import RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); + +import DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +import TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); + +class BitmapDataReflectionTest +{ + private view:View; + private raf:RequestAnimationFrame; + private reflectionMesh:Mesh; + private fullmesh:Mesh; + + constructor() + { + this.view = new View(new DefaultRenderer()); + this.raf = new RequestAnimationFrame(this.render, this); + + var token:AssetLoaderToken = AssetLibrary.load( new URLRequest('assets/dots.png')); + token.addEventListener(LoaderEvent.RESOURCE_COMPLETE, (event:LoaderEvent) => this.onResourceComplete(event)); + + window.onresize = (event:UIEvent) => this.onResize(event); + } + + private onResourceComplete(event:LoaderEvent) + { + var loader:AssetLoader = event.target; + var l:number = loader.baseDependency.assets.length; + + for (var c:number = 0; c < l; c++) { + + var asset:IAsset = loader.baseDependency.assets[c]; + + switch (asset.assetType) { + case AssetType.TEXTURE: + + var prefab:PrimitivePlanePrefab = new PrimitivePlanePrefab(500 , 500, 1, 1, false); + var tx:ImageTexture = asset; + var bitmap:BitmapData = new BitmapData(1024, 1024, true, 0x00000000); + + bitmap.context.translate(0, 1024); + bitmap.context.scale(1, -1); + bitmap.context.drawImage(tx.htmlImageElement, 0, 0, 1024, 1024); + + var gradient = bitmap.context.createLinearGradient(0, 0, 0, 1024); + gradient.addColorStop(0.8, "rgba(255, 255, 255, 1.0)"); + gradient.addColorStop(1, "rgba(255, 255, 255, 0.5)"); + + bitmap.context.fillStyle = gradient; + bitmap.context.rect(0, 0, 1024, 1024); + bitmap.context.globalCompositeOperation = "destination-out"; + bitmap.context.fill(); + + var bitmapClone:BitmapData = new BitmapData(1024, 1024, true, 0x00000000); + bitmapClone.copyPixels(bitmap, bitmapClone.rect, bitmapClone.rect); + + document.body.appendChild(bitmap.canvas); + + var bmpTX:BitmapTexture = new BitmapTexture(bitmapClone, false); + + var material:TriangleMethodMaterial = new TriangleMethodMaterial(bmpTX); + material.bothSides = true; + material.alphaBlending = true; + + var material2:TriangleMethodMaterial = new TriangleMethodMaterial(tx); + material2.bothSides = true; + material2.alphaBlending = true; + + this.reflectionMesh = prefab.getNewObject(); + this.reflectionMesh.material = material; + this.view.scene.addChild(this.reflectionMesh); + + this.fullmesh = prefab.getNewObject(); + this.fullmesh.material = material2; + this.fullmesh.rotationY = 90; + this.view.scene.addChild(this.fullmesh); + + break; + } + } + + this.raf.start(); + this.onResize(); + } + + private onResize(event:UIEvent = null) + { + this.view.x = window.innerWidth/2; + this.view.width = window.innerWidth/2; + this.view.height = window.innerHeight; + } + + private render() + { + this.fullmesh.rotationY +=.5; + this.reflectionMesh.rotationY +=.5; + + this.view.render(); + } +} \ No newline at end of file diff --git a/tests/entities/BillboardTest.js b/tests/entities/BillboardTest.js new file mode 100755 index 00000000..b562918d --- /dev/null +++ b/tests/entities/BillboardTest.js @@ -0,0 +1,152 @@ +var View = require("awayjs-core/lib/containers/View"); +var HoverController = require("awayjs-core/lib/controllers/HoverController"); +var AlignmentMode = require("awayjs-core/lib/core/base/AlignmentMode"); +var OrientationMode = require("awayjs-core/lib/core/base/OrientationMode"); +var Vector3D = require("awayjs-core/lib/core/geom/Vector3D"); +var AssetLibrary = require("awayjs-core/lib/core/library/AssetLibrary"); +var URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +var Billboard = require("awayjs-core/lib/entities/Billboard"); +var LoaderEvent = require("awayjs-core/lib/events/LoaderEvent"); +var RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +var DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +var TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); +var BillboardTest = (function () { + /** + * Constructor + */ + function BillboardTest() { + this._time = 0; + this._move = false; + this.init(); + } + /** + * Global initialise function + */ + BillboardTest.prototype.init = function () { + this.initEngine(); + this.initListeners(); + this.loadTexture(); + }; + /** + * Initialise the engine + */ + BillboardTest.prototype.initEngine = function () { + this._view = new View(new DefaultRenderer()); + //setup the camera for optimal shadow rendering + this._view.camera.projection.far = 2100; + //setup controller to be used on the camera + this._cameraController = new HoverController(this._view.camera, null, 45, 20, 1000, 10); + }; + /** + * Initialise the listeners + */ + BillboardTest.prototype.initListeners = function () { + var _this = this; + document.onmousedown = function (event) { return _this.onMouseDown(event); }; + document.onmouseup = function (event) { return _this.onMouseUp(event); }; + document.onmousemove = function (event) { return _this.onMouseMove(event); }; + window.onresize = function (event) { return _this.onResize(event); }; + this.onResize(); + this._timer = new RequestAnimationFrame(this.onEnterFrame, this); + this._timer.start(); + }; + /** + * start loading our texture + */ + BillboardTest.prototype.loadTexture = function () { + var _this = this; + AssetLibrary.addEventListener(LoaderEvent.RESOURCE_COMPLETE, function (event) { return _this.onResourceComplete(event); }); + AssetLibrary.load(new URLRequest("assets/130909wall_big.png")); + }; + /** + * Navigation and render loop + */ + BillboardTest.prototype.onEnterFrame = function (dt) { + this._time += dt; + this._view.render(); + }; + /** + * Listener function for resource complete event on asset library + */ + BillboardTest.prototype.onResourceComplete = function (event) { + var assets = event.assets; + var length = assets.length; + for (var c = 0; c < length; c++) { + var asset = assets[c]; + switch (event.url) { + case "assets/130909wall_big.png": + var material = new TriangleMethodMaterial(); + material.texture = AssetLibrary.getAsset(asset.name); + var s; + s = new Billboard(material); + s.pivot = new Vector3D(150, 150, 0); + s.width = 300; + s.height = 300; + //s.rotationX = 45; + s.orientationMode = OrientationMode.CAMERA_PLANE; + s.alignmentMode = AlignmentMode.PIVOT_POINT; + this._view.scene.addChild(s); + for (var c = 0; c < 100; c++) { + var size = this.getRandom(5, 50); + s = new Billboard(material); + s.pivot = new Vector3D(size / 2, size / 2, 0); + s.width = size; + s.height = size; + s.orientationMode = OrientationMode.CAMERA_PLANE; + s.alignmentMode = AlignmentMode.PIVOT_POINT; + s.x = this.getRandom(-400, 400); + s.y = this.getRandom(-400, 400); + s.z = this.getRandom(-400, 400); + this._view.scene.addChild(s); + } + this._timer.start(); + break; + } + } + }; + /** + * Mouse down listener for navigation + */ + BillboardTest.prototype.onMouseDown = function (event) { + this._lastPanAngle = this._cameraController.panAngle; + this._lastTiltAngle = this._cameraController.tiltAngle; + this._lastMouseX = event.clientX; + this._lastMouseY = event.clientY; + this._move = true; + }; + /** + * Mouse up listener for navigation + */ + BillboardTest.prototype.onMouseUp = function (event) { + this._move = false; + }; + /** + * + * @param event + */ + BillboardTest.prototype.onMouseMove = function (event) { + if (this._move) { + this._cameraController.panAngle = 0.3 * (event.clientX - this._lastMouseX) + this._lastPanAngle; + this._cameraController.tiltAngle = 0.3 * (event.clientY - this._lastMouseY) + this._lastTiltAngle; + } + }; + /** + * stage listener for resize events + */ + BillboardTest.prototype.onResize = function (event) { + if (event === void 0) { event = null; } + this._view.y = 0; + this._view.x = 0; + this._view.width = window.innerWidth; + this._view.height = window.innerHeight; + }; + /** + * Util function - getRandom Number + */ + BillboardTest.prototype.getRandom = function (min, max) { + return Math.random() * (max - min) + min; + }; + return BillboardTest; +})(); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVudGl0aWVzL2JpbGxib2FyZHRlc3QudHMiXSwibmFtZXMiOlsiQmlsbGJvYXJkVGVzdCIsIkJpbGxib2FyZFRlc3QuY29uc3RydWN0b3IiLCJCaWxsYm9hcmRUZXN0LmluaXQiLCJCaWxsYm9hcmRUZXN0LmluaXRFbmdpbmUiLCJCaWxsYm9hcmRUZXN0LmluaXRMaXN0ZW5lcnMiLCJCaWxsYm9hcmRUZXN0LmxvYWRUZXh0dXJlIiwiQmlsbGJvYXJkVGVzdC5vbkVudGVyRnJhbWUiLCJCaWxsYm9hcmRUZXN0Lm9uUmVzb3VyY2VDb21wbGV0ZSIsIkJpbGxib2FyZFRlc3Qub25Nb3VzZURvd24iLCJCaWxsYm9hcmRUZXN0Lm9uTW91c2VVcCIsIkJpbGxib2FyZFRlc3Qub25Nb3VzZU1vdmUiLCJCaWxsYm9hcmRUZXN0Lm9uUmVzaXplIiwiQmlsbGJvYXJkVGVzdC5nZXRSYW5kb20iXSwibWFwcGluZ3MiOiJBQUFBLElBQU8sSUFBSSxXQUFpQixpQ0FBaUMsQ0FBQyxDQUFDO0FBQy9ELElBQU8sZUFBZSxXQUFjLDZDQUE2QyxDQUFDLENBQUM7QUFDbkYsSUFBTyxhQUFhLFdBQWMseUNBQXlDLENBQUMsQ0FBQztBQUM3RSxJQUFPLGVBQWUsV0FBYywyQ0FBMkMsQ0FBQyxDQUFDO0FBQ2pGLElBQU8sUUFBUSxXQUFnQixvQ0FBb0MsQ0FBQyxDQUFDO0FBQ3JFLElBQU8sWUFBWSxXQUFlLDJDQUEyQyxDQUFDLENBQUM7QUFHL0UsSUFBTyxVQUFVLFdBQWUscUNBQXFDLENBQUMsQ0FBQztBQUN2RSxJQUFPLFNBQVMsV0FBZSxvQ0FBb0MsQ0FBQyxDQUFDO0FBRXJFLElBQU8sV0FBVyxXQUFlLG9DQUFvQyxDQUFDLENBQUM7QUFFdkUsSUFBTyxxQkFBcUIsV0FBWSw2Q0FBNkMsQ0FBQyxDQUFDO0FBRXZGLElBQU8sZUFBZSxXQUFjLGdEQUFnRCxDQUFDLENBQUM7QUFDdEYsSUFBTyxzQkFBc0IsV0FBWSxxREFBcUQsQ0FBQyxDQUFDO0FBRWhHLElBQU0sYUFBYTtJ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QSxhQUFhQSxHQUFHQSxhQUFhQSxDQUFDQSxXQUFXQSxDQUFDQTtvQkFFNUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLEtBQUtBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO29CQUU3QkEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBVUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsR0FBR0EsRUFBRUEsQ0FBQ0EsRUFBR0EsRUFBRUEsQ0FBQ0E7d0JBQ3RDQSxJQUFJQSxJQUFJQSxHQUFVQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQSxDQUFDQSxFQUFHQSxFQUFFQSxDQUFDQSxDQUFDQTt3QkFDekNBLENBQUNBLEdBQUdBLElBQUlBLFNBQVNBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBO3dCQUM1QkEsQ0FBQ0EsQ0FBQ0EsS0FBS0EsR0FBR0EsSUFBSUEsUUFBUUEsQ0FBQ0EsSUFBSUEsR0FBQ0EsQ0FBQ0EsRUFBRUEsSUFBSUEsR0FBQ0EsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7d0JBQzFDQSxDQUFDQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxDQUFDQTt3QkFDZkEsQ0FBQ0EsQ0FBQ0EsTUFBTUEsR0FBR0EsSUFBSUEsQ0FBQ0E7d0JBQ2hCQSxDQUFDQSxDQUFDQSxlQUFlQSxHQUFHQSxlQUFlQSxDQUFDQSxZQUFZQSxDQUFDQTt3QkFDakRBLENBQUNBLENBQUNBLGFBQWFBLEdBQUdBLGFBQWFBLENBQUNBLFdBQVdBLENBQUNBO3dCQUMzQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBSUEsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsRUFBR0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7d0JBQ2xDQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFJQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQSxDQUFDQSxHQUFHQSxFQUFHQSxHQUFHQSxDQUFDQSxDQUFDQTt3QkFDbENBLENBQUNBLENBQUNBLENBQUNBLEdBQUlBLElBQUlBLENBQUNBLFNBQVNBLENBQUNBLENBQUNBLEdBQUdBLEVBQUdBLEdBQUdBLENBQUNBLENBQUNBO3dCQUNuQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsUUFBUUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7b0JBQzlCQSxDQUFDQTtvQkFFREEsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsS0FBS0EsRUFBRUEsQ0FBQ0E7b0JBQ3BCQSxLQUFLQSxDQUFDQTtZQUNSQSxDQUFDQTtRQUNGQSxDQUFDQTtJQUNGQSxDQUFDQTtJQUVEUDs7T0FFR0E7SUFDS0EsbUNBQVdBLEdBQW5CQSxVQUFvQkEsS0FBZ0JBO1FBRW5DUSxJQUFJQSxDQUFDQSxhQUFhQSxHQUFHQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLFFBQVFBLENBQUNBO1FBQ3JEQSxJQUFJQSxDQUFDQSxjQUFjQSxHQUFHQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLFNBQVNBLENBQUNBO1FBQ3ZEQSxJQUFJQSxDQUFDQSxXQUFXQSxHQUFHQSxLQUFLQSxDQUFDQSxPQUFPQSxDQUFDQTtRQUNqQ0EsSUFBSUEsQ0FBQ0EsV0FBV0EsR0FBR0EsS0FBS0EsQ0FBQ0EsT0FBT0EsQ0FBQ0E7UUFDakNBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLElBQUlBLENBQUNBO0lBQ25CQSxDQUFDQTtJQUVEUjs7T0FFR0E7SUFDS0EsaUNBQVNBLEdBQWpCQSxVQUFrQkEsS0FBZ0JBO1FBRWpDUyxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxLQUFLQSxDQUFDQTtJQUNwQkEsQ0FBQ0E7SUFFRFQ7OztPQUdHQTtJQUNLQSxtQ0FBV0EsR0FBbkJBLFVBQW9CQSxLQUFnQkE7UUFFbkNVLEVBQUVBLENBQUNBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBLENBQUNBO1lBQ2hCQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLFFBQVFBLEdBQUdBLEdBQUdBLEdBQUNBLENBQUNBLEtBQUtBLENBQUNBLE9BQU9BLEdBQUdBLElBQUlBLENBQUNBLFdBQVdBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBO1lBQzlGQSxJQUFJQSxDQUFDQSxpQkFBaUJBLENBQUNBLFNBQVNBLEdBQUdBLEdBQUdBLEdBQUNBLENBQUNBLEtBQUtBLENBQUNBLE9BQU9BLEdBQUdBLElBQUlBLENBQUNBLFdBQVdBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLGNBQWNBLENBQUNBO1FBQ2pHQSxDQUFDQTtJQUNGQSxDQUFDQTtJQUVEVjs7T0FFR0E7SUFDS0EsZ0NBQVFBLEdBQWhCQSxVQUFpQkEsS0FBb0JBO1FBQXBCVyxxQkFBb0JBLEdBQXBCQSxZQUFvQkE7UUFFcENBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1FBQ2pCQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUNqQkEsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsS0FBS0EsR0FBR0EsTUFBTUEsQ0FBQ0EsVUFBVUEsQ0FBQ0E7UUFDckNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLE1BQU1BLEdBQUdBLE1BQU1BLENBQUNBLFdBQVdBLENBQUNBO0lBQ3hDQSxDQUFDQTtJQUVEWDs7T0FFR0E7SUFDS0EsaUNBQVNBLEdBQWpCQSxVQUFrQkEsR0FBVUEsRUFBRUEsR0FBVUE7UUFFdkNZLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLEVBQUVBLEdBQUNBLENBQUNBLEdBQUdBLEdBQUdBLEdBQUdBLENBQUNBLEdBQUdBLEdBQUdBLENBQUNBO0lBQ3hDQSxDQUFDQTtJQUNGWixvQkFBQ0E7QUFBREEsQ0F0TEEsQUFzTENBLElBQUEiLCJmaWxlIjoiZW50aXRpZXMvQmlsbGJvYXJkVGVzdC5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvcm9iYmF0ZW1hbi9XZWJzdG9ybVByb2plY3RzL2F3YXlqcy1zdGFnZWdsLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBWaWV3XHRcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29udGFpbmVycy9WaWV3XCIpO1xuaW1wb3J0IEhvdmVyQ29udHJvbGxlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvbnRyb2xsZXJzL0hvdmVyQ29udHJvbGxlclwiKTtcbmltcG9ydCBBbGlnbm1lbnRNb2RlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29yZS9iYXNlL0FsaWdubWVudE1vZGVcIik7XG5pbXBvcnQgT3JpZW50YXRpb25Nb2RlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29yZS9iYXNlL09yaWVudGF0aW9uTW9kZVwiKTtcbmltcG9ydCBWZWN0b3IzRFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb3JlL2dlb20vVmVjdG9yM0RcIik7XG5pbXBvcnQgQXNzZXRMaWJyYXJ5XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb3JlL2xpYnJhcnkvQXNzZXRMaWJyYXJ5XCIpO1xuaW1wb3J0IElBc3NldFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb3JlL2xpYnJhcnkvSUFzc2V0XCIpO1xuaW1wb3J0IFVSTExvYWRlclx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29yZS9uZXQvVVJMTG9hZGVyXCIpO1xuaW1wb3J0IFVSTFJlcXVlc3RcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvcmUvbmV0L1VSTFJlcXVlc3RcIik7XG5pbXBvcnQgQmlsbGJvYXJkXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9lbnRpdGllcy9CaWxsYm9hcmRcIik7XG5pbXBvcnQgTWVzaFx0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2VudGl0aWVzL01lc2hcIik7XG5pbXBvcnQgTG9hZGVyRXZlbnRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2V2ZW50cy9Mb2FkZXJFdmVudFwiKTtcbmltcG9ydCBUZXh0dXJlMkRCYXNlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvVGV4dHVyZTJEQmFzZVwiKTtcbmltcG9ydCBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL1JlcXVlc3RBbmltYXRpb25GcmFtZVwiKTtcblxuaW1wb3J0IERlZmF1bHRSZW5kZXJlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcmVuZGVyL0RlZmF1bHRSZW5kZXJlclwiKTtcbmltcG9ydCBUcmlhbmdsZU1ldGhvZE1hdGVyaWFsXHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvVHJpYW5nbGVNZXRob2RNYXRlcmlhbFwiKTtcblxuY2xhc3MgQmlsbGJvYXJkVGVzdFxue1xuXHQvL2VuZ2luZSB2YXJpYWJsZXNcblx0cHJpdmF0ZSBfdmlldzpWaWV3O1xuXHRwcml2YXRlIF9jYW1lcmFDb250cm9sbGVyOkhvdmVyQ29udHJvbGxlcjtcblxuXHQvL25hdmlnYXRpb24gdmFyaWFibGVzXG5cdHByaXZhdGUgX3RpbWVyOlJlcXVlc3RBbmltYXRpb25GcmFtZTtcblx0cHJpdmF0ZSBfdGltZTpudW1iZXIgPSAwO1xuXHRwcml2YXRlIF9tb3ZlOmJvb2xlYW4gPSBmYWxzZTtcblx0cHJpdmF0ZSBfbGFzdFBhbkFuZ2xlOm51bWJlcjtcblx0cHJpdmF0ZSBfbGFzdFRpbHRBbmdsZTpudW1iZXI7XG5cdHByaXZhdGUgX2xhc3RNb3VzZVg6bnVtYmVyO1xuXHRwcml2YXRlIF9sYXN0TW91c2VZOm51bWJlcjtcblxuXHQvKipcblx0ICogQ29uc3RydWN0b3Jcblx0ICovXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHRoaXMuaW5pdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdsb2JhbCBpbml0aWFsaXNlIGZ1bmN0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGluaXQoKTp2b2lkXG5cdHtcblx0XHR0aGlzLmluaXRFbmdpbmUoKTtcblx0XHR0aGlzLmluaXRMaXN0ZW5lcnMoKTtcblx0XHR0aGlzLmxvYWRUZXh0dXJlKCk7XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGlzZSB0aGUgZW5naW5lXG5cdCAqL1xuXHRwcml2YXRlIGluaXRFbmdpbmUoKTp2b2lkXG5cdHtcblx0XHR0aGlzLl92aWV3ID0gbmV3IFZpZXcobmV3IERlZmF1bHRSZW5kZXJlcigpKTtcblxuXHRcdC8vc2V0dXAgdGhlIGNhbWVyYSBmb3Igb3B0aW1hbCBzaGFkb3cgcmVuZGVyaW5nXG5cdFx0dGhpcy5fdmlldy5jYW1lcmEucHJvamVjdGlvbi5mYXIgPSAyMTAwO1xuXG5cdFx0Ly9zZXR1cCBjb250cm9sbGVyIHRvIGJlIHVzZWQgb24gdGhlIGNhbWVyYVxuXHRcdHRoaXMuX2NhbWVyYUNvbnRyb2xsZXIgPSBuZXcgSG92ZXJDb250cm9sbGVyKHRoaXMuX3ZpZXcuY2FtZXJhLCBudWxsLCA0NSwgMjAsIDEwMDAsIDEwKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXNlIHRoZSBsaXN0ZW5lcnNcblx0ICovXG5cdHByaXZhdGUgaW5pdExpc3RlbmVycygpOnZvaWRcblx0e1xuXHRcdGRvY3VtZW50Lm9ubW91c2Vkb3duID0gKGV2ZW50Ok1vdXNlRXZlbnQpID0+IHRoaXMub25Nb3VzZURvd24oZXZlbnQpO1xuXHRcdGRvY3VtZW50Lm9ubW91c2V1cCA9IChldmVudDpNb3VzZUV2ZW50KSA9PiB0aGlzLm9uTW91c2VVcChldmVudCk7XG5cdFx0ZG9jdW1lbnQub25tb3VzZW1vdmUgPSAoZXZlbnQ6TW91c2VFdmVudCkgPT4gdGhpcy5vbk1vdXNlTW92ZShldmVudCk7XG5cblx0XHR3aW5kb3cub25yZXNpemUgID0gKGV2ZW50OlVJRXZlbnQpID0+IHRoaXMub25SZXNpemUoZXZlbnQpO1xuXG5cdFx0dGhpcy5vblJlc2l6ZSgpO1xuXG5cdFx0dGhpcy5fdGltZXIgPSBuZXcgUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMub25FbnRlckZyYW1lLCB0aGlzKTtcblx0XHR0aGlzLl90aW1lci5zdGFydCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIHN0YXJ0IGxvYWRpbmcgb3VyIHRleHR1cmVcblx0ICovXG5cdHByaXZhdGUgbG9hZFRleHR1cmUoKTp2b2lkXG5cdHtcblx0XHRBc3NldExpYnJhcnkuYWRkRXZlbnRMaXN0ZW5lcihMb2FkZXJFdmVudC5SRVNPVVJDRV9DT01QTEVURSwgKGV2ZW50OkxvYWRlckV2ZW50KSA9PiB0aGlzLm9uUmVzb3VyY2VDb21wbGV0ZShldmVudCkpO1xuXHRcdEFzc2V0TGlicmFyeS5sb2FkKG5ldyBVUkxSZXF1ZXN0KFwiYXNzZXRzLzEzMDkwOXdhbGxfYmlnLnBuZ1wiKSk7XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGlvbiBhbmQgcmVuZGVyIGxvb3Bcblx0ICovXG5cdHByaXZhdGUgb25FbnRlckZyYW1lKGR0Om51bWJlcik6dm9pZFxuXHR7XG5cdFx0dGhpcy5fdGltZSArPSBkdDtcblxuXHRcdHRoaXMuX3ZpZXcucmVuZGVyKCk7XG5cdH1cblxuXHQvKipcblx0ICogTGlzdGVuZXIgZnVuY3Rpb24gZm9yIHJlc291cmNlIGNvbXBsZXRlIGV2ZW50IG9uIGFzc2V0IGxpYnJhcnlcblx0ICovXG5cdHByaXZhdGUgb25SZXNvdXJjZUNvbXBsZXRlKGV2ZW50OkxvYWRlckV2ZW50KVxuXHR7XG5cdFx0dmFyIGFzc2V0czpBcnJheTxJQXNzZXQ+ID0gZXZlbnQuYXNzZXRzO1xuXHRcdHZhciBsZW5ndGg6bnVtYmVyID0gYXNzZXRzLmxlbmd0aDtcblxuXHRcdGZvciAodmFyIGM6bnVtYmVyID0gMDsgYyA8IGxlbmd0aDsgYyArKykge1xuXHRcdFx0dmFyIGFzc2V0OklBc3NldCA9IGFzc2V0c1tjXTtcblxuXHRcdFx0c3dpdGNoKGV2ZW50LnVybCkge1xuXG5cdFx0XHRcdGNhc2UgXCJhc3NldHMvMTMwOTA5d2FsbF9iaWcucG5nXCI6XG5cblx0XHRcdFx0XHR2YXIgbWF0ZXJpYWw6VHJpYW5nbGVNZXRob2RNYXRlcmlhbCA9IG5ldyBUcmlhbmdsZU1ldGhvZE1hdGVyaWFsKCk7XG5cdFx0XHRcdFx0XHRtYXRlcmlhbC50ZXh0dXJlID0gPFRleHR1cmUyREJhc2U+IEFzc2V0TGlicmFyeS5nZXRBc3NldChhc3NldC5uYW1lKTtcblxuXHRcdFx0XHRcdHZhciBzOkJpbGxib2FyZDtcblx0XHRcdFx0XHRcdHMgPSBuZXcgQmlsbGJvYXJkKG1hdGVyaWFsKTtcblx0XHRcdFx0XHRcdHMucGl2b3QgPSBuZXcgVmVjdG9yM0QoMTUwLCAxNTAsIDApO1xuXHRcdFx0XHRcdFx0cy53aWR0aCA9IDMwMDtcblx0XHRcdFx0XHRcdHMuaGVpZ2h0ID0gMzAwO1xuXHRcdFx0XHRcdFx0Ly9zLnJvdGF0aW9uWCA9IDQ1O1xuXHRcdFx0XHRcdHMub3JpZW50YXRpb25Nb2RlID0gT3JpZW50YXRpb25Nb2RlLkNBTUVSQV9QTEFORTtcblx0XHRcdFx0XHRzLmFsaWdubWVudE1vZGUgPSBBbGlnbm1lbnRNb2RlLlBJVk9UX1BPSU5UO1xuXG5cdFx0XHRcdFx0dGhpcy5fdmlldy5zY2VuZS5hZGRDaGlsZChzKTtcblxuXHRcdFx0XHRcdGZvciAodmFyIGM6bnVtYmVyID0gMDsgYyA8IDEwMDsgYyArKykge1xuXHRcdFx0XHRcdFx0dmFyIHNpemU6bnVtYmVyID0gdGhpcy5nZXRSYW5kb20oNSAsIDUwKTtcblx0XHRcdFx0XHRcdHMgPSBuZXcgQmlsbGJvYXJkKG1hdGVyaWFsKTtcblx0XHRcdFx0XHRcdHMucGl2b3QgPSBuZXcgVmVjdG9yM0Qoc2l6ZS8yLCBzaXplLzIsIDApO1xuXHRcdFx0XHRcdFx0cy53aWR0aCA9IHNpemU7XG5cdFx0XHRcdFx0XHRzLmhlaWdodCA9IHNpemU7XG5cdFx0XHRcdFx0XHRzLm9yaWVudGF0aW9uTW9kZSA9IE9yaWVudGF0aW9uTW9kZS5DQU1FUkFfUExBTkU7XG5cdFx0XHRcdFx0XHRzLmFsaWdubWVudE1vZGUgPSBBbGlnbm1lbnRNb2RlLlBJVk9UX1BPSU5UO1xuXHRcdFx0XHRcdFx0XHRzLnggPSAgdGhpcy5nZXRSYW5kb20oLTQwMCAsIDQwMCk7XG5cdFx0XHRcdFx0XHRcdHMueSA9ICB0aGlzLmdldFJhbmRvbSgtNDAwICwgNDAwKTtcblx0XHRcdFx0XHRcdFx0cy56ID0gIHRoaXMuZ2V0UmFuZG9tKC00MDAgLCA0MDApO1xuXHRcdFx0XHRcdFx0dGhpcy5fdmlldy5zY2VuZS5hZGRDaGlsZChzKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0aGlzLl90aW1lci5zdGFydCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNb3VzZSBkb3duIGxpc3RlbmVyIGZvciBuYXZpZ2F0aW9uXG5cdCAqL1xuXHRwcml2YXRlIG9uTW91c2VEb3duKGV2ZW50Ok1vdXNlRXZlbnQpOnZvaWRcblx0e1xuXHRcdHRoaXMuX2xhc3RQYW5BbmdsZSA9IHRoaXMuX2NhbWVyYUNvbnRyb2xsZXIucGFuQW5nbGU7XG5cdFx0dGhpcy5fbGFzdFRpbHRBbmdsZSA9IHRoaXMuX2NhbWVyYUNvbnRyb2xsZXIudGlsdEFuZ2xlO1xuXHRcdHRoaXMuX2xhc3RNb3VzZVggPSBldmVudC5jbGllbnRYO1xuXHRcdHRoaXMuX2xhc3RNb3VzZVkgPSBldmVudC5jbGllbnRZO1xuXHRcdHRoaXMuX21vdmUgPSB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1vdXNlIHVwIGxpc3RlbmVyIGZvciBuYXZpZ2F0aW9uXG5cdCAqL1xuXHRwcml2YXRlIG9uTW91c2VVcChldmVudDpNb3VzZUV2ZW50KTp2b2lkXG5cdHtcblx0XHR0aGlzLl9tb3ZlID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGV2ZW50XG5cdCAqL1xuXHRwcml2YXRlIG9uTW91c2VNb3ZlKGV2ZW50Ok1vdXNlRXZlbnQpXG5cdHtcblx0XHRpZiAodGhpcy5fbW92ZSkge1xuXHRcdFx0dGhpcy5fY2FtZXJhQ29udHJvbGxlci5wYW5BbmdsZSA9IDAuMyooZXZlbnQuY2xpZW50WCAtIHRoaXMuX2xhc3RNb3VzZVgpICsgdGhpcy5fbGFzdFBhbkFuZ2xlO1xuXHRcdFx0dGhpcy5fY2FtZXJhQ29udHJvbGxlci50aWx0QW5nbGUgPSAwLjMqKGV2ZW50LmNsaWVudFkgLSB0aGlzLl9sYXN0TW91c2VZKSArIHRoaXMuX2xhc3RUaWx0QW5nbGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIHN0YWdlIGxpc3RlbmVyIGZvciByZXNpemUgZXZlbnRzXG5cdCAqL1xuXHRwcml2YXRlIG9uUmVzaXplKGV2ZW50OlVJRXZlbnQgPSBudWxsKTp2b2lkXG5cdHtcblx0XHR0aGlzLl92aWV3LnkgPSAwO1xuXHRcdHRoaXMuX3ZpZXcueCA9IDA7XG5cdFx0dGhpcy5fdmlldy53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRcdHRoaXMuX3ZpZXcuaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuXHR9XG5cblx0LyoqXG5cdCAqIFV0aWwgZnVuY3Rpb24gLSBnZXRSYW5kb20gTnVtYmVyXG5cdCAqL1xuXHRwcml2YXRlIGdldFJhbmRvbShtaW46bnVtYmVyLCBtYXg6bnVtYmVyKTpudW1iZXJcblx0e1xuXHRcdHJldHVybiBNYXRoLnJhbmRvbSgpKihtYXggLSBtaW4pICsgbWluO1xuXHR9XG59Il19 \ No newline at end of file diff --git a/tests/entities/BillboardTest.ts b/tests/entities/BillboardTest.ts new file mode 100644 index 00000000..b0e759f6 --- /dev/null +++ b/tests/entities/BillboardTest.ts @@ -0,0 +1,201 @@ +import View = require("awayjs-core/lib/containers/View"); +import HoverController = require("awayjs-core/lib/controllers/HoverController"); +import AlignmentMode = require("awayjs-core/lib/core/base/AlignmentMode"); +import OrientationMode = require("awayjs-core/lib/core/base/OrientationMode"); +import Vector3D = require("awayjs-core/lib/core/geom/Vector3D"); +import AssetLibrary = require("awayjs-core/lib/core/library/AssetLibrary"); +import IAsset = require("awayjs-core/lib/core/library/IAsset"); +import URLLoader = require("awayjs-core/lib/core/net/URLLoader"); +import URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +import Billboard = require("awayjs-core/lib/entities/Billboard"); +import Mesh = require("awayjs-core/lib/entities/Mesh"); +import LoaderEvent = require("awayjs-core/lib/events/LoaderEvent"); +import Texture2DBase = require("awayjs-core/lib/textures/Texture2DBase"); +import RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); + +import DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +import TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); + +class BillboardTest +{ + //engine variables + private _view:View; + private _cameraController:HoverController; + + //navigation variables + private _timer:RequestAnimationFrame; + private _time:number = 0; + private _move:boolean = false; + private _lastPanAngle:number; + private _lastTiltAngle:number; + private _lastMouseX:number; + private _lastMouseY:number; + + /** + * Constructor + */ + constructor() + { + this.init(); + } + + /** + * Global initialise function + */ + private init():void + { + this.initEngine(); + this.initListeners(); + this.loadTexture(); + } + + /** + * Initialise the engine + */ + private initEngine():void + { + this._view = new View(new DefaultRenderer()); + + //setup the camera for optimal shadow rendering + this._view.camera.projection.far = 2100; + + //setup controller to be used on the camera + this._cameraController = new HoverController(this._view.camera, null, 45, 20, 1000, 10); + } + + /** + * Initialise the listeners + */ + private initListeners():void + { + document.onmousedown = (event:MouseEvent) => this.onMouseDown(event); + document.onmouseup = (event:MouseEvent) => this.onMouseUp(event); + document.onmousemove = (event:MouseEvent) => this.onMouseMove(event); + + window.onresize = (event:UIEvent) => this.onResize(event); + + this.onResize(); + + this._timer = new RequestAnimationFrame(this.onEnterFrame, this); + this._timer.start(); + } + + /** + * start loading our texture + */ + private loadTexture():void + { + AssetLibrary.addEventListener(LoaderEvent.RESOURCE_COMPLETE, (event:LoaderEvent) => this.onResourceComplete(event)); + AssetLibrary.load(new URLRequest("assets/130909wall_big.png")); + } + + /** + * Navigation and render loop + */ + private onEnterFrame(dt:number):void + { + this._time += dt; + + this._view.render(); + } + + /** + * Listener function for resource complete event on asset library + */ + private onResourceComplete(event:LoaderEvent) + { + var assets:Array = event.assets; + var length:number = assets.length; + + for (var c:number = 0; c < length; c ++) { + var asset:IAsset = assets[c]; + + switch(event.url) { + + case "assets/130909wall_big.png": + + var material:TriangleMethodMaterial = new TriangleMethodMaterial(); + material.texture = AssetLibrary.getAsset(asset.name); + + var s:Billboard; + s = new Billboard(material); + s.pivot = new Vector3D(150, 150, 0); + s.width = 300; + s.height = 300; + //s.rotationX = 45; + s.orientationMode = OrientationMode.CAMERA_PLANE; + s.alignmentMode = AlignmentMode.PIVOT_POINT; + + this._view.scene.addChild(s); + + for (var c:number = 0; c < 100; c ++) { + var size:number = this.getRandom(5 , 50); + s = new Billboard(material); + s.pivot = new Vector3D(size/2, size/2, 0); + s.width = size; + s.height = size; + s.orientationMode = OrientationMode.CAMERA_PLANE; + s.alignmentMode = AlignmentMode.PIVOT_POINT; + s.x = this.getRandom(-400 , 400); + s.y = this.getRandom(-400 , 400); + s.z = this.getRandom(-400 , 400); + this._view.scene.addChild(s); + } + + this._timer.start(); + break; + } + } + } + + /** + * Mouse down listener for navigation + */ + private onMouseDown(event:MouseEvent):void + { + this._lastPanAngle = this._cameraController.panAngle; + this._lastTiltAngle = this._cameraController.tiltAngle; + this._lastMouseX = event.clientX; + this._lastMouseY = event.clientY; + this._move = true; + } + + /** + * Mouse up listener for navigation + */ + private onMouseUp(event:MouseEvent):void + { + this._move = false; + } + + /** + * + * @param event + */ + private onMouseMove(event:MouseEvent) + { + if (this._move) { + this._cameraController.panAngle = 0.3*(event.clientX - this._lastMouseX) + this._lastPanAngle; + this._cameraController.tiltAngle = 0.3*(event.clientY - this._lastMouseY) + this._lastTiltAngle; + } + } + + /** + * stage listener for resize events + */ + private onResize(event:UIEvent = null):void + { + this._view.y = 0; + this._view.x = 0; + this._view.width = window.innerWidth; + this._view.height = window.innerHeight; + } + + /** + * Util function - getRandom Number + */ + private getRandom(min:number, max:number):number + { + return Math.random()*(max - min) + min; + } +} \ No newline at end of file diff --git a/tests/entities/LayoutTest.js b/tests/entities/LayoutTest.js new file mode 100755 index 00000000..8add1151 --- /dev/null +++ b/tests/entities/LayoutTest.js @@ -0,0 +1,105 @@ +var View = require("awayjs-core/lib/containers/View"); +var HoverController = require("awayjs-core/lib/controllers/HoverController"); +var AssetLibrary = require("awayjs-core/lib/core/library/AssetLibrary"); +var URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +var Billboard = require("awayjs-core/lib/entities/Billboard"); +var LoaderEvent = require("awayjs-core/lib/events/LoaderEvent"); +var AwayMouseEvent = require("awayjs-core/lib/events/MouseEvent"); +var CoordinateSystem = require("awayjs-core/lib/projections/CoordinateSystem"); +var RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +var DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +var TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); +var LayoutTest = (function () { + function LayoutTest() { + var _this = this; + this._move = false; + this._billboards = new Array(); + //listen for a resource complete event + AssetLibrary.addEventListener(LoaderEvent.RESOURCE_COMPLETE, function (event) { return _this.onResourceComplete(event); }); + //load an image + AssetLibrary.load(new URLRequest('assets/256x256.png')); + } + /** + * Listener for resource complete event + * + * @param event + */ + LayoutTest.prototype.onResourceComplete = function (event) { + var _this = this; + //get the image texture + this._imageTexture = event.assets[0]; + //create the view + this._view = new View(new DefaultRenderer()); + this._projection = this._view.camera.projection; + this._projection.coordinateSystem = CoordinateSystem.RIGHT_HANDED; + this._projection.focalLength = 1000; + this._projection.preserveFocalLength = true; + this._projection.originX = 0; + this._projection.originY = 0; + //create a bitmap material + this._bitmapMaterial = new TriangleMethodMaterial(this._imageTexture); + var billboard; + var numHBillboards = 2; + var numVBillboards = 2; + for (var i = 0; i < numHBillboards; i++) { + for (var j = 0; j < numVBillboards; j++) { + billboard = new Billboard(this._bitmapMaterial); + //billboard.width = 50; + //billboard.height = 50; + //billboard.pivot = new Vector3D(billboard.billboardWidth/2, billboard.billboardHeight/2, 0); + billboard.x = j * 300; + billboard.y = i * 300; + billboard.z = 0; + billboard.addEventListener(AwayMouseEvent.MOUSE_MOVE, this.onMouseEvent); + //billboard.orientationMode = away.base.OrientationMode.CAMERA_PLANE; + //billboard.alignmentMode = away.base.AlignmentMode.PIVOT_POINT; + this._billboards.push(billboard); + //add billboard to the scene + this._view.scene.addChild(billboard); + } + } + this._hoverControl = new HoverController(this._view.camera, null, 180, 0, 1000); + document.onmousedown = function (event) { return _this.onMouseDownHandler(event); }; + document.onmouseup = function (event) { return _this.onMouseUpHandler(event); }; + document.onmousemove = function (event) { return _this.onMouseMove(event); }; + window.onresize = function (event) { return _this.onResize(event); }; + //trigger an initial resize for the view + this.onResize(null); + //setup the RAF for a render listener + this._timer = new RequestAnimationFrame(this.render, this); + this._timer.start(); + }; + LayoutTest.prototype.onMouseEvent = function (event) { + console.log(event); + }; + LayoutTest.prototype.onResize = function (event) { + this._view.x = 0; + this._view.y = 0; + this._view.width = window.innerWidth; + this._view.height = window.innerHeight; + }; + LayoutTest.prototype.render = function (dt) { + for (var i = 0; i < this._billboards.length; i++) { + } + this._view.render(); + }; + LayoutTest.prototype.onMouseUpHandler = function (event) { + this._move = false; + }; + LayoutTest.prototype.onMouseMove = function (event) { + if (this._move) { + this._hoverControl.panAngle = 0.3 * (event.clientX - this._lastMouseX) + this._lastPanAngle; + this._hoverControl.tiltAngle = -0.3 * (event.clientY - this._lastMouseY) + this._lastTiltAngle; + } + }; + LayoutTest.prototype.onMouseDownHandler = function (event) { + this._lastPanAngle = this._hoverControl.panAngle; + this._lastTiltAngle = this._hoverControl.tiltAngle; + this._lastMouseX = event.clientX; + this._lastMouseY = event.clientY; + this._move = true; + }; + return LayoutTest; +})(); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImVudGl0aWVzL2xheW91dHRlc3QudHMiXSwibmFtZXMiOlsiTGF5b3V0VGVzdCIsIkxheW91dFRlc3QuY29uc3RydWN0b3IiLCJMYXlvdXRUZXN0Lm9uUmVzb3VyY2VDb21wbGV0ZSIsIkxheW91dFRlc3Qub25Nb3VzZUV2ZW50IiwiTGF5b3V0VGVzdC5vblJlc2l6ZSIsIkxheW91dFRlc3QucmVuZGVyIiwiTGF5b3V0VGVzdC5vbk1vdXNlVXBIYW5kbGVyIiwiTGF5b3V0VGVzdC5vbk1vdXNlTW92ZSIsIkxheW91dFRlc3Qub25Nb3VzZURvd25IYW5kbGVyIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFPLElBQUksV0FBaUIsaUNBQWlDLENBQUMsQ0FBQztBQUMvRCxJQUFPLGVBQWUsV0FBYyw2Q0FBNkMsQ0FBQyxDQUFDO0FBRW5GLElBQU8sWUFBWSxXQUFlLDJDQUEyQyxDQUFDLENBQUM7QUFFL0UsSUFBTyxVQUFVLFdBQWUscUNBQXFDLENBQUMsQ0FBQztBQUN2RSxJQUFPLFNBQVMsV0FBZSxvQ0FBb0MsQ0FBQyxDQUFDO0FBRXJFLElBQU8sV0FBVyxXQUFlLG9DQUFvQyxDQUFDLENBQUM7QUFDdkUsSUFBTyxjQUFjLFdBQWMsbUNBQW1DLENBQUMsQ0FBQztBQUN4RSxJQUFPLGdCQUFnQixXQUFjLDhDQUE4QyxDQUFDLENBQUM7QUFHckYsSUFBTyxxQkFBcUIsV0FBWSw2Q0FBNkMsQ0FBQyxDQUFDO0FBRXZGLElBQU8sZUFBZSxXQUFjLGdEQUFnRCxDQUFDLENBQUM7QUFDdEYsSUFBTyxzQkFBc0IsV0FBWSxxREFBcUQsQ0FBQyxDQUFDO0FBRWhHLElBQU0sVUFBVTtJQWlCZkEsU0FqQktBLFVBQVVBO1FBQWhCQyxpQkFvSUNBO1FBN0hRQSxVQUFLQSxHQUFXQSxLQUFLQSxDQUFDQTtRQVF0QkEsZ0JBQVdBLEdBQW9CQSxJQUFJQSxLQUFLQSxFQUFhQSxDQUFDQTtRQUk3REEsQUFDQUEsc0NBRHNDQTtRQUN0Q0EsWUFBWUEsQ0FBQ0EsZ0JBQWdCQSxDQUFD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QUFDQSxXQUFXQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQTtZQUMxRkEsSUFBSUEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsU0FBU0EsR0FBR0EsQ0FBQ0EsR0FBR0EsR0FBQ0EsQ0FBQ0EsS0FBS0EsQ0FBQ0EsT0FBT0EsR0FBR0EsSUFBSUEsQ0FBQ0EsV0FBV0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsY0FBY0EsQ0FBQ0E7UUFDOUZBLENBQUNBO0lBQ0ZBLENBQUNBO0lBRU9QLHVDQUFrQkEsR0FBMUJBLFVBQTJCQSxLQUFnQkE7UUFFMUNRLElBQUlBLENBQUNBLGFBQWFBLEdBQUdBLElBQUlBLENBQUNBLGFBQWFBLENBQUNBLFFBQVFBLENBQUNBO1FBQ2pEQSxJQUFJQSxDQUFDQSxjQUFjQSxHQUFHQSxJQUFJQSxDQUFDQSxhQUFhQSxDQUFDQSxTQUFTQSxDQUFDQTtRQUNuREEsSUFBSUEsQ0FBQ0EsV0FBV0EsR0FBR0EsS0FBS0EsQ0FBQ0EsT0FBT0EsQ0FBQ0E7UUFDakNBLElBQUlBLENBQUNBLFdBQVdBLEdBQUdBLEtBQUtBLENBQUNBLE9BQU9BLENBQUNBO1FBQ2pDQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxDQUFDQTtJQUNuQkEsQ0FBQ0E7SUFDRlIsaUJBQUNBO0FBQURBLENBcElBLEFBb0lDQSxJQUFBIiwiZmlsZSI6ImVudGl0aWVzL0xheW91dFRlc3QuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL3JvYmJhdGVtYW4vV2Vic3Rvcm1Qcm9qZWN0cy9hd2F5anMtc3RhZ2VnbC8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlld1x0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvbnRhaW5lcnMvVmlld1wiKTtcbmltcG9ydCBIb3ZlckNvbnRyb2xsZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb250cm9sbGVycy9Ib3ZlckNvbnRyb2xsZXJcIik7XG5pbXBvcnQgVmVjdG9yM0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29yZS9nZW9tL1ZlY3RvcjNEXCIpO1xuaW1wb3J0IEFzc2V0TGlicmFyeVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29yZS9saWJyYXJ5L0Fzc2V0TGlicmFyeVwiKTtcbmltcG9ydCBVUkxMb2FkZXJcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvcmUvbmV0L1VSTExvYWRlclwiKTtcbmltcG9ydCBVUkxSZXF1ZXN0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb3JlL25ldC9VUkxSZXF1ZXN0XCIpO1xuaW1wb3J0IEJpbGxib2FyZFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZW50aXRpZXMvQmlsbGJvYXJkXCIpO1xuaW1wb3J0IE1lc2hcdFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9lbnRpdGllcy9NZXNoXCIpO1xuaW1wb3J0IExvYWRlckV2ZW50XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9ldmVudHMvTG9hZGVyRXZlbnRcIik7XG5pbXBvcnQgQXdheU1vdXNlRXZlbnRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9ldmVudHMvTW91c2VFdmVudFwiKTtcbmltcG9ydCBDb29yZGluYXRlU3lzdGVtXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvcHJvamVjdGlvbnMvQ29vcmRpbmF0ZVN5c3RlbVwiKTtcbmltcG9ydCBQZXJzcGVjdGl2ZVByb2plY3Rpb25cdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3Byb2plY3Rpb25zL1BlcnNwZWN0aXZlUHJvamVjdGlvblwiKTtcbmltcG9ydCBJbWFnZVRleHR1cmVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL0ltYWdlVGV4dHVyZVwiKTtcbmltcG9ydCBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL1JlcXVlc3RBbmltYXRpb25GcmFtZVwiKTtcblxuaW1wb3J0IERlZmF1bHRSZW5kZXJlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcmVuZGVyL0RlZmF1bHRSZW5kZXJlclwiKTtcbmltcG9ydCBUcmlhbmdsZU1ldGhvZE1hdGVyaWFsXHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvVHJpYW5nbGVNZXRob2RNYXRlcmlhbFwiKTtcblxuY2xhc3MgTGF5b3V0VGVzdFxue1xuXHRwcml2YXRlIF92aWV3OlZpZXc7XG5cdHByaXZhdGUgX3Byb2plY3Rpb246UGVyc3BlY3RpdmVQcm9qZWN0aW9uO1xuXHRwcml2YXRlIF90aW1lcjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5cdHByaXZhdGUgX2hvdmVyQ29udHJvbDpIb3ZlckNvbnRyb2xsZXI7XG5cblx0cHJpdmF0ZSBfbW92ZTpib29sZWFuID0gZmFsc2U7XG5cdHByaXZhdGUgX2xhc3RQYW5BbmdsZTpudW1iZXI7XG5cdHByaXZhdGUgX2xhc3RUaWx0QW5nbGU6bnVtYmVyO1xuXHRwcml2YXRlIF9sYXN0TW91c2VYOm51bWJlcjtcblx0cHJpdmF0ZSBfbGFzdE1vdXNlWTpudW1iZXI7XG5cblx0cHJpdmF0ZSBfaW1hZ2VUZXh0dXJlOkltYWdlVGV4dHVyZTtcblx0cHJpdmF0ZSBfYml0bWFwTWF0ZXJpYWw6VHJpYW5nbGVNZXRob2RNYXRlcmlhbDtcblx0cHJpdmF0ZSBfYmlsbGJvYXJkczpBcnJheTxCaWxsYm9hcmQ+ID0gbmV3IEFycmF5PEJpbGxib2FyZD4oKTtcblxuXHRjb25zdHJ1Y3RvcigpXG5cdHtcblx0XHQvL2xpc3RlbiBmb3IgYSByZXNvdXJjZSBjb21wbGV0ZSBldmVudFxuXHRcdEFzc2V0TGlicmFyeS5hZGRFdmVudExpc3RlbmVyKExvYWRlckV2ZW50LlJFU09VUkNFX0NPTVBMRVRFICwgKGV2ZW50OkxvYWRlckV2ZW50KSA9PiB0aGlzLm9uUmVzb3VyY2VDb21wbGV0ZShldmVudCkpO1xuXG5cdFx0Ly9sb2FkIGFuIGltYWdlXG5cdFx0QXNzZXRMaWJyYXJ5LmxvYWQobmV3IFVSTFJlcXVlc3QoJ2Fzc2V0cy8yNTZ4MjU2LnBuZycpICk7XG5cdH1cblxuXHQvKipcblx0ICogTGlzdGVuZXIgZm9yIHJlc291cmNlIGNvbXBsZXRlIGV2ZW50XG5cdCAqXG5cdCAqIEBwYXJhbSBldmVudFxuXHQgKi9cblx0cHJpdmF0ZSBvblJlc291cmNlQ29tcGxldGUoZXZlbnQ6TG9hZGVyRXZlbnQpXG5cdHtcblx0XHQvL2dldCB0aGUgaW1hZ2UgdGV4dHVyZVxuXHRcdHRoaXMuX2ltYWdlVGV4dHVyZSA9IDxJbWFnZVRleHR1cmU+IGV2ZW50LmFzc2V0c1swXTtcblxuXHRcdC8vY3JlYXRlIHRoZSB2aWV3XG5cdFx0dGhpcy5fdmlldyA9IG5ldyBWaWV3KG5ldyBEZWZhdWx0UmVuZGVyZXIoKSk7XG5cblx0XHR0aGlzLl9wcm9qZWN0aW9uID0gPFBlcnNwZWN0aXZlUHJvamVjdGlvbj4gdGhpcy5fdmlldy5jYW1lcmEucHJvamVjdGlvbjtcblxuXG5cdFx0dGhpcy5fcHJvamVjdGlvbi5jb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbS5SSUdIVF9IQU5ERUQ7XG5cdFx0dGhpcy5fcHJvamVjdGlvbi5mb2NhbExlbmd0aCA9IDEwMDA7XG5cdFx0dGhpcy5fcHJvamVjdGlvbi5wcmVzZXJ2ZUZvY2FsTGVuZ3RoID0gdHJ1ZTtcblx0XHR0aGlzLl9wcm9qZWN0aW9uLm9yaWdpblggPSAwO1xuXHRcdHRoaXMuX3Byb2plY3Rpb24ub3JpZ2luWSA9IDA7XG5cblx0XHQvL2NyZWF0ZSBhIGJpdG1hcCBtYXRlcmlhbFxuXHRcdHRoaXMuX2JpdG1hcE1hdGVyaWFsID0gbmV3IFRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwodGhpcy5faW1hZ2VUZXh0dXJlKTtcblxuXHRcdHZhciBiaWxsYm9hcmQ6QmlsbGJvYXJkO1xuXHRcdHZhciBudW1IQmlsbGJvYXJkczpudW1iZXIgPSAyO1xuXHRcdHZhciBudW1WQmlsbGJvYXJkczpudW1iZXIgPSAyO1xuXHRcdGZvciAodmFyIGk6bnVtYmVyID0gMDsgaSA8IG51bUhCaWxsYm9hcmRzOyBpKyspIHtcblx0XHRcdGZvciAodmFyIGo6bnVtYmVyID0gMDsgaiA8IG51bVZCaWxsYm9hcmRzOyBqKyspIHtcblx0XHRcdFx0YmlsbGJvYXJkID0gbmV3IEJpbGxib2FyZCh0aGlzLl9iaXRtYXBNYXRlcmlhbCk7XG5cdFx0XHRcdC8vYmlsbGJvYXJkLndpZHRoID0gNTA7XG5cdFx0XHRcdC8vYmlsbGJvYXJkLmhlaWdodCA9IDUwO1xuXHRcdFx0XHQvL2JpbGxib2FyZC5waXZvdCA9IG5ldyBWZWN0b3IzRChiaWxsYm9hcmQuYmlsbGJvYXJkV2lkdGgvMiwgYmlsbGJvYXJkLmJpbGxib2FyZEhlaWdodC8yLCAwKTtcblx0XHRcdFx0YmlsbGJvYXJkLnggPSBqKjMwMDtcblx0XHRcdFx0YmlsbGJvYXJkLnkgPSBpKjMwMDtcblx0XHRcdFx0YmlsbGJvYXJkLnogPSAwO1xuXHRcdFx0XHRiaWxsYm9hcmQuYWRkRXZlbnRMaXN0ZW5lcihBd2F5TW91c2VFdmVudC5NT1VTRV9NT1ZFLCB0aGlzLm9uTW91c2VFdmVudClcblx0XHRcdFx0Ly9iaWxsYm9hcmQub3JpZW50YXRpb25Nb2RlID0gYXdheS5iYXNlLk9yaWVudGF0aW9uTW9kZS5DQU1FUkFfUExBTkU7XG5cdFx0XHRcdC8vYmlsbGJvYXJkLmFsaWdubWVudE1vZGUgPSBhd2F5LmJhc2UuQWxpZ25tZW50TW9kZS5QSVZPVF9QT0lOVDtcblx0XHRcdFx0dGhpcy5fYmlsbGJvYXJkcy5wdXNoKGJpbGxib2FyZCk7XG5cdFx0XHRcdC8vYWRkIGJpbGxib2FyZCB0byB0aGUgc2NlbmVcblx0XHRcdFx0dGhpcy5fdmlldy5zY2VuZS5hZGRDaGlsZChiaWxsYm9hcmQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuX2hvdmVyQ29udHJvbCA9IG5ldyBIb3ZlckNvbnRyb2xsZXIodGhpcy5fdmlldy5jYW1lcmEsIG51bGwsIDE4MCwgMCwgMTAwMCk7XG5cblx0XHRkb2N1bWVudC5vbm1vdXNlZG93biA9IChldmVudDpNb3VzZUV2ZW50KSA9PiB0aGlzLm9uTW91c2VEb3duSGFuZGxlcihldmVudCk7XG5cdFx0ZG9jdW1lbnQub25tb3VzZXVwID0gKGV2ZW50Ok1vdXNlRXZlbnQpID0+IHRoaXMub25Nb3VzZVVwSGFuZGxlcihldmVudCk7XG5cdFx0ZG9jdW1lbnQub25tb3VzZW1vdmUgPSAoZXZlbnQ6TW91c2VFdmVudCkgPT4gdGhpcy5vbk1vdXNlTW92ZShldmVudCk7XG5cblx0XHR3aW5kb3cub25yZXNpemUgID0gKGV2ZW50OlVJRXZlbnQpID0+IHRoaXMub25SZXNpemUoZXZlbnQpO1xuXG5cdFx0Ly90cmlnZ2VyIGFuIGluaXRpYWwgcmVzaXplIGZvciB0aGUgdmlld1xuXHRcdHRoaXMub25SZXNpemUobnVsbCk7XG5cblx0XHQvL3NldHVwIHRoZSBSQUYgZm9yIGEgcmVuZGVyIGxpc3RlbmVyXG5cdFx0dGhpcy5fdGltZXIgPSBuZXcgUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmVuZGVyLCB0aGlzKTtcblx0XHR0aGlzLl90aW1lci5zdGFydCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBvbk1vdXNlRXZlbnQoZXZlbnQ6QXdheU1vdXNlRXZlbnQpXG5cdHtcblx0XHRjb25zb2xlLmxvZyhldmVudCk7XG5cdH1cblxuXHRwcml2YXRlIG9uUmVzaXplKGV2ZW50OlVJRXZlbnQpXG5cdHtcblx0XHR0aGlzLl92aWV3LnggPSAwO1xuXHRcdHRoaXMuX3ZpZXcueSA9IDA7XG5cdFx0dGhpcy5fdmlldy53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRcdHRoaXMuX3ZpZXcuaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuXHR9XG5cblx0cHJpdmF0ZSByZW5kZXIoZHQ6bnVtYmVyKVxuXHR7XG5cdFx0Zm9yICh2YXIgaTpudW1iZXIgPSAwOyBpIDwgdGhpcy5fYmlsbGJvYXJkcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0Ly90aGlzLl9iaWxsYm9hcmRzW2ldLnJvdGF0aW9uWiArPTI7XG5cdFx0fVxuXG5cdFx0dGhpcy5fdmlldy5yZW5kZXIoKTtcblxuXHR9XG5cblx0cHJpdmF0ZSBvbk1vdXNlVXBIYW5kbGVyKGV2ZW50Ok1vdXNlRXZlbnQpXG5cdHtcblx0XHR0aGlzLl9tb3ZlID0gZmFsc2U7XG5cdH1cblxuXHRwcml2YXRlIG9uTW91c2VNb3ZlKGV2ZW50Ok1vdXNlRXZlbnQpXG5cdHtcblx0XHRpZiAodGhpcy5fbW92ZSkge1xuXHRcdFx0dGhpcy5faG92ZXJDb250cm9sLnBhbkFuZ2xlID0gMC4zKihldmVudC5jbGllbnRYIC0gdGhpcy5fbGFzdE1vdXNlWCkgKyB0aGlzLl9sYXN0UGFuQW5nbGU7XG5cdFx0XHR0aGlzLl9ob3ZlckNvbnRyb2wudGlsdEFuZ2xlID0gLTAuMyooZXZlbnQuY2xpZW50WSAtIHRoaXMuX2xhc3RNb3VzZVkpICsgdGhpcy5fbGFzdFRpbHRBbmdsZTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIG9uTW91c2VEb3duSGFuZGxlcihldmVudDpNb3VzZUV2ZW50KVxuXHR7XG5cdFx0dGhpcy5fbGFzdFBhbkFuZ2xlID0gdGhpcy5faG92ZXJDb250cm9sLnBhbkFuZ2xlO1xuXHRcdHRoaXMuX2xhc3RUaWx0QW5nbGUgPSB0aGlzLl9ob3ZlckNvbnRyb2wudGlsdEFuZ2xlO1xuXHRcdHRoaXMuX2xhc3RNb3VzZVggPSBldmVudC5jbGllbnRYO1xuXHRcdHRoaXMuX2xhc3RNb3VzZVkgPSBldmVudC5jbGllbnRZO1xuXHRcdHRoaXMuX21vdmUgPSB0cnVlO1xuXHR9XG59Il19 \ No newline at end of file diff --git a/tests/entities/LayoutTest.ts b/tests/entities/LayoutTest.ts new file mode 100644 index 00000000..75ce0790 --- /dev/null +++ b/tests/entities/LayoutTest.ts @@ -0,0 +1,151 @@ +import View = require("awayjs-core/lib/containers/View"); +import HoverController = require("awayjs-core/lib/controllers/HoverController"); +import Vector3D = require("awayjs-core/lib/core/geom/Vector3D"); +import AssetLibrary = require("awayjs-core/lib/core/library/AssetLibrary"); +import URLLoader = require("awayjs-core/lib/core/net/URLLoader"); +import URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +import Billboard = require("awayjs-core/lib/entities/Billboard"); +import Mesh = require("awayjs-core/lib/entities/Mesh"); +import LoaderEvent = require("awayjs-core/lib/events/LoaderEvent"); +import AwayMouseEvent = require("awayjs-core/lib/events/MouseEvent"); +import CoordinateSystem = require("awayjs-core/lib/projections/CoordinateSystem"); +import PerspectiveProjection = require("awayjs-core/lib/projections/PerspectiveProjection"); +import ImageTexture = require("awayjs-core/lib/textures/ImageTexture"); +import RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); + +import DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +import TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); + +class LayoutTest +{ + private _view:View; + private _projection:PerspectiveProjection; + private _timer:RequestAnimationFrame; + private _hoverControl:HoverController; + + private _move:boolean = false; + private _lastPanAngle:number; + private _lastTiltAngle:number; + private _lastMouseX:number; + private _lastMouseY:number; + + private _imageTexture:ImageTexture; + private _bitmapMaterial:TriangleMethodMaterial; + private _billboards:Array = new Array(); + + constructor() + { + //listen for a resource complete event + AssetLibrary.addEventListener(LoaderEvent.RESOURCE_COMPLETE , (event:LoaderEvent) => this.onResourceComplete(event)); + + //load an image + AssetLibrary.load(new URLRequest('assets/256x256.png') ); + } + + /** + * Listener for resource complete event + * + * @param event + */ + private onResourceComplete(event:LoaderEvent) + { + //get the image texture + this._imageTexture = event.assets[0]; + + //create the view + this._view = new View(new DefaultRenderer()); + + this._projection = this._view.camera.projection; + + + this._projection.coordinateSystem = CoordinateSystem.RIGHT_HANDED; + this._projection.focalLength = 1000; + this._projection.preserveFocalLength = true; + this._projection.originX = 0; + this._projection.originY = 0; + + //create a bitmap material + this._bitmapMaterial = new TriangleMethodMaterial(this._imageTexture); + + var billboard:Billboard; + var numHBillboards:number = 2; + var numVBillboards:number = 2; + for (var i:number = 0; i < numHBillboards; i++) { + for (var j:number = 0; j < numVBillboards; j++) { + billboard = new Billboard(this._bitmapMaterial); + //billboard.width = 50; + //billboard.height = 50; + //billboard.pivot = new Vector3D(billboard.billboardWidth/2, billboard.billboardHeight/2, 0); + billboard.x = j*300; + billboard.y = i*300; + billboard.z = 0; + billboard.addEventListener(AwayMouseEvent.MOUSE_MOVE, this.onMouseEvent) + //billboard.orientationMode = away.base.OrientationMode.CAMERA_PLANE; + //billboard.alignmentMode = away.base.AlignmentMode.PIVOT_POINT; + this._billboards.push(billboard); + //add billboard to the scene + this._view.scene.addChild(billboard); + } + } + + this._hoverControl = new HoverController(this._view.camera, null, 180, 0, 1000); + + document.onmousedown = (event:MouseEvent) => this.onMouseDownHandler(event); + document.onmouseup = (event:MouseEvent) => this.onMouseUpHandler(event); + document.onmousemove = (event:MouseEvent) => this.onMouseMove(event); + + window.onresize = (event:UIEvent) => this.onResize(event); + + //trigger an initial resize for the view + this.onResize(null); + + //setup the RAF for a render listener + this._timer = new RequestAnimationFrame(this.render, this); + this._timer.start(); + } + + private onMouseEvent(event:AwayMouseEvent) + { + console.log(event); + } + + private onResize(event:UIEvent) + { + this._view.x = 0; + this._view.y = 0; + this._view.width = window.innerWidth; + this._view.height = window.innerHeight; + } + + private render(dt:number) + { + for (var i:number = 0; i < this._billboards.length; i++) { + //this._billboards[i].rotationZ +=2; + } + + this._view.render(); + + } + + private onMouseUpHandler(event:MouseEvent) + { + this._move = false; + } + + private onMouseMove(event:MouseEvent) + { + if (this._move) { + this._hoverControl.panAngle = 0.3*(event.clientX - this._lastMouseX) + this._lastPanAngle; + this._hoverControl.tiltAngle = -0.3*(event.clientY - this._lastMouseY) + this._lastTiltAngle; + } + } + + private onMouseDownHandler(event:MouseEvent) + { + this._lastPanAngle = this._hoverControl.panAngle; + this._lastTiltAngle = this._hoverControl.tiltAngle; + this._lastMouseX = event.clientX; + this._lastMouseY = event.clientY; + this._move = true; + } +} \ No newline at end of file diff --git a/tests/frame.html b/tests/frame.html new file mode 100755 index 00000000..9ba0db00 --- /dev/null +++ b/tests/frame.html @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/index.html b/tests/index.html new file mode 100755 index 00000000..afbcfacb --- /dev/null +++ b/tests/index.html @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/lights/TorusLight.js b/tests/lights/TorusLight.js new file mode 100755 index 00000000..8dcb410d --- /dev/null +++ b/tests/lights/TorusLight.js @@ -0,0 +1,75 @@ +var View = require("awayjs-core/lib/containers/View"); +var Vector3D = require("awayjs-core/lib/core/geom/Vector3D"); +var URLLoader = require("awayjs-core/lib/core/net/URLLoader"); +var URLLoaderDataFormat = require("awayjs-core/lib/core/net/URLLoaderDataFormat"); +var URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +var DirectionalLight = require("awayjs-core/lib/entities/DirectionalLight"); +var AwayEvent = require("awayjs-core/lib/events/Event"); +var StaticLightPicker = require("awayjs-core/lib/materials/lightpickers/StaticLightPicker"); +var ParserUtils = require("awayjs-core/lib/parsers/ParserUtils"); +var PerspectiveProjection = require("awayjs-core/lib/projections/PerspectiveProjection"); +var PrimitiveTorusPrefab = require("awayjs-core/lib/prefabs/PrimitiveTorusPrefab"); +var ImageTexture = require("awayjs-core/lib/textures/ImageTexture"); +var RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +var Debug = require("awayjs-core/lib/utils/Debug"); +var DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +var TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); +var TorusLight = (function () { + function TorusLight() { + Debug.THROW_ERRORS = false; + Debug.ENABLE_LOG = false; + Debug.LOG_PI_ERRORS = false; + this._view = new View(new DefaultRenderer()); + this._view.camera.projection = new PerspectiveProjection(60); + this._torus = new PrimitiveTorusPrefab(220, 80, 32, 16, false); + this.loadResources(); + } + TorusLight.prototype.loadResources = function () { + var _this = this; + var urlRequest = new URLRequest("assets/dots.png"); + var urlLoader = new URLLoader(); + urlLoader.dataFormat = URLLoaderDataFormat.BLOB; + urlLoader.addEventListener(AwayEvent.COMPLETE, function (event) { return _this.imageCompleteHandler(event); }); + urlLoader.load(urlRequest); + }; + TorusLight.prototype.imageCompleteHandler = function (event) { + var _this = this; + var imageLoader = event.target; + this._image = ParserUtils.blobToImage(imageLoader.data); + this._image.onload = function (event) { return _this.onLoadComplete(event); }; + }; + TorusLight.prototype.onLoadComplete = function (event) { + var _this = this; + var ts = new ImageTexture(this._image, false); + var light = new DirectionalLight(); + light.direction = new Vector3D(0, 0, 1); + light.diffuse = .7; + light.specular = 1; + this._view.scene.addChild(light); + var lightPicker = new StaticLightPicker([light]); + var matTx = new TriangleMethodMaterial(ts, true, true, false); + matTx.lightPicker = lightPicker; + this._torus.material = matTx; + this._mesh = this._torus.getNewObject(); + this._view.scene.addChild(this._mesh); + this._raf = new RequestAnimationFrame(this.render, this); + this._raf.start(); + window.onresize = function (event) { return _this.resize(event); }; + this.resize(); + }; + TorusLight.prototype.render = function (dt) { + if (dt === void 0) { dt = null; } + this._mesh.rotationY += 1; + this._view.render(); + }; + TorusLight.prototype.resize = function (event) { + if (event === void 0) { event = null; } + this._view.y = 0; + this._view.x = 0; + this._view.width = window.innerWidth; + this._view.height = window.innerHeight; + }; + return TorusLight; +})(); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpZ2h0cy90b3J1c2xpZ2h0LnRzIl0sIm5hbWVzIjpbIlRvcnVzTGlnaHQiLCJUb3J1c0xpZ2h0LmNvbnN0cnVjdG9yIiwiVG9ydXNMaWdodC5sb2FkUmVzb3VyY2VzIiwiVG9ydXNMaWdodC5pbWFnZUNvbXBsZXRlSGFuZGxlciIsIlRvcnVzTGlnaHQub25Mb2FkQ29tcGxldGUiLCJUb3J1c0xpZ2h0LnJlbmRlciIsIlRvcnVzTGlnaHQucmVzaXplIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFPLElBQUksV0FBaUIsaUNBQWlDLENBQUMsQ0FBQztBQUMvRCxJQUFPLFFBQVEsV0FBZ0Isb0NBQW9DLENBQUMsQ0FBQztBQUNyRSxJQUFPLFNBQVMsV0FBZSxvQ0FBb0MsQ0FBQyxDQUFDO0FBQ3JFLElBQU8sbUJBQW1CLFdBQWEsOENBQThDLENBQUMsQ0FBQztBQUN2RixJQUFPLFVBQVUsV0FBZSxxQ0FBcUMsQ0FBQyxDQUFDO0FBRXZFLElBQU8sZ0JBQWdCLFdBQWMsMkNBQTJDLENBQUMsQ0FBQztBQUNsRixJQUFPLFNBQVMsV0FBZSw4QkFBOEIsQ0FBQyxDQUFDO0FBQy9ELElBQU8saUJBQWlCLFdBQWEsMERBQTBELENBQUMsQ0FBQztBQUNqRyxJQUFPLFdBQVcsV0FBZSxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3hFLElBQU8scUJBQXFCLFdBQVksbURBQW1ELENBQUMsQ0FBQztBQUM3RixJQUFPLG9CQUFvQixXQUFhLDhDQUE4QyxDQUFDLENBQUM7QUFDeEYsSUFBTyxZQUFZLFdBQWUsdUNBQXVDLENBQUMsQ0FBQztBQUMzRSxJQUFPLHFCQUFxQixXQUFZLDZDQUE2QyxDQUFDLENBQUM7QUFDdkYsSUFBTyxLQUFLLFdBQWdCLDZCQUE2QixDQUFDLENBQUM7QUFFM0QsSUFBTyxlQUFlLFdBQWMsZ0RBQWdELENBQUMsQ0FBQztBQUN0RixJQUFPLHNCQUFzQixXQUFZLHFEQUFxRCxDQUFDLENBQUM7QUFFaEcsSUFBTSxVQUFVO0lBUWZBLFNBUktBLFVBQVVBO1FBVWRD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LENBQUNBO1FBRWpCQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxLQUFLQSxHQUFHQSxNQUFNQSxDQUFDQSxVQUFVQSxDQUFDQTtRQUNyQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsTUFBTUEsR0FBR0EsTUFBTUEsQ0FBQ0EsV0FBV0EsQ0FBQ0E7SUFDeENBLENBQUNBO0lBQ0ZOLGlCQUFDQTtBQUFEQSxDQXJGQSxBQXFGQ0EsSUFBQSIsImZpbGUiOiJsaWdodHMvVG9ydXNMaWdodC5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvcm9iYmF0ZW1hbi9XZWJzdG9ybVByb2plY3RzL2F3YXlqcy1zdGFnZWdsLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBWaWV3XHRcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29udGFpbmVycy9WaWV3XCIpO1xuaW1wb3J0IFZlY3RvcjNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvcmUvZ2VvbS9WZWN0b3IzRFwiKTtcbmltcG9ydCBVUkxMb2FkZXJcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvcmUvbmV0L1VSTExvYWRlclwiKTtcbmltcG9ydCBVUkxMb2FkZXJEYXRhRm9ybWF0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvcmUvbmV0L1VSTExvYWRlckRhdGFGb3JtYXRcIik7XG5pbXBvcnQgVVJMUmVxdWVzdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29yZS9uZXQvVVJMUmVxdWVzdFwiKTtcbmltcG9ydCBNZXNoXHRcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZW50aXRpZXMvTWVzaFwiKTtcbmltcG9ydCBEaXJlY3Rpb25hbExpZ2h0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZW50aXRpZXMvRGlyZWN0aW9uYWxMaWdodFwiKTtcbmltcG9ydCBBd2F5RXZlbnRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2V2ZW50cy9FdmVudFwiKTtcbmltcG9ydCBTdGF0aWNMaWdodFBpY2tlclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9tYXRlcmlhbHMvbGlnaHRwaWNrZXJzL1N0YXRpY0xpZ2h0UGlja2VyXCIpO1xuaW1wb3J0IFBhcnNlclV0aWxzXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9wYXJzZXJzL1BhcnNlclV0aWxzXCIpO1xuaW1wb3J0IFBlcnNwZWN0aXZlUHJvamVjdGlvblx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvcHJvamVjdGlvbnMvUGVyc3BlY3RpdmVQcm9qZWN0aW9uXCIpO1xuaW1wb3J0IFByaW1pdGl2ZVRvcnVzUHJlZmFiXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3ByZWZhYnMvUHJpbWl0aXZlVG9ydXNQcmVmYWJcIik7XG5pbXBvcnQgSW1hZ2VUZXh0dXJlXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi90ZXh0dXJlcy9JbWFnZVRleHR1cmVcIik7XG5pbXBvcnQgUmVxdWVzdEFuaW1hdGlvbkZyYW1lXHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9SZXF1ZXN0QW5pbWF0aW9uRnJhbWVcIik7XG5pbXBvcnQgRGVidWdcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvRGVidWdcIik7XG5cbmltcG9ydCBEZWZhdWx0UmVuZGVyZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3JlbmRlci9EZWZhdWx0UmVuZGVyZXJcIik7XG5pbXBvcnQgVHJpYW5nbGVNZXRob2RNYXRlcmlhbFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL1RyaWFuZ2xlTWV0aG9kTWF0ZXJpYWxcIik7XG5cbmNsYXNzIFRvcnVzTGlnaHRcbntcblx0cHJpdmF0ZSBfdmlldzpWaWV3O1xuXHRwcml2YXRlIF90b3J1czpQcmltaXRpdmVUb3J1c1ByZWZhYjtcblx0cHJpdmF0ZSBfbWVzaDpNZXNoO1xuXHRwcml2YXRlIF9yYWY6UmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuXHRwcml2YXRlIF9pbWFnZTpIVE1MSW1hZ2VFbGVtZW50O1xuXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdERlYnVnLlRIUk9XX0VSUk9SUyA9IGZhbHNlO1xuXHRcdERlYnVnLkVOQUJMRV9MT0cgPSBmYWxzZTtcblx0XHREZWJ1Zy5MT0dfUElfRVJST1JTID0gZmFsc2U7XG5cblx0XHR0aGlzLl92aWV3ID0gbmV3IFZpZXcobmV3IERlZmF1bHRSZW5kZXJlcigpKTtcblx0XHR0aGlzLl92aWV3LmNhbWVyYS5wcm9qZWN0aW9uID0gbmV3IFBlcnNwZWN0aXZlUHJvamVjdGlvbig2MCk7XG5cdFx0dGhpcy5fdG9ydXMgPSBuZXcgUHJpbWl0aXZlVG9ydXNQcmVmYWIoMjIwLCA4MCwgMzIsIDE2LCBmYWxzZSk7XG5cblx0XHR0aGlzLmxvYWRSZXNvdXJjZXMoKTtcblx0fVxuXG5cdHByaXZhdGUgbG9hZFJlc291cmNlcygpXG5cdHtcblx0XHR2YXIgdXJsUmVxdWVzdDpVUkxSZXF1ZXN0ID0gbmV3IFVSTFJlcXVlc3QoXCJhc3NldHMvZG90cy5wbmdcIik7XG5cblx0XHR2YXIgdXJsTG9hZGVyOlVSTExvYWRlciA9IG5ldyBVUkxMb2FkZXIoKTtcblx0XHR1cmxMb2FkZXIuZGF0YUZvcm1hdCA9IFVSTExvYWRlckRhdGFGb3JtYXQuQkxPQjtcblx0XHR1cmxMb2FkZXIuYWRkRXZlbnRMaXN0ZW5lcihBd2F5RXZlbnQuQ09NUExFVEUsIChldmVudDpBd2F5RXZlbnQpID0+IHRoaXMuaW1hZ2VDb21wbGV0ZUhhbmRsZXIoZXZlbnQpKTtcblx0XHR1cmxMb2FkZXIubG9hZCh1cmxSZXF1ZXN0KTtcblx0fVxuXG5cdHByaXZhdGUgaW1hZ2VDb21wbGV0ZUhhbmRsZXIoZXZlbnQ6QXdheUV2ZW50KVxuXHR7XG5cdFx0dmFyIGltYWdlTG9hZGVyOlVSTExvYWRlciA9IDxVUkxMb2FkZXI+IGV2ZW50LnRhcmdldDtcblxuXHRcdHRoaXMuX2ltYWdlID0gUGFyc2VyVXRpbHMuYmxvYlRvSW1hZ2UoaW1hZ2VMb2FkZXIuZGF0YSk7XG5cdFx0dGhpcy5faW1hZ2Uub25sb2FkID0gKGV2ZW50OkV2ZW50KSA9PiB0aGlzLm9uTG9hZENvbXBsZXRlKGV2ZW50KTtcblx0fVxuXG5cdHByaXZhdGUgb25Mb2FkQ29tcGxldGUoZXZlbnQ6RXZlbnQpXG5cdHtcblx0XHR2YXIgdHM6SW1hZ2VUZXh0dXJlID0gbmV3IEltYWdlVGV4dHVyZSh0aGlzLl9pbWFnZSwgZmFsc2UpO1xuXG5cdFx0dmFyIGxpZ2h0OkRpcmVjdGlvbmFsTGlnaHQgPSBuZXcgRGlyZWN0aW9uYWxMaWdodCgpO1xuXHRcdGxpZ2h0LmRpcmVjdGlvbiA9IG5ldyBWZWN0b3IzRCgwLCAwLCAxKTtcblx0XHRsaWdodC5kaWZmdXNlID0gLjc7XG5cdFx0bGlnaHQuc3BlY3VsYXIgPSAxO1xuXG5cdFx0dGhpcy5fdmlldy5zY2VuZS5hZGRDaGlsZChsaWdodCk7XG5cblx0XHR2YXIgbGlnaHRQaWNrZXI6U3RhdGljTGlnaHRQaWNrZXIgPSBuZXcgU3RhdGljTGlnaHRQaWNrZXIoW2xpZ2h0XSk7XG5cblx0XHR2YXIgbWF0VHg6VHJpYW5nbGVNZXRob2RNYXRlcmlhbCA9IG5ldyBUcmlhbmdsZU1ldGhvZE1hdGVyaWFsKHRzLCB0cnVlLCB0cnVlLCBmYWxzZSk7XG5cdFx0bWF0VHgubGlnaHRQaWNrZXIgPSBsaWdodFBpY2tlcjtcblxuXHRcdHRoaXMuX3RvcnVzLm1hdGVyaWFsID0gbWF0VHg7XG5cblx0XHR0aGlzLl9tZXNoID0gPE1lc2g+IHRoaXMuX3RvcnVzLmdldE5ld09iamVjdCgpO1xuXG5cdFx0dGhpcy5fdmlldy5zY2VuZS5hZGRDaGlsZCh0aGlzLl9tZXNoKTtcblxuXHRcdHRoaXMuX3JhZiA9IG5ldyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZW5kZXIgLCB0aGlzKTtcblx0XHR0aGlzLl9yYWYuc3RhcnQoKTtcblxuXHRcdHdpbmRvdy5vbnJlc2l6ZSA9IChldmVudDpVSUV2ZW50KSA9PiB0aGlzLnJlc2l6ZShldmVudCk7XG5cblx0XHR0aGlzLnJlc2l6ZSgpO1xuXHR9XG5cblxuXHRwdWJsaWMgcmVuZGVyKGR0Om51bWJlciA9IG51bGwpOnZvaWRcblx0e1xuXHRcdHRoaXMuX21lc2gucm90YXRpb25ZICs9IDE7XG5cdFx0dGhpcy5fdmlldy5yZW5kZXIoKTtcblx0fVxuXG5cblx0cHVibGljIHJlc2l6ZShldmVudDpVSUV2ZW50ID0gbnVsbClcblx0e1xuXHRcdHRoaXMuX3ZpZXcueSA9IDA7XG5cdFx0dGhpcy5fdmlldy54ID0gMDtcblxuXHRcdHRoaXMuX3ZpZXcud2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcblx0XHR0aGlzLl92aWV3LmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0fVxufSJdfQ== \ No newline at end of file diff --git a/tests/lights/TorusLight.ts b/tests/lights/TorusLight.ts new file mode 100644 index 00000000..1791ef6f --- /dev/null +++ b/tests/lights/TorusLight.ts @@ -0,0 +1,105 @@ +import View = require("awayjs-core/lib/containers/View"); +import Vector3D = require("awayjs-core/lib/core/geom/Vector3D"); +import URLLoader = require("awayjs-core/lib/core/net/URLLoader"); +import URLLoaderDataFormat = require("awayjs-core/lib/core/net/URLLoaderDataFormat"); +import URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +import Mesh = require("awayjs-core/lib/entities/Mesh"); +import DirectionalLight = require("awayjs-core/lib/entities/DirectionalLight"); +import AwayEvent = require("awayjs-core/lib/events/Event"); +import StaticLightPicker = require("awayjs-core/lib/materials/lightpickers/StaticLightPicker"); +import ParserUtils = require("awayjs-core/lib/parsers/ParserUtils"); +import PerspectiveProjection = require("awayjs-core/lib/projections/PerspectiveProjection"); +import PrimitiveTorusPrefab = require("awayjs-core/lib/prefabs/PrimitiveTorusPrefab"); +import ImageTexture = require("awayjs-core/lib/textures/ImageTexture"); +import RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +import Debug = require("awayjs-core/lib/utils/Debug"); + +import DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +import TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); + +class TorusLight +{ + private _view:View; + private _torus:PrimitiveTorusPrefab; + private _mesh:Mesh; + private _raf:RequestAnimationFrame; + private _image:HTMLImageElement; + + constructor() + { + Debug.THROW_ERRORS = false; + Debug.ENABLE_LOG = false; + Debug.LOG_PI_ERRORS = false; + + this._view = new View(new DefaultRenderer()); + this._view.camera.projection = new PerspectiveProjection(60); + this._torus = new PrimitiveTorusPrefab(220, 80, 32, 16, false); + + this.loadResources(); + } + + private loadResources() + { + var urlRequest:URLRequest = new URLRequest("assets/dots.png"); + + var urlLoader:URLLoader = new URLLoader(); + urlLoader.dataFormat = URLLoaderDataFormat.BLOB; + urlLoader.addEventListener(AwayEvent.COMPLETE, (event:AwayEvent) => this.imageCompleteHandler(event)); + urlLoader.load(urlRequest); + } + + private imageCompleteHandler(event:AwayEvent) + { + var imageLoader:URLLoader = event.target; + + this._image = ParserUtils.blobToImage(imageLoader.data); + this._image.onload = (event:Event) => this.onLoadComplete(event); + } + + private onLoadComplete(event:Event) + { + var ts:ImageTexture = new ImageTexture(this._image, false); + + var light:DirectionalLight = new DirectionalLight(); + light.direction = new Vector3D(0, 0, 1); + light.diffuse = .7; + light.specular = 1; + + this._view.scene.addChild(light); + + var lightPicker:StaticLightPicker = new StaticLightPicker([light]); + + var matTx:TriangleMethodMaterial = new TriangleMethodMaterial(ts, true, true, false); + matTx.lightPicker = lightPicker; + + this._torus.material = matTx; + + this._mesh = this._torus.getNewObject(); + + this._view.scene.addChild(this._mesh); + + this._raf = new RequestAnimationFrame(this.render , this); + this._raf.start(); + + window.onresize = (event:UIEvent) => this.resize(event); + + this.resize(); + } + + + public render(dt:number = null):void + { + this._mesh.rotationY += 1; + this._view.render(); + } + + + public resize(event:UIEvent = null) + { + this._view.y = 0; + this._view.x = 0; + + this._view.width = window.innerWidth; + this._view.height = window.innerHeight; + } +} \ No newline at end of file diff --git a/tests/materials/ColorMultiPassMatTest.js b/tests/materials/ColorMultiPassMatTest.js new file mode 100755 index 00000000..b0191283 --- /dev/null +++ b/tests/materials/ColorMultiPassMatTest.js @@ -0,0 +1,64 @@ +var View = require("awayjs-core/lib/containers/View"); +var Vector3D = require("awayjs-core/lib/core/geom/Vector3D"); +var PointLight = require("awayjs-core/lib/entities/PointLight"); +var StaticLightPicker = require("awayjs-core/lib/materials/lightpickers/StaticLightPicker"); +var PrimitiveTorusPrefab = require("awayjs-core/lib/prefabs/PrimitiveTorusPrefab"); +var RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +var Debug = require("awayjs-core/lib/utils/Debug"); +var DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +var TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); +var ColorMultiPassMatTest = (function () { + function ColorMultiPassMatTest() { + var _this = this; + this.counter = 0; + this.center = new Vector3D(); + Debug.THROW_ERRORS = false; + Debug.LOG_PI_ERRORS = false; + this.light = new PointLight(); + this.view = new View(new DefaultRenderer()); + this.view.camera.z = -1000; + this.view.backgroundColor = 0x000000; + this.torus = new PrimitiveTorusPrefab(50, 10, 32, 32, false); + var l = 20; + var radius = 500; + var mat = new TriangleMethodMaterial(0xff0000); + mat.lightPicker = new StaticLightPicker([this.light]); + this.torus.material = mat; + for (var c = 0; c < l; c++) { + var t = Math.PI * 2 * c / l; + var m = this.torus.getNewObject(); + m.x = Math.cos(t) * radius; + m.y = 0; + m.z = Math.sin(t) * radius; + this.view.scene.addChild(m); + } + this.view.scene.addChild(this.light); + this.view.y = this.view.x = 0; + this.view.width = window.innerWidth; + this.view.height = window.innerHeight; + console.log("renderer ", this.view.renderer); + console.log("scene ", this.view.scene); + console.log("view ", this.view); + this.view.render(); + window.onresize = function (event) { return _this.onResize(event); }; + this.raf = new RequestAnimationFrame(this.tick, this); + this.raf.start(); + } + ColorMultiPassMatTest.prototype.tick = function (dt) { + this.counter += 0.005; + this.view.camera.lookAt(this.center); + this.view.camera.x = Math.cos(this.counter) * 800; + this.view.camera.z = Math.sin(this.counter) * 800; + this.view.render(); + }; + ColorMultiPassMatTest.prototype.onResize = function (event) { + if (event === void 0) { event = null; } + this.view.y = 0; + this.view.x = 0; + this.view.width = window.innerWidth; + this.view.height = window.innerHeight; + }; + return ColorMultiPassMatTest; +})(); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1hdGVyaWFscy9jb2xvcm11bHRpcGFzc21hdHRlc3QudHMiXSwibmFtZXMiOlsiQ29sb3JNdWx0aVBhc3NNYXRUZXN0IiwiQ29sb3JNdWx0aVBhc3NNYXRUZXN0LmNvbnN0cnVjdG9yIiwiQ29sb3JNdWx0aVBhc3NNYXRUZXN0LnRpY2siLCJDb2xvck11bHRpUGFzc01hdFRlc3Qub25SZXNpemUiXSwibWFwcGluZ3MiOiJBQUFBLElBQU8sSUFBSSxXQUFpQixpQ0FBaUMsQ0FBQyxDQUFDO0FBQy9ELElBQU8sUUFBUSxXQUFnQixvQ0FBb0MsQ0FBQyxDQUFDO0FBSXJFLElBQU8sVUFBVSxXQUFlLHFDQUFxQyxDQUFDLENBQUM7QUFFdkUsSUFBTyxpQkFBaUIsV0FBYSwwREFBMEQsQ0FBQyxDQUFDO0FBQ2pHLElBQU8sb0JBQW9CLFdBQWEsOENBQThDLENBQUMsQ0FBQztBQUN4RixJQUFPLHFCQUFxQixXQUFZLDZDQUE2QyxDQUFDLENBQUM7QUFDdkYsSUFBTyxLQUFLLFdBQWdCLDZCQUE2QixDQUFDLENBQUM7QUFFM0QsSUFBTyxlQUFlLFdBQWMsZ0RBQWdELENBQUMsQ0FBQztBQUN0RixJQUFPLHNCQUFzQixXQUFZLHFEQUFxRCxDQUFDLENBQUM7QUFFaEcsSUFBTSxxQkFBcUI7SUFTMUJBLFNBVEtBLHFCQUFxQkE7UUFBM0JDLGlCQTRFQ0E7UUF0RVFBLFlBQU9BLEdBQVVBLENBQUNBLENBQUNBO1FBQ25CQSxXQUFNQSxHQUFZQSxJQUFJQSxRQUFRQSxFQUFFQSxDQUFDQTtRQUl4Q0EsS0FBS0EsQ0FBQ0EsWUFBWUEsR0FBR0EsS0FBS0EsQ0FBQ0E7UUFDM0JBLEtBQUtBLENBQUNBLGFBQWFBLEdBQUdBLEtBQUtBLENBQUNBO1FBRTVCQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxVQUFVQSxFQUFFQSxDQUFDQTtRQUM5QkEsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsSUFBSUEsSUFBSUEsQ0FBQ0EsSUFBSUEsZUFBZUEsRUFBRUEsQ0FBQ0EsQ0FBQ0E7UUFDNUNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLElBQUlBLENBQUNBO1FBQzNCQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxlQUFlQSxHQUFHQSxRQUFRQSxDQUFDQTtRQUNyQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsSUFBSUEsb0JBQW9CQSxDQUFDQSxFQUFFQSxFQUFHQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFHQSxFQUFFQSxFQUFHQSxLQUFLQSxDQUFDQSxDQUFDQTtRQUVoRUEsSUFBSUEsQ0FBQ0EsR0FBVUEsRUFBRUEsQ0FBQ0E7UUFDbEJBLElBQUlBLE1BQU1BLEdBQVVBLEdBQUdBLENBQUNBO1FBRXhCQSxJQUFJQSxHQUFHQSxHQUEwQkEsSUFBSUEsc0JBQXNCQSxDQUFDQSxRQUFRQSxDQUFDQSxDQUFDQTtRQUV0RUEsR0FBR0EsQ0FBQ0EsV0FBV0EsR0FBR0EsSUFBSUEsaUJBQWlCQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUV0REEsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsUUFBUUEsR0FBR0EsR0FBR0EsQ0FBQ0E7UUFFMUJBLEdBQUdBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLEdBQVVBLENBQUNBLEVBQUVBLENBQUNBLEdBQUdBLENBQUNBLEVBQUdBLENBQUNBLEVBQUVBLEVBQUVBLENBQUNBO1lBQ3BDQSxJQUFJQSxDQUFDQSxHQUFVQSxJQUFJQSxDQUFDQSxFQUFFQSxHQUFDQSxDQUFDQSxHQUFDQSxDQUFDQSxHQUFDQSxDQUFDQSxDQUFDQTtZQUM3QkEsSUFBSUEsQ0FBQ0EsR0FBZUEsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsWUFBWUEsRUFBRUEsQ0FBQ0E7WUFFOUNBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLE1BQU1BLENBQUNBO1lBQ3pCQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtZQUNSQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFDQSxNQUFNQSxDQUFDQTtZQUV6QkEsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsUUFBUUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0E7UUFDN0JBLENBQUNBO1FBRURBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFFBQVFBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBO1FBRXJDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUM5QkEsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsTUFBTUEsQ0FBQ0EsVUFBVUEsQ0FBQ0E7UUFDcENBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLEdBQUdBLE1BQU1BLENBQUNBLFdBQVdBLENBQUNBO1FBRXRDQSxPQUFPQSxDQUFDQSxHQUFHQSxDQUFDQSxXQUFXQSxFQUFFQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxRQUFRQSxDQUFDQSxDQUFDQTtRQUM3Q0EsT0FBT0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsUUFBUUEsRUFBRUEsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0E7UUFDdkNBLE9BQU9BLENBQUNBLEdBQUdBLENBQUNBLE9BQU9BLEVBQUVBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO1FBRWhDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxFQUFFQSxDQUFDQTtRQUVuQkEsTUFBTUEsQ0FBQ0EsUUFBUUEsR0FBR0EsVUFBQ0EsS0FBYUEsSUFBS0EsT0FBQUEsS0FBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBcEJBLENBQW9CQSxDQUFDQTtRQUUxREEsSUFBSUEsQ0FBQ0EsR0FBR0EsR0FBR0EsSUFBSUEscUJBQXFCQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxFQUFFQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUN0REEsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsS0FBS0EsRUFBRUEsQ0FBQ0E7SUFDbEJBLENBQUNBO0lBR09ELG9DQUFJQSxHQUFaQSxVQUFhQSxFQUFTQTtRQUVyQkUsSUFBSUEsQ0FBQ0EsT0FBT0EsSUFBSUEsS0FBS0EsQ0FBQ0E7UUFDdEJBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBO1FBQ3JDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxJQUFJQSxDQUFDQSxPQUFPQSxDQUFDQSxHQUFDQSxHQUFHQSxDQUFDQTtRQUNoREEsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsR0FBQ0EsR0FBR0EsQ0FBQ0E7UUFFaERBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBO0lBQ3BCQSxDQUFDQTtJQUVNRix3Q0FBUUEsR0FBZkEsVUFBZ0JBLEtBQW9CQTtRQUFwQkcscUJBQW9CQSxHQUFwQkEsWUFBb0JBO1FBRW5DQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUNoQkEsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDaEJBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLE1BQU1BLENBQUNBLFVBQVVBLENBQUNBO1FBQ3BDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxHQUFHQSxNQUFNQSxDQUFDQSxXQUFXQSxDQUFDQTtJQUN2Q0EsQ0FBQ0E7SUFDRkgsNEJBQUNBO0FBQURBLENBNUVBLEFBNEVDQSxJQUFBIiwiZmlsZSI6Im1hdGVyaWFscy9Db2xvck11bHRpUGFzc01hdFRlc3QuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL3JvYmJhdGVtYW4vV2Vic3Rvcm1Qcm9qZWN0cy9hd2F5anMtc3RhZ2VnbC8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlld1x0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvbnRhaW5lcnMvVmlld1wiKTtcbmltcG9ydCBWZWN0b3IzRFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb3JlL2dlb20vVmVjdG9yM0RcIik7XG5pbXBvcnQgVVJMTG9hZGVyXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb3JlL25ldC9VUkxMb2FkZXJcIik7XG5pbXBvcnQgVVJMUmVxdWVzdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29yZS9uZXQvVVJMUmVxdWVzdFwiKTtcbmltcG9ydCBNZXNoXHRcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZW50aXRpZXMvTWVzaFwiKTtcbmltcG9ydCBQb2ludExpZ2h0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9lbnRpdGllcy9Qb2ludExpZ2h0XCIpO1xuaW1wb3J0IEV2ZW50XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2V2ZW50cy9FdmVudFwiKTtcbmltcG9ydCBTdGF0aWNMaWdodFBpY2tlclx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9tYXRlcmlhbHMvbGlnaHRwaWNrZXJzL1N0YXRpY0xpZ2h0UGlja2VyXCIpO1xuaW1wb3J0IFByaW1pdGl2ZVRvcnVzUHJlZmFiXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3ByZWZhYnMvUHJpbWl0aXZlVG9ydXNQcmVmYWJcIik7XG5pbXBvcnQgUmVxdWVzdEFuaW1hdGlvbkZyYW1lXHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9SZXF1ZXN0QW5pbWF0aW9uRnJhbWVcIik7XG5pbXBvcnQgRGVidWdcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvRGVidWdcIik7XG5cbmltcG9ydCBEZWZhdWx0UmVuZGVyZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3JlbmRlci9EZWZhdWx0UmVuZGVyZXJcIik7XG5pbXBvcnQgVHJpYW5nbGVNZXRob2RNYXRlcmlhbFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL1RyaWFuZ2xlTWV0aG9kTWF0ZXJpYWxcIik7XG5cbmNsYXNzIENvbG9yTXVsdGlQYXNzTWF0VGVzdFxue1xuXHRwcml2YXRlIHZpZXc6Vmlldztcblx0cHJpdmF0ZSB0b3J1czpQcmltaXRpdmVUb3J1c1ByZWZhYjtcblx0cHJpdmF0ZSBsaWdodDpQb2ludExpZ2h0O1xuXHRwcml2YXRlIHJhZjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5cdHByaXZhdGUgY291bnRlcjpudW1iZXIgPSAwO1xuXHRwcml2YXRlIGNlbnRlcjpWZWN0b3IzRCA9IG5ldyBWZWN0b3IzRCgpO1xuXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdERlYnVnLlRIUk9XX0VSUk9SUyA9IGZhbHNlO1xuXHRcdERlYnVnLkxPR19QSV9FUlJPUlMgPSBmYWxzZTtcblxuXHRcdHRoaXMubGlnaHQgPSBuZXcgUG9pbnRMaWdodCgpO1xuXHRcdHRoaXMudmlldyA9IG5ldyBWaWV3KG5ldyBEZWZhdWx0UmVuZGVyZXIoKSk7XG5cdFx0dGhpcy52aWV3LmNhbWVyYS56ID0gLTEwMDA7XG5cdFx0dGhpcy52aWV3LmJhY2tncm91bmRDb2xvciA9IDB4MDAwMDAwO1xuXHRcdHRoaXMudG9ydXMgPSBuZXcgUHJpbWl0aXZlVG9ydXNQcmVmYWIoNTAgLCAxMCwgMzIgLCAzMiAsIGZhbHNlKTtcblxuXHRcdHZhciBsOm51bWJlciA9IDIwO1xuXHRcdHZhciByYWRpdXM6bnVtYmVyID0gNTAwO1xuXG5cdFx0dmFyIG1hdDpUcmlhbmdsZU1ldGhvZE1hdGVyaWFsID0gbmV3IFRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwoMHhmZjAwMDApO1xuXG5cdFx0bWF0LmxpZ2h0UGlja2VyID0gbmV3IFN0YXRpY0xpZ2h0UGlja2VyKFt0aGlzLmxpZ2h0XSk7XG5cblx0XHR0aGlzLnRvcnVzLm1hdGVyaWFsID0gbWF0O1xuXG5cdFx0Zm9yICh2YXIgYzpudW1iZXIgPSAwOyBjIDwgbCA7IGMrKykge1xuXHRcdFx0dmFyIHQ6bnVtYmVyID0gTWF0aC5QSSoyKmMvbDtcblx0XHRcdHZhciBtOk1lc2ggPSA8TWVzaD4gdGhpcy50b3J1cy5nZXROZXdPYmplY3QoKTtcblxuXHRcdFx0bS54ID0gTWF0aC5jb3ModCkqcmFkaXVzO1xuXHRcdFx0bS55ID0gMDtcblx0XHRcdG0ueiA9IE1hdGguc2luKHQpKnJhZGl1cztcblxuXHRcdFx0dGhpcy52aWV3LnNjZW5lLmFkZENoaWxkKG0pO1xuXHRcdH1cblxuXHRcdHRoaXMudmlldy5zY2VuZS5hZGRDaGlsZCh0aGlzLmxpZ2h0KTtcblxuXHRcdHRoaXMudmlldy55ID0gdGhpcy52aWV3LnggPSAwO1xuXHRcdHRoaXMudmlldy53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRcdHRoaXMudmlldy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cblx0XHRjb25zb2xlLmxvZyhcInJlbmRlcmVyIFwiLCB0aGlzLnZpZXcucmVuZGVyZXIpO1xuXHRcdGNvbnNvbGUubG9nKFwic2NlbmUgXCIsIHRoaXMudmlldy5zY2VuZSk7XG5cdFx0Y29uc29sZS5sb2coXCJ2aWV3IFwiLCB0aGlzLnZpZXcpO1xuXG5cdFx0dGhpcy52aWV3LnJlbmRlcigpO1xuXG5cdFx0d2luZG93Lm9ucmVzaXplID0gKGV2ZW50OlVJRXZlbnQpID0+IHRoaXMub25SZXNpemUoZXZlbnQpO1xuXG5cdFx0dGhpcy5yYWYgPSBuZXcgUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMudGljaywgdGhpcyk7XG5cdFx0dGhpcy5yYWYuc3RhcnQoKTtcblx0fVxuXG5cblx0cHJpdmF0ZSB0aWNrKGR0Om51bWJlcilcblx0e1xuXHRcdHRoaXMuY291bnRlciArPSAwLjAwNTtcblx0XHR0aGlzLnZpZXcuY2FtZXJhLmxvb2tBdCh0aGlzLmNlbnRlcik7XG5cdFx0dGhpcy52aWV3LmNhbWVyYS54ID0gTWF0aC5jb3ModGhpcy5jb3VudGVyKSo4MDA7XG5cdFx0dGhpcy52aWV3LmNhbWVyYS56ID0gTWF0aC5zaW4odGhpcy5jb3VudGVyKSo4MDA7XG5cblx0XHR0aGlzLnZpZXcucmVuZGVyKCk7XG5cdH1cblxuXHRwdWJsaWMgb25SZXNpemUoZXZlbnQ6VUlFdmVudCA9IG51bGwpXG5cdHtcblx0XHR0aGlzLnZpZXcueSA9IDA7XG5cdFx0dGhpcy52aWV3LnggPSAwO1xuXHRcdHRoaXMudmlldy53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRcdHRoaXMudmlldy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdH1cbn0iXX0= \ No newline at end of file diff --git a/tests/materials/ColorMultiPassMatTest.ts b/tests/materials/ColorMultiPassMatTest.ts new file mode 100644 index 00000000..3666d107 --- /dev/null +++ b/tests/materials/ColorMultiPassMatTest.ts @@ -0,0 +1,92 @@ +import View = require("awayjs-core/lib/containers/View"); +import Vector3D = require("awayjs-core/lib/core/geom/Vector3D"); +import URLLoader = require("awayjs-core/lib/core/net/URLLoader"); +import URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +import Mesh = require("awayjs-core/lib/entities/Mesh"); +import PointLight = require("awayjs-core/lib/entities/PointLight"); +import Event = require("awayjs-core/lib/events/Event"); +import StaticLightPicker = require("awayjs-core/lib/materials/lightpickers/StaticLightPicker"); +import PrimitiveTorusPrefab = require("awayjs-core/lib/prefabs/PrimitiveTorusPrefab"); +import RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +import Debug = require("awayjs-core/lib/utils/Debug"); + +import DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +import TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); + +class ColorMultiPassMatTest +{ + private view:View; + private torus:PrimitiveTorusPrefab; + private light:PointLight; + private raf:RequestAnimationFrame; + private counter:number = 0; + private center:Vector3D = new Vector3D(); + + constructor() + { + Debug.THROW_ERRORS = false; + Debug.LOG_PI_ERRORS = false; + + this.light = new PointLight(); + this.view = new View(new DefaultRenderer()); + this.view.camera.z = -1000; + this.view.backgroundColor = 0x000000; + this.torus = new PrimitiveTorusPrefab(50 , 10, 32 , 32 , false); + + var l:number = 20; + var radius:number = 500; + + var mat:TriangleMethodMaterial = new TriangleMethodMaterial(0xff0000); + + mat.lightPicker = new StaticLightPicker([this.light]); + + this.torus.material = mat; + + for (var c:number = 0; c < l ; c++) { + var t:number = Math.PI*2*c/l; + var m:Mesh = this.torus.getNewObject(); + + m.x = Math.cos(t)*radius; + m.y = 0; + m.z = Math.sin(t)*radius; + + this.view.scene.addChild(m); + } + + this.view.scene.addChild(this.light); + + this.view.y = this.view.x = 0; + this.view.width = window.innerWidth; + this.view.height = window.innerHeight; + + console.log("renderer ", this.view.renderer); + console.log("scene ", this.view.scene); + console.log("view ", this.view); + + this.view.render(); + + window.onresize = (event:UIEvent) => this.onResize(event); + + this.raf = new RequestAnimationFrame(this.tick, this); + this.raf.start(); + } + + + private tick(dt:number) + { + this.counter += 0.005; + this.view.camera.lookAt(this.center); + this.view.camera.x = Math.cos(this.counter)*800; + this.view.camera.z = Math.sin(this.counter)*800; + + this.view.render(); + } + + public onResize(event:UIEvent = null) + { + this.view.y = 0; + this.view.x = 0; + this.view.width = window.innerWidth; + this.view.height = window.innerHeight; + } +} \ No newline at end of file diff --git a/tests/materials/TextureMultiPassMatTest.js b/tests/materials/TextureMultiPassMatTest.js new file mode 100755 index 00000000..3091b488 --- /dev/null +++ b/tests/materials/TextureMultiPassMatTest.js @@ -0,0 +1,83 @@ +var View = require("awayjs-core/lib/containers/View"); +var Vector3D = require("awayjs-core/lib/core/geom/Vector3D"); +var URLLoader = require("awayjs-core/lib/core/net/URLLoader"); +var URLLoaderDataFormat = require("awayjs-core/lib/core/net/URLLoaderDataFormat"); +var URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +var PointLight = require("awayjs-core/lib/entities/PointLight"); +var Event = require("awayjs-core/lib/events/Event"); +var ParserUtils = require("awayjs-core/lib/parsers/ParserUtils"); +var PrimitiveTorusPrefab = require("awayjs-core/lib/prefabs/PrimitiveTorusPrefab"); +var ImageTexture = require("awayjs-core/lib/textures/ImageTexture"); +var RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +var Debug = require("awayjs-core/lib/utils/Debug"); +var DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +var TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); +var TextureMultiPassMatTest = (function () { + function TextureMultiPassMatTest() { + var _this = this; + this.counter = 0; + this.center = new Vector3D(); + var pngURLRequest = new URLRequest('assets/256x256.png'); + this.pngLoader = new URLLoader(); + this.pngLoader.dataFormat = URLLoaderDataFormat.BLOB; + this.pngLoader.addEventListener(Event.COMPLETE, function (event) { return _this.pngLoaderComplete(event); }); + this.pngLoader.load(pngURLRequest); + } + TextureMultiPassMatTest.prototype.pngLoaderComplete = function (event) { + var _this = this; + var imageLoader = event.target; + this.image = ParserUtils.blobToImage(imageLoader.data); + this.image.onload = function (event) { return _this.onLoadComplete(event); }; + }; + TextureMultiPassMatTest.prototype.onLoadComplete = function (event) { + var _this = this; + Debug.THROW_ERRORS = false; + Debug.LOG_PI_ERRORS = false; + this.light = new PointLight(); + this.view = new View(new DefaultRenderer()); + this.view.camera.z = -1000; + this.view.backgroundColor = 0x000000; + this.torus = new PrimitiveTorusPrefab(50, 10, 32, 32, false); + var l = 20; + var radius = 500; + var ts = new ImageTexture(this.image, false); + var mat = new TriangleMethodMaterial(ts); + this.torus.material = mat; + for (var c = 0; c < l; c++) { + var t = Math.PI * 2 * c / l; + var m = this.torus.getNewObject(); + m.x = Math.cos(t) * radius; + m.y = 0; + m.z = Math.sin(t) * radius; + this.view.scene.addChild(m); + } + this.view.scene.addChild(this.light); + this.view.y = this.view.x = 0; + this.view.width = window.innerWidth; + this.view.height = window.innerHeight; + console.log("renderer ", this.view.renderer); + console.log("scene ", this.view.scene); + console.log("view ", this.view); + this.view.render(); + window.onresize = function (event) { return _this.onResize(event); }; + this.raf = new RequestAnimationFrame(this.tick, this); + this.raf.start(); + }; + TextureMultiPassMatTest.prototype.tick = function (dt) { + this.counter += 0.005; + this.view.camera.lookAt(this.center); + this.view.camera.x = Math.cos(this.counter) * 800; + this.view.camera.z = Math.sin(this.counter) * 800; + this.view.render(); + }; + TextureMultiPassMatTest.prototype.onResize = function (event) { + if (event === void 0) { event = null; } + this.view.y = 0; + this.view.x = 0; + this.view.width = window.innerWidth; + this.view.height = window.innerHeight; + }; + return TextureMultiPassMatTest; +})(); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1hdGVyaWFscy90ZXh0dXJlbXVsdGlwYXNzbWF0dGVzdC50cyJdLCJuYW1lcyI6WyJUZXh0dXJlTXVsdGlQYXNzTWF0VGVzdCIsIlRleHR1cmVNdWx0aVBhc3NNYXRUZXN0LmNvbnN0cnVjdG9yIiwiVGV4dHVyZU11bHRpUGFzc01hdFRlc3QucG5nTG9hZGVyQ29tcGxldGUiLCJUZXh0dXJlTXVsdGlQYXNzTWF0VGVzdC5vbkxvYWRDb21wbGV0ZSIsIlRleHR1cmVNdWx0aVBhc3NNYXRUZXN0LnRpY2siLCJUZXh0dXJlTXVsdGlQYXNzTWF0VGVzdC5vblJlc2l6ZSJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTyxJQUFJLFdBQWlCLGlDQUFpQyxDQUFDLENBQUM7QUFDL0QsSUFBTyxRQUFRLFdBQWdCLG9DQUFvQyxDQUFDLENBQUM7QUFDckUsSUFBTyxTQUFTLFdBQWUsb0NBQW9DLENBQUMsQ0FBQztBQUNyRSxJQUFPLG1CQUFtQixXQUFhLDhDQUE4QyxDQUFDLENBQUM7QUFDdkYsSUFBTyxVQUFVLFdBQWUscUNBQXFDLENBQUMsQ0FBQztBQUV2RSxJQUFPLFVBQVUsV0FBZSxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3ZFLElBQU8sS0FBSyxXQUFnQiw4QkFBOEIsQ0FBQyxDQUFDO0FBQzVELElBQU8sV0FBVyxXQUFlLHFDQUFxQyxDQUFDLENBQUM7QUFDeEUsSUFBTyxvQkFBb0IsV0FBYSw4Q0FBOEMsQ0FBQyxDQUFDO0FBQ3hGLElBQU8sWUFBWSxXQUFlLHVDQUF1QyxDQUFDLENBQUM7QUFDM0UsSUFBTyxxQkFBcUIsV0FBWSw2Q0FBNkMsQ0FBQyxDQUFDO0FBQ3ZGLElBQU8sS0FBSyxXQUFnQiw2QkFBNkIsQ0FBQyxDQUFDO0FBRTNELElBQU8sZUFBZSxXQUFjLGdEQUFnRCxDQUFDLENBQUM7QUFDdEYsSUFBTyxzQkFBc0IsV0FBWSxxREFBcUQsQ0FBQyxDQUFDO0FBRWhHLElBQU0sdUJBQXVCO0lBVzVCQSxTQVhLQSx1QkFBdUJBO1FBQTdCQyxpQkE2RkNBO1FBdkZRQSxZQUFPQSxHQUFVQSxDQUFDQSxDQUFDQTtRQUNuQkEsV0FBTUEsR0FBWUEsSUFBSUEsUUFBUUEsRUFBRUEsQ0FBQ0E7UUFNeENBLElBQUlBLGFBQWFBLEdBQWNBLElBQUlBLFVBQVVBLENBQUNBLG9CQUFvQkEsQ0FBQ0EsQ0FBQ0E7UUFFcEVBLElBQUlBLENBQUNBLFNBQVNBLEdBQUdBLElBQUlBLFNBQVNBLEVBQUVBLENBQUNBO1FBQ2pDQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQSxVQUFVQSxHQUFHQSxtQkFBbUJBLENBQUNBLElBQUlBLENBQUNBO1FBQ3JEQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQSxnQkFBZ0JBLENBQUNBLEtBQUtBLENBQUNBLFFBQVFBLEVBQUVBLFVBQUNBLEtBQVdBLElBQUtBLE9BQUFBLEtBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBN0JBLENBQTZCQSxDQUFDQSxDQUFDQTtRQUNoR0EsSUFBSUEsQ0FBQ0EsU0FBU0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsYUFBYUEsQ0FBQ0EsQ0FBQ0E7SUFDcENBLENBQUNBO0lBRU9ELG1EQUFpQkEsR0FBekJBLFVBQTBCQSxLQUFXQTtRQUFyQ0UsaUJBS0NBO1FBSEFBLElBQUlBLFdBQVdBLEdBQXlCQSxLQUFLQSxDQUFDQSxNQUFNQSxDQUFDQTtRQUNyREEsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsV0FBV0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsV0FBV0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFDdkRBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLE1BQU1BLEdBQUdBLFVBQUNBLEtBQUtBLElBQUtBLE9BQUFBLEtBQUlBLENBQUNBLGNBQWNBLENBQUNBLEtBQUtBLENBQUNBLEVBQTFCQSxDQUEwQkEsQ0FBQ0E7SUFDM0RBLENBQUNBO0lBRU9GLGdEQUFjQSxHQUF0QkEsVUFBdUJBLEtBQUtBO1FBQTVCRyxpQkE4Q0NBO1FBNUNBQSxLQUFLQSxDQUFDQSxZQUFZQSxHQUFPQSxLQUFLQSxDQUFDQTtRQUMvQkEsS0FBS0EsQ0FBQ0EsYUFBYUEsR0FBTUEsS0FBS0EsQ0FBQ0E7UUFFL0JBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLElBQUlBLFVBQVVBLEVBQUVBLENBQUNBO1FBQzlCQSxJQUFJQSxDQUFDQSxJQUFJQSxHQUFHQSxJQUFJQSxJQUFJQSxDQUFDQSxJQUFJQSxlQUFlQSxFQUFFQSxDQUFDQSxDQUFDQTtRQUM1Q0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsSUFBSUEsQ0FBQ0E7UUFDM0JBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLGVBQWVBLEdBQUdBLFFBQVFBLENBQUNBO1FBQ3JDQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxvQkFBb0JBLENBQUNBLEVBQUVBLEVBQUdBLEVBQUVBLEVBQUVBLEVBQUVBLEVBQUdBLEVBQUVBLEVBQUdBLEtBQUtBLENBQUNBLENBQUNBO1FBRWhFQSxJQUFJQSxDQUFDQSxHQUFVQSxFQUFFQSxDQUFDQTtRQUNsQkEsSUFBSUEsTUFBTUEsR0FBVUEsR0FBR0EsQ0FBQ0E7UUFFeEJBLElBQUlBLEVBQUVBLEdBQWdCQSxJQUFJQSxZQUFZQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxFQUFFQSxLQUFLQSxDQUFDQSxDQUFDQTtRQUMxREEsSUFBSUEsR0FBR0EsR0FBMEJBLElBQUlBLHNCQUFzQkEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsQ0FBQ0E7UUFFaEVBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFFBQVFBLEdBQUdBLEdBQUdBLENBQUNBO1FBRTFCQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFVQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxDQUFDQSxFQUFHQSxDQUFDQSxFQUFFQSxFQUFFQSxDQUFDQTtZQUNwQ0EsSUFBSUEsQ0FBQ0EsR0FBVUEsSUFBSUEsQ0FBQ0EsRUFBRUEsR0FBQ0EsQ0FBQ0EsR0FBQ0EsQ0FBQ0EsR0FBQ0EsQ0FBQ0EsQ0FBQ0E7WUFDN0JBLElBQUlBLENBQUNBLEdBQWVBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFlBQVlBLEVBQUVBLENBQUNBO1lBRTlDQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFDQSxNQUFNQSxDQUFDQTtZQUN6QkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDUkEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsTUFBTUEsQ0FBQ0E7WUFFekJBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFFBQVFBLENBQUNBLENBQUNBLENBQUNBLENBQUNBO1FBQzdCQSxDQUFDQTtRQUVEQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxRQUFRQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxDQUFDQTtRQUVyQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDOUJBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLE1BQU1BLENBQUNBLFVBQVVBLENBQUNBO1FBQ3BDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxHQUFHQSxNQUFNQSxDQUFDQSxXQUFXQSxDQUFDQTtRQUV0Q0EsT0FBT0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsV0FBV0EsRUFBRUEsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsQ0FBQ0E7UUFDN0NBLE9BQU9BLENBQUNBLEdBQUdBLENBQUNBLFFBQVFBLEVBQUVBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBO1FBQ3ZDQSxPQUFPQSxDQUFDQSxHQUFHQSxDQUFDQSxPQUFPQSxFQUFFQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUVoQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsRUFBRUEsQ0FBQ0E7UUFFbkJBLE1BQU1BLENBQUNBLFFBQVFBLEdBQUdBLFVBQUNBLEtBQWFBLElBQUtBLE9BQUFBLEtBQUlBLENBQUNBLFFBQVFBLENBQUNBLEtBQUtBLENBQUNBLEVBQXBCQSxDQUFvQkEsQ0FBQ0E7UUFFMURBLElBQUlBLENBQUNBLEdBQUdBLEdBQUdBLElBQUlBLHFCQUFxQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFDdERBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLEtBQUtBLEVBQUVBLENBQUNBO0lBQ2xCQSxDQUFDQTtJQUVPSCxzQ0FBSUEsR0FBWkEsVUFBYUEsRUFBU0E7UUFFckJJLElBQUlBLENBQUNBLE9BQU9BLElBQUlBLEtBQUtBLENBQUNBO1FBQ3RCQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQTtRQUNyQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsT0FBT0EsQ0FBQ0EsR0FBQ0EsR0FBR0EsQ0FBQ0E7UUFDaERBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLElBQUlBLENBQUNBLE9BQU9BLENBQUNBLEdBQUNBLEdBQUdBLENBQUNBO1FBRWhEQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxFQUFFQSxDQUFDQTtJQUNwQkEsQ0FBQ0E7SUFFTUosMENBQVFBLEdBQWZBLFVBQWdCQSxLQUFvQkE7UUFBcEJLLHFCQUFvQkEsR0FBcEJBLFlBQW9CQTtRQUVuQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDaEJBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1FBQ2hCQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxNQUFNQSxDQUFDQSxVQUFVQSxDQUFDQTtRQUNwQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsR0FBR0EsTUFBTUEsQ0FBQ0EsV0FBV0EsQ0FBQ0E7SUFDdkNBLENBQUNBO0lBQ0ZMLDhCQUFDQTtBQUFEQSxDQTdGQSxBQTZGQ0EsSUFBQSIsImZpbGUiOiJtYXRlcmlhbHMvVGV4dHVyZU11bHRpUGFzc01hdFRlc3QuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL3JvYmJhdGVtYW4vV2Vic3Rvcm1Qcm9qZWN0cy9hd2F5anMtc3RhZ2VnbC8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlld1x0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvbnRhaW5lcnMvVmlld1wiKTtcbmltcG9ydCBWZWN0b3IzRFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb3JlL2dlb20vVmVjdG9yM0RcIik7XG5pbXBvcnQgVVJMTG9hZGVyXHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb3JlL25ldC9VUkxMb2FkZXJcIik7XG5pbXBvcnQgVVJMTG9hZGVyRGF0YUZvcm1hdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb3JlL25ldC9VUkxMb2FkZXJEYXRhRm9ybWF0XCIpO1xuaW1wb3J0IFVSTFJlcXVlc3RcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvcmUvbmV0L1VSTFJlcXVlc3RcIik7XG5pbXBvcnQgTWVzaFx0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2VudGl0aWVzL01lc2hcIik7XG5pbXBvcnQgUG9pbnRMaWdodFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZW50aXRpZXMvUG9pbnRMaWdodFwiKTtcbmltcG9ydCBFdmVudFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9ldmVudHMvRXZlbnRcIik7XG5pbXBvcnQgUGFyc2VyVXRpbHNcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3BhcnNlcnMvUGFyc2VyVXRpbHNcIik7XG5pbXBvcnQgUHJpbWl0aXZlVG9ydXNQcmVmYWJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvcHJlZmFicy9QcmltaXRpdmVUb3J1c1ByZWZhYlwiKTtcbmltcG9ydCBJbWFnZVRleHR1cmVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL0ltYWdlVGV4dHVyZVwiKTtcbmltcG9ydCBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL1JlcXVlc3RBbmltYXRpb25GcmFtZVwiKTtcbmltcG9ydCBEZWJ1Z1x0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9EZWJ1Z1wiKTtcblxuaW1wb3J0IERlZmF1bHRSZW5kZXJlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcmVuZGVyL0RlZmF1bHRSZW5kZXJlclwiKTtcbmltcG9ydCBUcmlhbmdsZU1ldGhvZE1hdGVyaWFsXHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvVHJpYW5nbGVNZXRob2RNYXRlcmlhbFwiKTtcblxuY2xhc3MgVGV4dHVyZU11bHRpUGFzc01hdFRlc3Rcbntcblx0cHJpdmF0ZSB2aWV3OlZpZXc7XG5cdHByaXZhdGUgdG9ydXM6UHJpbWl0aXZlVG9ydXNQcmVmYWI7XG5cdHByaXZhdGUgbGlnaHQ6UG9pbnRMaWdodDtcblx0cHJpdmF0ZSByYWY6UmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuXHRwcml2YXRlIGNvdW50ZXI6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSBjZW50ZXI6VmVjdG9yM0QgPSBuZXcgVmVjdG9yM0QoKTtcblx0cHJpdmF0ZSBwbmdMb2FkZXIgICA6IFVSTExvYWRlcjtcblx0cHJpdmF0ZSBpbWFnZTpIVE1MSW1hZ2VFbGVtZW50O1xuXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdHZhciBwbmdVUkxSZXF1ZXN0OlVSTFJlcXVlc3QgPSBuZXcgVVJMUmVxdWVzdCgnYXNzZXRzLzI1NngyNTYucG5nJyk7XG5cblx0XHR0aGlzLnBuZ0xvYWRlciA9IG5ldyBVUkxMb2FkZXIoKTtcblx0XHR0aGlzLnBuZ0xvYWRlci5kYXRhRm9ybWF0ID0gVVJMTG9hZGVyRGF0YUZvcm1hdC5CTE9CO1xuXHRcdHRoaXMucG5nTG9hZGVyLmFkZEV2ZW50TGlzdGVuZXIoRXZlbnQuQ09NUExFVEUsIChldmVudDpFdmVudCkgPT4gdGhpcy5wbmdMb2FkZXJDb21wbGV0ZShldmVudCkpO1xuXHRcdHRoaXMucG5nTG9hZGVyLmxvYWQocG5nVVJMUmVxdWVzdCk7XG5cdH1cblxuXHRwcml2YXRlIHBuZ0xvYWRlckNvbXBsZXRlKGV2ZW50OkV2ZW50KVxuXHR7XG5cdFx0dmFyIGltYWdlTG9hZGVyOlVSTExvYWRlciA9IDxVUkxMb2FkZXI+IGV2ZW50LnRhcmdldDtcblx0XHR0aGlzLmltYWdlID0gUGFyc2VyVXRpbHMuYmxvYlRvSW1hZ2UoaW1hZ2VMb2FkZXIuZGF0YSk7XG5cdFx0dGhpcy5pbWFnZS5vbmxvYWQgPSAoZXZlbnQpID0+IHRoaXMub25Mb2FkQ29tcGxldGUoZXZlbnQpO1xuXHR9XG5cblx0cHJpdmF0ZSBvbkxvYWRDb21wbGV0ZShldmVudClcblx0e1xuXHRcdERlYnVnLlRIUk9XX0VSUk9SUyAgICAgPSBmYWxzZTtcblx0XHREZWJ1Zy5MT0dfUElfRVJST1JTICAgID0gZmFsc2U7XG5cblx0XHR0aGlzLmxpZ2h0ID0gbmV3IFBvaW50TGlnaHQoKTtcblx0XHR0aGlzLnZpZXcgPSBuZXcgVmlldyhuZXcgRGVmYXVsdFJlbmRlcmVyKCkpO1xuXHRcdHRoaXMudmlldy5jYW1lcmEueiA9IC0xMDAwO1xuXHRcdHRoaXMudmlldy5iYWNrZ3JvdW5kQ29sb3IgPSAweDAwMDAwMDtcblx0XHR0aGlzLnRvcnVzID0gbmV3IFByaW1pdGl2ZVRvcnVzUHJlZmFiKDUwICwgMTAsIDMyICwgMzIgLCBmYWxzZSk7XG5cblx0XHR2YXIgbDpudW1iZXIgPSAyMDtcblx0XHR2YXIgcmFkaXVzOm51bWJlciA9IDUwMDtcblxuXHRcdHZhciB0czpJbWFnZVRleHR1cmUgPSBuZXcgSW1hZ2VUZXh0dXJlKHRoaXMuaW1hZ2UsIGZhbHNlKTtcblx0XHR2YXIgbWF0OlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwgPSBuZXcgVHJpYW5nbGVNZXRob2RNYXRlcmlhbCh0cyk7XG5cblx0XHR0aGlzLnRvcnVzLm1hdGVyaWFsID0gbWF0O1xuXG5cdFx0Zm9yICh2YXIgYzpudW1iZXIgPSAwOyBjIDwgbCA7IGMrKykge1xuXHRcdFx0dmFyIHQ6bnVtYmVyID0gTWF0aC5QSSoyKmMvbDtcblx0XHRcdHZhciBtOk1lc2ggPSA8TWVzaD4gdGhpcy50b3J1cy5nZXROZXdPYmplY3QoKTtcblxuXHRcdFx0bS54ID0gTWF0aC5jb3ModCkqcmFkaXVzO1xuXHRcdFx0bS55ID0gMDtcblx0XHRcdG0ueiA9IE1hdGguc2luKHQpKnJhZGl1cztcblxuXHRcdFx0dGhpcy52aWV3LnNjZW5lLmFkZENoaWxkKG0pO1xuXHRcdH1cblxuXHRcdHRoaXMudmlldy5zY2VuZS5hZGRDaGlsZCh0aGlzLmxpZ2h0KTtcblxuXHRcdHRoaXMudmlldy55ID0gdGhpcy52aWV3LnggPSAwO1xuXHRcdHRoaXMudmlldy53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRcdHRoaXMudmlldy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cblx0XHRjb25zb2xlLmxvZyhcInJlbmRlcmVyIFwiLCB0aGlzLnZpZXcucmVuZGVyZXIpO1xuXHRcdGNvbnNvbGUubG9nKFwic2NlbmUgXCIsIHRoaXMudmlldy5zY2VuZSk7XG5cdFx0Y29uc29sZS5sb2coXCJ2aWV3IFwiLCB0aGlzLnZpZXcpO1xuXG5cdFx0dGhpcy52aWV3LnJlbmRlcigpO1xuXG5cdFx0d2luZG93Lm9ucmVzaXplID0gKGV2ZW50OlVJRXZlbnQpID0+IHRoaXMub25SZXNpemUoZXZlbnQpO1xuXG5cdFx0dGhpcy5yYWYgPSBuZXcgUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMudGljaywgdGhpcyk7XG5cdFx0dGhpcy5yYWYuc3RhcnQoKTtcblx0fVxuXG5cdHByaXZhdGUgdGljayhkdDpudW1iZXIpXG5cdHtcblx0XHR0aGlzLmNvdW50ZXIgKz0gMC4wMDU7XG5cdFx0dGhpcy52aWV3LmNhbWVyYS5sb29rQXQodGhpcy5jZW50ZXIpO1xuXHRcdHRoaXMudmlldy5jYW1lcmEueCA9IE1hdGguY29zKHRoaXMuY291bnRlcikqODAwO1xuXHRcdHRoaXMudmlldy5jYW1lcmEueiA9IE1hdGguc2luKHRoaXMuY291bnRlcikqODAwO1xuXG5cdFx0dGhpcy52aWV3LnJlbmRlcigpO1xuXHR9XG5cblx0cHVibGljIG9uUmVzaXplKGV2ZW50OlVJRXZlbnQgPSBudWxsKVxuXHR7XG5cdFx0dGhpcy52aWV3LnkgPSAwO1xuXHRcdHRoaXMudmlldy54ID0gMDtcblx0XHR0aGlzLnZpZXcud2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcblx0XHR0aGlzLnZpZXcuaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuXHR9XG59Il19 \ No newline at end of file diff --git a/tests/materials/TextureMultiPassMatTest.ts b/tests/materials/TextureMultiPassMatTest.ts new file mode 100644 index 00000000..9cf06eba --- /dev/null +++ b/tests/materials/TextureMultiPassMatTest.ts @@ -0,0 +1,111 @@ +import View = require("awayjs-core/lib/containers/View"); +import Vector3D = require("awayjs-core/lib/core/geom/Vector3D"); +import URLLoader = require("awayjs-core/lib/core/net/URLLoader"); +import URLLoaderDataFormat = require("awayjs-core/lib/core/net/URLLoaderDataFormat"); +import URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +import Mesh = require("awayjs-core/lib/entities/Mesh"); +import PointLight = require("awayjs-core/lib/entities/PointLight"); +import Event = require("awayjs-core/lib/events/Event"); +import ParserUtils = require("awayjs-core/lib/parsers/ParserUtils"); +import PrimitiveTorusPrefab = require("awayjs-core/lib/prefabs/PrimitiveTorusPrefab"); +import ImageTexture = require("awayjs-core/lib/textures/ImageTexture"); +import RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +import Debug = require("awayjs-core/lib/utils/Debug"); + +import DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +import TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); + +class TextureMultiPassMatTest +{ + private view:View; + private torus:PrimitiveTorusPrefab; + private light:PointLight; + private raf:RequestAnimationFrame; + private counter:number = 0; + private center:Vector3D = new Vector3D(); + private pngLoader : URLLoader; + private image:HTMLImageElement; + + constructor() + { + var pngURLRequest:URLRequest = new URLRequest('assets/256x256.png'); + + this.pngLoader = new URLLoader(); + this.pngLoader.dataFormat = URLLoaderDataFormat.BLOB; + this.pngLoader.addEventListener(Event.COMPLETE, (event:Event) => this.pngLoaderComplete(event)); + this.pngLoader.load(pngURLRequest); + } + + private pngLoaderComplete(event:Event) + { + var imageLoader:URLLoader = event.target; + this.image = ParserUtils.blobToImage(imageLoader.data); + this.image.onload = (event) => this.onLoadComplete(event); + } + + private onLoadComplete(event) + { + Debug.THROW_ERRORS = false; + Debug.LOG_PI_ERRORS = false; + + this.light = new PointLight(); + this.view = new View(new DefaultRenderer()); + this.view.camera.z = -1000; + this.view.backgroundColor = 0x000000; + this.torus = new PrimitiveTorusPrefab(50 , 10, 32 , 32 , false); + + var l:number = 20; + var radius:number = 500; + + var ts:ImageTexture = new ImageTexture(this.image, false); + var mat:TriangleMethodMaterial = new TriangleMethodMaterial(ts); + + this.torus.material = mat; + + for (var c:number = 0; c < l ; c++) { + var t:number = Math.PI*2*c/l; + var m:Mesh = this.torus.getNewObject(); + + m.x = Math.cos(t)*radius; + m.y = 0; + m.z = Math.sin(t)*radius; + + this.view.scene.addChild(m); + } + + this.view.scene.addChild(this.light); + + this.view.y = this.view.x = 0; + this.view.width = window.innerWidth; + this.view.height = window.innerHeight; + + console.log("renderer ", this.view.renderer); + console.log("scene ", this.view.scene); + console.log("view ", this.view); + + this.view.render(); + + window.onresize = (event:UIEvent) => this.onResize(event); + + this.raf = new RequestAnimationFrame(this.tick, this); + this.raf.start(); + } + + private tick(dt:number) + { + this.counter += 0.005; + this.view.camera.lookAt(this.center); + this.view.camera.x = Math.cos(this.counter)*800; + this.view.camera.z = Math.sin(this.counter)*800; + + this.view.render(); + } + + public onResize(event:UIEvent = null) + { + this.view.y = 0; + this.view.x = 0; + this.view.width = window.innerWidth; + this.view.height = window.innerHeight; + } +} \ No newline at end of file diff --git a/tests/object3d/TorusObject3DDemo.js b/tests/object3d/TorusObject3DDemo.js new file mode 100755 index 00000000..592759cd --- /dev/null +++ b/tests/object3d/TorusObject3DDemo.js @@ -0,0 +1,107 @@ +var View = require("awayjs-core/lib/containers/View"); +var URLLoader = require("awayjs-core/lib/core/net/URLLoader"); +var URLLoaderDataFormat = require("awayjs-core/lib/core/net/URLLoaderDataFormat"); +var URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +var PointLight = require("awayjs-core/lib/entities/PointLight"); +var AwayEvent = require("awayjs-core/lib/events/Event"); +var StaticLightPicker = require("awayjs-core/lib/materials/lightpickers/StaticLightPicker"); +var ParserUtils = require("awayjs-core/lib/parsers/ParserUtils"); +var PrimitiveTorusPrefab = require("awayjs-core/lib/prefabs/PrimitiveTorusPrefab"); +var ImageTexture = require("awayjs-core/lib/textures/ImageTexture"); +var RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +var Debug = require("awayjs-core/lib/utils/Debug"); +var DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +var TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); +var TorusObject3DDemo = (function () { + function TorusObject3DDemo() { + var _this = this; + this.t = 0; + this.tPos = 0; + this.radius = 1000; + this.follow = true; + Debug.THROW_ERRORS = false; + Debug.LOG_PI_ERRORS = false; + this.meshes = new Array(); + this.light = new PointLight(); + this.view = new View(new DefaultRenderer()); + this.pointLight = new PointLight(); + this.lightPicker = new StaticLightPicker([this.pointLight]); + this.view.scene.addChild(this.pointLight); + var perspectiveLens = this.view.camera.projection; + perspectiveLens.fieldOfView = 75; + this.view.camera.z = 0; + this.view.backgroundColor = 0x000000; + this.view.backgroundAlpha = 1; + this.torus = new PrimitiveTorusPrefab(150, 50, 32, 32, false); + var l = 10; + for (var c = 0; c < l; c++) { + var t = Math.PI * 2 * c / l; + var mesh = this.torus.getNewObject(); + mesh.x = Math.cos(t) * this.radius; + mesh.y = 0; + mesh.z = Math.sin(t) * this.radius; + this.view.scene.addChild(mesh); + this.meshes.push(mesh); + } + this.view.scene.addChild(this.light); + this.raf = new RequestAnimationFrame(this.tick, this); + this.raf.start(); + this.onResize(); + document.onmousedown = function (event) { return _this.followObject(event); }; + window.onresize = function (event) { return _this.onResize(event); }; + this.loadResources(); + } + TorusObject3DDemo.prototype.loadResources = function () { + var _this = this; + var urlRequest = new URLRequest("assets/custom_uv_horizontal.png"); + var urlLoader = new URLLoader(); + urlLoader.dataFormat = URLLoaderDataFormat.BLOB; + urlLoader.addEventListener(AwayEvent.COMPLETE, function (event) { return _this.imageCompleteHandler(event); }); + urlLoader.load(urlRequest); + }; + TorusObject3DDemo.prototype.imageCompleteHandler = function (event) { + var _this = this; + var urlLoader = event.target; + this._image = ParserUtils.blobToImage(urlLoader.data); + this._image.onload = function (event) { return _this.onImageLoadComplete(event); }; + }; + TorusObject3DDemo.prototype.onImageLoadComplete = function (event) { + var matTx = new TriangleMethodMaterial(new ImageTexture(this._image, false), true, true, false); + matTx.lightPicker = this.lightPicker; + for (var c = 0; c < this.meshes.length; c++) + this.meshes[c].material = matTx; + }; + TorusObject3DDemo.prototype.tick = function (dt) { + this.tPos += .02; + for (var c = 0; c < this.meshes.length; c++) { + var objPos = Math.PI * 2 * c / this.meshes.length; + this.t += .005; + var s = 1.2 + Math.sin(this.t + objPos); + this.meshes[c].rotationY += 2 * (c / this.meshes.length); + this.meshes[c].rotationX += 2 * (c / this.meshes.length); + this.meshes[c].rotationZ += 2 * (c / this.meshes.length); + this.meshes[c].scaleX = this.meshes[c].scaleY = this.meshes[c].scaleZ = s; + this.meshes[c].x = Math.cos(objPos + this.tPos) * this.radius; + this.meshes[c].y = Math.sin(this.t) * 500; + this.meshes[c].z = Math.sin(objPos + this.tPos) * this.radius; + } + //this.view.camera.y = Math.sin( this.tPos ) * 1500; + if (this.follow) + this.view.camera.lookAt(this.meshes[0].transform.position); + this.view.camera.y = Math.sin(this.tPos) * 1500; + this.view.render(); + }; + TorusObject3DDemo.prototype.onResize = function (event) { + if (event === void 0) { event = null; } + this.view.y = 0; + this.view.x = 0; + this.view.width = window.innerWidth; + this.view.height = window.innerHeight; + }; + TorusObject3DDemo.prototype.followObject = function (e) { + this.follow = !this.follow; + }; + return TorusObject3DDemo; +})(); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9iamVjdDNkL3RvcnVzb2JqZWN0M2RkZW1vLnRzIl0sIm5hbWVzIjpbIlRvcnVzT2JqZWN0M0REZW1vIiwiVG9ydXNPYmplY3QzRERlbW8uY29uc3RydWN0b3IiLCJUb3J1c09iamVjdDNERGVtby5sb2FkUmVzb3VyY2VzIiwiVG9ydXNPYmplY3QzRERlbW8uaW1hZ2VDb21wbGV0ZUhhbmRsZXIiLCJUb3J1c09iamVjdDNERGVtby5vbkltYWdlTG9hZENvbXBsZXRlIiwiVG9ydXNPYmplY3QzRERlbW8udGljayIsIlRvcnVzT2JqZWN0M0REZW1vLm9uUmVzaXplIiwiVG9ydXNPYmplY3QzRERlbW8uZm9sbG93T2JqZWN0Il0sIm1hcHBpbmdzIjoiQUFBQSxJQUFPLElBQUksV0FBaUIsaUNBQWlDLENBQUMsQ0FBQztBQUMvRCxJQUFPLFNBQVMsV0FBZSxvQ0FBb0MsQ0FBQyxDQUFDO0FBQ3JFLElBQU8sbUJBQW1CLFdBQWEsOENBQThDLENBQUMsQ0FBQztBQUN2RixJQUFPLFVBQVUsV0FBZSxxQ0FBcUMsQ0FBQyxDQUFDO0FBRXZFLElBQU8sVUFBVSxXQUFlLHFDQUFxQyxDQUFDLENBQUM7QUFDdkUsSUFBTyxTQUFTLFdBQWUsOEJBQThCLENBQUMsQ0FBQztBQUMvRCxJQUFPLGlCQUFpQixXQUFhLDBEQUEwRCxDQUFDLENBQUM7QUFDakcsSUFBTyxXQUFXLFdBQWUscUNBQXFDLENBQUMsQ0FBQztBQUN4RSxJQUFPLG9CQUFvQixXQUFhLDhDQUE4QyxDQUFDLENBQUM7QUFFeEYsSUFBTyxZQUFZLFdBQWUsdUNBQXVDLENBQUMsQ0FBQztBQUMzRSxJQUFPLHFCQUFxQixXQUFZLDZDQUE2QyxDQUFDLENBQUM7QUFDdkYsSUFBTyxLQUFLLFdBQWdCLDZCQUE2QixDQUFDLENBQUM7QUFFM0QsSUFBTyxlQUFlLFdBQWMsZ0RBQWdELENBQUMsQ0FBQztBQUV0RixJQUFPLHNCQUFzQixXQUFZLHFEQUFxRCxDQUFDLENBQUM7QUFFaEcsSUFBTSxpQkFBaUI7SUFtQnRCQSxTQW5CS0EsaUJBQWlCQTtRQUF2QkMsaUJBMklDQTtRQWxJUUEsTUFBQ0EsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFDYkEsU0FBSUEsR0FBVUEsQ0FBQ0EsQ0FBQ0E7UUFDaEJBLFdBQU1BLEdBQVVBLElBQUlBLENBQUNBO1FBQ3JCQSxXQUFNQSxHQUFXQSxJQUFJQSxDQUFDQTtRQVM3QkEsS0FBS0EsQ0FBQ0EsWUFBWUEsR0FBR0EsS0FBS0EsQ0FBQ0E7UUFDM0JBLEtBQUtBLENBQUNBLGFBQWFBLEdBQUdBLEtBQUtBLENBQUNBO1FBRTVCQSxJQUFJQSxDQUFDQSxNQUFNQSxHQUFHQSxJQUFJQSxLQUFLQSxFQUFRQSxDQUFDQTtRQUNoQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsSUFBSUEsVUFBVUEsRUFBRUEsQ0FBQ0E7UUFDOUJBLElBQUlBLENBQUNBLElBQUlBLEdBQUdBLElBQUlBLElBQUlBLENBQUNBLElBQUlBLGVBQWVBLEVBQUVBLENBQUNBLENBQUNBO1FBQzVDQSxJQUFJQSxDQUFDQSxVQUFVQSxHQUFHQSxJQUFJQSxVQUFVQSxFQUFFQSxDQUFDQTtRQUNuQ0EsSUFBSUEsQ0FBQ0EsV0FBV0EsR0FBR0EsSUFBSUEsaUJBQWlCQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxVQUFVQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUU1REEsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsUUFBUUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsVUFBVUEsQ0FBQ0EsQ0FBQ0E7UUFFMUNBLElBQUlBLGVBQWVBLEdBQWlEQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxVQUFVQSxDQUFDQTtRQUNoR0EsZUFBZUEsQ0FBQ0EsV0FBV0EsR0FBR0EsRUFBRUEsQ0FBQ0E7UUFFakNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1FBQ3ZCQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxlQUFlQSxHQUFHQSxRQUFRQSxDQUFDQTtRQUNyQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZUFBZUEsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDOUJBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLElBQUlBLG9CQUFvQkEsQ0FBQ0EsR0FBR0EsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsS0FBS0EsQ0FBQ0EsQ0FBQ0E7UUFFOURBLElBQUlBLENBQUNBLEdBQVVBLEVBQUVBLENBQUNBO1FBR2xCQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFZQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxDQUFDQSxFQUFHQSxDQUFDQSxFQUFFQSxFQUFFQSxDQUFDQTtZQUV0Q0EsSUFBSUEsQ0FBQ0EsR0FBVUEsSUFBSUEsQ0FBQ0EsRUFBRUEsR0FBR0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFFbkNBLElBQUlBLElBQUlBLEdBQWVBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFlBQVlBLEVBQUVBLENBQUNBO1lBQ2pEQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQTtZQUNqQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7WUFDWEEsSUFBSUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7WUFFakNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFFBQVFBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO1lBQy9CQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUV4QkEsQ0FBQ0E7UUFFREEsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsUUFB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QUNBLEdBQUdBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLE1BQU1BLEVBQUdBLENBQUNBLEVBQUdBLEVBQUVBLENBQUNBO1lBQ3ZEQSxJQUFJQSxNQUFNQSxHQUFRQSxJQUFJQSxDQUFDQSxFQUFFQSxHQUFDQSxDQUFDQSxHQUFDQSxDQUFDQSxHQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxNQUFNQSxDQUFDQTtZQUVqREEsSUFBSUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsSUFBSUEsQ0FBQ0E7WUFDZkEsSUFBSUEsQ0FBQ0EsR0FBVUEsR0FBR0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsTUFBTUEsQ0FBQ0EsQ0FBQ0E7WUFFL0NBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBLENBQUNBLFNBQVNBLElBQUlBLENBQUNBLEdBQUNBLENBQUNBLENBQUNBLEdBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLE1BQU1BLENBQUNBLENBQUNBO1lBQ3JEQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxTQUFTQSxJQUFJQSxDQUFDQSxHQUFDQSxDQUFDQSxDQUFDQSxHQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQTtZQUNyREEsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsU0FBU0EsSUFBSUEsQ0FBQ0EsR0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0E7WUFDckRBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBLENBQUNBLE1BQU1BLEdBQUdBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBLENBQUNBLE1BQU1BLEdBQUdBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBLENBQUNBLE1BQU1BLEdBQUdBLENBQUNBLENBQUNBO1lBQzFFQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxHQUFHQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxNQUFNQSxHQUFHQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxHQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQTtZQUM1REEsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsR0FBR0EsQ0FBQ0E7WUFDeENBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLE1BQU1BLEdBQUdBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLEdBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBO1FBQzdEQSxDQUFDQTtRQUVEQSxBQUVBQSxvREFGb0RBO1FBRXBEQSxFQUFFQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQTtZQUNmQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxTQUFTQSxDQUFDQSxRQUFRQSxDQUFDQSxDQUFDQTtRQUU1REEsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0E7UUFFaERBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLEVBQUVBLENBQUNBO0lBQ3BCQSxDQUFDQTtJQUVNTCxvQ0FBUUEsR0FBZkEsVUFBZ0JBLEtBQW9CQTtRQUFwQk0scUJBQW9CQSxHQUFwQkEsWUFBb0JBO1FBRW5DQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUNoQkEsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFFaEJBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLE1BQU1BLENBQUNBLFVBQVVBLENBQUNBO1FBQ3BDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxHQUFHQSxNQUFNQSxDQUFDQSxXQUFXQSxDQUFDQTtJQUN2Q0EsQ0FBQ0E7SUFFTU4sd0NBQVlBLEdBQW5CQSxVQUFvQkEsQ0FBQ0E7UUFFcEJPLElBQUlBLENBQUNBLE1BQU1BLEdBQUdBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBO0lBQzVCQSxDQUFDQTtJQUNGUCx3QkFBQ0E7QUFBREEsQ0EzSUEsQUEySUNBLElBQUEiLCJmaWxlIjoib2JqZWN0M2QvVG9ydXNPYmplY3QzRERlbW8uanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL3JvYmJhdGVtYW4vV2Vic3Rvcm1Qcm9qZWN0cy9hd2F5anMtc3RhZ2VnbC8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlld1x0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvbnRhaW5lcnMvVmlld1wiKTtcbmltcG9ydCBVUkxMb2FkZXJcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvcmUvbmV0L1VSTExvYWRlclwiKTtcbmltcG9ydCBVUkxMb2FkZXJEYXRhRm9ybWF0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvcmUvbmV0L1VSTExvYWRlckRhdGFGb3JtYXRcIik7XG5pbXBvcnQgVVJMUmVxdWVzdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29yZS9uZXQvVVJMUmVxdWVzdFwiKTtcbmltcG9ydCBNZXNoXHRcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZW50aXRpZXMvTWVzaFwiKTtcbmltcG9ydCBQb2ludExpZ2h0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9lbnRpdGllcy9Qb2ludExpZ2h0XCIpO1xuaW1wb3J0IEF3YXlFdmVudFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZXZlbnRzL0V2ZW50XCIpO1xuaW1wb3J0IFN0YXRpY0xpZ2h0UGlja2VyXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL21hdGVyaWFscy9saWdodHBpY2tlcnMvU3RhdGljTGlnaHRQaWNrZXJcIik7XG5pbXBvcnQgUGFyc2VyVXRpbHNcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3BhcnNlcnMvUGFyc2VyVXRpbHNcIik7XG5pbXBvcnQgUHJpbWl0aXZlVG9ydXNQcmVmYWJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvcHJlZmFicy9QcmltaXRpdmVUb3J1c1ByZWZhYlwiKTtcbmltcG9ydCBQZXJzcGVjdGl2ZVByb2plY3Rpb25cdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3Byb2plY3Rpb25zL1BlcnNwZWN0aXZlUHJvamVjdGlvblwiKTtcbmltcG9ydCBJbWFnZVRleHR1cmVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL0ltYWdlVGV4dHVyZVwiKTtcbmltcG9ydCBSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL1JlcXVlc3RBbmltYXRpb25GcmFtZVwiKTtcbmltcG9ydCBEZWJ1Z1x0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9EZWJ1Z1wiKTtcblxuaW1wb3J0IERlZmF1bHRSZW5kZXJlclx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvcmVuZGVyL0RlZmF1bHRSZW5kZXJlclwiKTtcbmltcG9ydCBDb250ZXh0R0xQcm9maWxlXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9zdGFnZWdsL0NvbnRleHRHTFByb2ZpbGVcIik7XG5pbXBvcnQgVHJpYW5nbGVNZXRob2RNYXRlcmlhbFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL1RyaWFuZ2xlTWV0aG9kTWF0ZXJpYWxcIik7XG5cbmNsYXNzIFRvcnVzT2JqZWN0M0REZW1vXG57XG5cdHByaXZhdGUgdmlldzpWaWV3O1xuXHRwcml2YXRlIHRvcnVzOlByaW1pdGl2ZVRvcnVzUHJlZmFiO1xuXG5cdHByaXZhdGUgbGlnaHQ6UG9pbnRMaWdodDtcblx0cHJpdmF0ZSByYWY6UmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuXHRwcml2YXRlIG1lc2hlczpBcnJheTxNZXNoPjtcblxuXHRwcml2YXRlIHQ6bnVtYmVyID0gMDtcblx0cHJpdmF0ZSB0UG9zOm51bWJlciA9IDA7XG5cdHByaXZhdGUgcmFkaXVzOm51bWJlciA9IDEwMDA7XG5cdHByaXZhdGUgZm9sbG93OmJvb2xlYW4gPSB0cnVlO1xuXG5cdHByaXZhdGUgcG9pbnRMaWdodDpQb2ludExpZ2h0O1xuXHRwcml2YXRlIGxpZ2h0UGlja2VyOlN0YXRpY0xpZ2h0UGlja2VyO1xuXG5cdHByaXZhdGUgX2ltYWdlOkhUTUxJbWFnZUVsZW1lbnQ7XG5cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdFx0RGVidWcuVEhST1dfRVJST1JTID0gZmFsc2U7XG5cdFx0RGVidWcuTE9HX1BJX0VSUk9SUyA9IGZhbHNlO1xuXG5cdFx0dGhpcy5tZXNoZXMgPSBuZXcgQXJyYXk8TWVzaD4oKTtcblx0XHR0aGlzLmxpZ2h0ID0gbmV3IFBvaW50TGlnaHQoKTtcblx0XHR0aGlzLnZpZXcgPSBuZXcgVmlldyhuZXcgRGVmYXVsdFJlbmRlcmVyKCkpO1xuXHRcdHRoaXMucG9pbnRMaWdodCA9IG5ldyBQb2ludExpZ2h0KCk7XG5cdFx0dGhpcy5saWdodFBpY2tlciA9IG5ldyBTdGF0aWNMaWdodFBpY2tlcihbdGhpcy5wb2ludExpZ2h0XSk7XG5cblx0XHR0aGlzLnZpZXcuc2NlbmUuYWRkQ2hpbGQodGhpcy5wb2ludExpZ2h0KTtcblxuXHRcdHZhciBwZXJzcGVjdGl2ZUxlbnM6UGVyc3BlY3RpdmVQcm9qZWN0aW9uID0gPFBlcnNwZWN0aXZlUHJvamVjdGlvbj4gdGhpcy52aWV3LmNhbWVyYS5wcm9qZWN0aW9uO1xuXHRcdHBlcnNwZWN0aXZlTGVucy5maWVsZE9mVmlldyA9IDc1O1xuXG5cdFx0dGhpcy52aWV3LmNhbWVyYS56ID0gMDtcblx0XHR0aGlzLnZpZXcuYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cdFx0dGhpcy52aWV3LmJhY2tncm91bmRBbHBoYSA9IDE7XG5cdFx0dGhpcy50b3J1cyA9IG5ldyBQcmltaXRpdmVUb3J1c1ByZWZhYigxNTAsIDUwLCAzMiwgMzIsIGZhbHNlKTtcblxuXHRcdHZhciBsOm51bWJlciA9IDEwO1xuXHRcdC8vdmFyIHJhZGl1czpudW1iZXIgPSAxMDAwO1xuXG5cdFx0Zm9yICh2YXIgYyA6IG51bWJlciA9IDA7IGMgPCBsIDsgYysrKSB7XG5cblx0XHRcdHZhciB0IDogbnVtYmVyPU1hdGguUEkgKiAyICogYyAvIGw7XG5cblx0XHRcdHZhciBtZXNoOk1lc2ggPSA8TWVzaD4gdGhpcy50b3J1cy5nZXROZXdPYmplY3QoKTtcblx0XHRcdG1lc2gueCA9IE1hdGguY29zKHQpKnRoaXMucmFkaXVzO1xuXHRcdFx0bWVzaC55ID0gMDtcblx0XHRcdG1lc2gueiA9IE1hdGguc2luKHQpKnRoaXMucmFkaXVzO1xuXG5cdFx0XHR0aGlzLnZpZXcuc2NlbmUuYWRkQ2hpbGQobWVzaCk7XG5cdFx0XHR0aGlzLm1lc2hlcy5wdXNoKG1lc2gpO1xuXG5cdFx0fVxuXG5cdFx0dGhpcy52aWV3LnNjZW5lLmFkZENoaWxkKHRoaXMubGlnaHQpO1xuXG5cdFx0dGhpcy5yYWYgPSBuZXcgUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMudGljaywgdGhpcyk7XG5cdFx0dGhpcy5yYWYuc3RhcnQoKTtcblx0XHR0aGlzLm9uUmVzaXplKCk7XG5cblx0XHRkb2N1bWVudC5vbm1vdXNlZG93biA9IChldmVudDpNb3VzZUV2ZW50KSA9PiB0aGlzLmZvbGxvd09iamVjdChldmVudCk7XG5cblx0XHR3aW5kb3cub25yZXNpemUgPSAoZXZlbnQ6VUlFdmVudCkgPT4gdGhpcy5vblJlc2l6ZShldmVudCk7XG5cblx0XHR0aGlzLmxvYWRSZXNvdXJjZXMoKTtcblx0fVxuXG5cdHByaXZhdGUgbG9hZFJlc291cmNlcygpXG5cdHtcblx0XHR2YXIgdXJsUmVxdWVzdDpVUkxSZXF1ZXN0ID0gbmV3IFVSTFJlcXVlc3QoXCJhc3NldHMvY3VzdG9tX3V2X2hvcml6b250YWwucG5nXCIpO1xuXHRcdHZhciB1cmxMb2FkZXI6VVJMTG9hZGVyID0gbmV3IFVSTExvYWRlcigpO1xuXHRcdHVybExvYWRlci5kYXRhRm9ybWF0ID0gVVJMTG9hZGVyRGF0YUZvcm1hdC5CTE9CO1xuXHRcdHVybExvYWRlci5hZGRFdmVudExpc3RlbmVyKEF3YXlFdmVudC5DT01QTEVURSwgKGV2ZW50OkF3YXlFdmVudCkgPT4gdGhpcy5pbWFnZUNvbXBsZXRlSGFuZGxlcihldmVudCkpO1xuXHRcdHVybExvYWRlci5sb2FkKHVybFJlcXVlc3QpO1xuXHR9XG5cblx0cHJpdmF0ZSBpbWFnZUNvbXBsZXRlSGFuZGxlcihldmVudDpBd2F5RXZlbnQpXG5cdHtcblx0XHR2YXIgdXJsTG9hZGVyOlVSTExvYWRlciA9IDxVUkxMb2FkZXI+IGV2ZW50LnRhcmdldDtcblxuXHRcdHRoaXMuX2ltYWdlID0gUGFyc2VyVXRpbHMuYmxvYlRvSW1hZ2UodXJsTG9hZGVyLmRhdGEpO1xuXHRcdHRoaXMuX2ltYWdlLm9ubG9hZCA9IChldmVudDpFdmVudCkgPT4gdGhpcy5vbkltYWdlTG9hZENvbXBsZXRlKGV2ZW50KTtcblxuXHR9XG5cblx0cHJpdmF0ZSBvbkltYWdlTG9hZENvbXBsZXRlKGV2ZW50OkV2ZW50KVxuXHR7XG5cdFx0dmFyIG1hdFR4OiBUcmlhbmdsZU1ldGhvZE1hdGVyaWFsID0gbmV3IFRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwobmV3IEltYWdlVGV4dHVyZSh0aGlzLl9pbWFnZSwgZmFsc2UpLCB0cnVlLCB0cnVlLCBmYWxzZSk7XG5cdFx0bWF0VHgubGlnaHRQaWNrZXIgPSAgdGhpcy5saWdodFBpY2tlcjtcblxuXHRcdGZvciAodmFyIGM6bnVtYmVyID0gMDsgYyA8IHRoaXMubWVzaGVzLmxlbmd0aDsgYyArKylcblx0XHRcdHRoaXMubWVzaGVzW2NdLm1hdGVyaWFsID0gbWF0VHg7XG5cdH1cblxuXHRwcml2YXRlIHRpY2soZHQ6bnVtYmVyKVxuXHR7XG5cdFx0dGhpcy50UG9zICs9IC4wMjtcblxuXHRcdGZvciAodmFyIGM6bnVtYmVyID0gMCA7IGMgPCB0aGlzLm1lc2hlcy5sZW5ndGggOyBjICsrKSB7XG5cdFx0XHR2YXIgb2JqUG9zOm51bWJlcj1NYXRoLlBJKjIqYy90aGlzLm1lc2hlcy5sZW5ndGg7XG5cblx0XHRcdHRoaXMudCArPSAuMDA1O1xuXHRcdFx0dmFyIHM6bnVtYmVyID0gMS4yICsgTWF0aC5zaW4odGhpcy50ICsgb2JqUG9zKTtcblxuXHRcdFx0dGhpcy5tZXNoZXNbY10ucm90YXRpb25ZICs9IDIqKGMvdGhpcy5tZXNoZXMubGVuZ3RoKTtcblx0XHRcdHRoaXMubWVzaGVzW2NdLnJvdGF0aW9uWCArPSAyKihjL3RoaXMubWVzaGVzLmxlbmd0aCk7XG5cdFx0XHR0aGlzLm1lc2hlc1tjXS5yb3RhdGlvblogKz0gMiooYy90aGlzLm1lc2hlcy5sZW5ndGgpO1xuXHRcdFx0dGhpcy5tZXNoZXNbY10uc2NhbGVYID0gdGhpcy5tZXNoZXNbY10uc2NhbGVZID0gdGhpcy5tZXNoZXNbY10uc2NhbGVaID0gcztcblx0XHRcdHRoaXMubWVzaGVzW2NdLnggPSBNYXRoLmNvcyhvYmpQb3MgKyB0aGlzLnRQb3MpKnRoaXMucmFkaXVzO1xuXHRcdFx0dGhpcy5tZXNoZXNbY10ueSA9IE1hdGguc2luKHRoaXMudCkqNTAwO1xuXHRcdFx0dGhpcy5tZXNoZXNbY10ueiA9IE1hdGguc2luKG9ialBvcyArIHRoaXMudFBvcykqdGhpcy5yYWRpdXM7XG5cdFx0fVxuXG5cdFx0Ly90aGlzLnZpZXcuY2FtZXJhLnkgPSBNYXRoLnNpbiggdGhpcy50UG9zICkgKiAxNTAwO1xuXG5cdFx0aWYgKHRoaXMuZm9sbG93KVxuXHRcdFx0dGhpcy52aWV3LmNhbWVyYS5sb29rQXQodGhpcy5tZXNoZXNbMF0udHJhbnNmb3JtLnBvc2l0aW9uKTtcblxuXHRcdHRoaXMudmlldy5jYW1lcmEueSA9IE1hdGguc2luKHRoaXMudFBvcykgKiAxNTAwO1xuXG5cdFx0dGhpcy52aWV3LnJlbmRlcigpO1xuXHR9XG5cblx0cHVibGljIG9uUmVzaXplKGV2ZW50OlVJRXZlbnQgPSBudWxsKVxuXHR7XG5cdFx0dGhpcy52aWV3LnkgPSAwO1xuXHRcdHRoaXMudmlldy54ID0gMDtcblxuXHRcdHRoaXMudmlldy53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRcdHRoaXMudmlldy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdH1cblxuXHRwdWJsaWMgZm9sbG93T2JqZWN0KGUpXG5cdHtcblx0XHR0aGlzLmZvbGxvdyA9ICF0aGlzLmZvbGxvdztcblx0fVxufSJdfQ== \ No newline at end of file diff --git a/tests/object3d/TorusObject3DDemo.ts b/tests/object3d/TorusObject3DDemo.ts new file mode 100644 index 00000000..9f5405d0 --- /dev/null +++ b/tests/object3d/TorusObject3DDemo.ts @@ -0,0 +1,159 @@ +import View = require("awayjs-core/lib/containers/View"); +import URLLoader = require("awayjs-core/lib/core/net/URLLoader"); +import URLLoaderDataFormat = require("awayjs-core/lib/core/net/URLLoaderDataFormat"); +import URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +import Mesh = require("awayjs-core/lib/entities/Mesh"); +import PointLight = require("awayjs-core/lib/entities/PointLight"); +import AwayEvent = require("awayjs-core/lib/events/Event"); +import StaticLightPicker = require("awayjs-core/lib/materials/lightpickers/StaticLightPicker"); +import ParserUtils = require("awayjs-core/lib/parsers/ParserUtils"); +import PrimitiveTorusPrefab = require("awayjs-core/lib/prefabs/PrimitiveTorusPrefab"); +import PerspectiveProjection = require("awayjs-core/lib/projections/PerspectiveProjection"); +import ImageTexture = require("awayjs-core/lib/textures/ImageTexture"); +import RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +import Debug = require("awayjs-core/lib/utils/Debug"); + +import DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +import ContextGLProfile = require("awayjs-stagegl/lib/core/stagegl/ContextGLProfile"); +import TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); + +class TorusObject3DDemo +{ + private view:View; + private torus:PrimitiveTorusPrefab; + + private light:PointLight; + private raf:RequestAnimationFrame; + private meshes:Array; + + private t:number = 0; + private tPos:number = 0; + private radius:number = 1000; + private follow:boolean = true; + + private pointLight:PointLight; + private lightPicker:StaticLightPicker; + + private _image:HTMLImageElement; + + constructor() + { + Debug.THROW_ERRORS = false; + Debug.LOG_PI_ERRORS = false; + + this.meshes = new Array(); + this.light = new PointLight(); + this.view = new View(new DefaultRenderer()); + this.pointLight = new PointLight(); + this.lightPicker = new StaticLightPicker([this.pointLight]); + + this.view.scene.addChild(this.pointLight); + + var perspectiveLens:PerspectiveProjection = this.view.camera.projection; + perspectiveLens.fieldOfView = 75; + + this.view.camera.z = 0; + this.view.backgroundColor = 0x000000; + this.view.backgroundAlpha = 1; + this.torus = new PrimitiveTorusPrefab(150, 50, 32, 32, false); + + var l:number = 10; + //var radius:number = 1000; + + for (var c : number = 0; c < l ; c++) { + + var t : number=Math.PI * 2 * c / l; + + var mesh:Mesh = this.torus.getNewObject(); + mesh.x = Math.cos(t)*this.radius; + mesh.y = 0; + mesh.z = Math.sin(t)*this.radius; + + this.view.scene.addChild(mesh); + this.meshes.push(mesh); + + } + + this.view.scene.addChild(this.light); + + this.raf = new RequestAnimationFrame(this.tick, this); + this.raf.start(); + this.onResize(); + + document.onmousedown = (event:MouseEvent) => this.followObject(event); + + window.onresize = (event:UIEvent) => this.onResize(event); + + this.loadResources(); + } + + private loadResources() + { + var urlRequest:URLRequest = new URLRequest("assets/custom_uv_horizontal.png"); + var urlLoader:URLLoader = new URLLoader(); + urlLoader.dataFormat = URLLoaderDataFormat.BLOB; + urlLoader.addEventListener(AwayEvent.COMPLETE, (event:AwayEvent) => this.imageCompleteHandler(event)); + urlLoader.load(urlRequest); + } + + private imageCompleteHandler(event:AwayEvent) + { + var urlLoader:URLLoader = event.target; + + this._image = ParserUtils.blobToImage(urlLoader.data); + this._image.onload = (event:Event) => this.onImageLoadComplete(event); + + } + + private onImageLoadComplete(event:Event) + { + var matTx: TriangleMethodMaterial = new TriangleMethodMaterial(new ImageTexture(this._image, false), true, true, false); + matTx.lightPicker = this.lightPicker; + + for (var c:number = 0; c < this.meshes.length; c ++) + this.meshes[c].material = matTx; + } + + private tick(dt:number) + { + this.tPos += .02; + + for (var c:number = 0 ; c < this.meshes.length ; c ++) { + var objPos:number=Math.PI*2*c/this.meshes.length; + + this.t += .005; + var s:number = 1.2 + Math.sin(this.t + objPos); + + this.meshes[c].rotationY += 2*(c/this.meshes.length); + this.meshes[c].rotationX += 2*(c/this.meshes.length); + this.meshes[c].rotationZ += 2*(c/this.meshes.length); + this.meshes[c].scaleX = this.meshes[c].scaleY = this.meshes[c].scaleZ = s; + this.meshes[c].x = Math.cos(objPos + this.tPos)*this.radius; + this.meshes[c].y = Math.sin(this.t)*500; + this.meshes[c].z = Math.sin(objPos + this.tPos)*this.radius; + } + + //this.view.camera.y = Math.sin( this.tPos ) * 1500; + + if (this.follow) + this.view.camera.lookAt(this.meshes[0].transform.position); + + this.view.camera.y = Math.sin(this.tPos) * 1500; + + this.view.render(); + } + + public onResize(event:UIEvent = null) + { + this.view.y = 0; + this.view.x = 0; + + this.view.width = window.innerWidth; + this.view.height = window.innerHeight; + } + + public followObject(e) + { + this.follow = !this.follow; + } +} \ No newline at end of file diff --git a/tests/object3d/TorusVortex.js b/tests/object3d/TorusVortex.js new file mode 100755 index 00000000..8f2f037e --- /dev/null +++ b/tests/object3d/TorusVortex.js @@ -0,0 +1,82 @@ +var View = require("awayjs-core/lib/containers/View"); +var BlendMode = require("awayjs-core/lib/core/base/BlendMode"); +var Vector3D = require("awayjs-core/lib/core/geom/Vector3D"); +var URLLoader = require("awayjs-core/lib/core/net/URLLoader"); +var URLLoaderDataFormat = require("awayjs-core/lib/core/net/URLLoaderDataFormat"); +var URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +var Event = require("awayjs-core/lib/events/Event"); +var ParserUtils = require("awayjs-core/lib/parsers/ParserUtils"); +var PrimitiveCubePrefab = require("awayjs-core/lib/prefabs/PrimitiveCubePrefab"); +var PrimitiveTorusPrefab = require("awayjs-core/lib/prefabs/PrimitiveTorusPrefab"); +var PerspectiveProjection = require("awayjs-core/lib/projections/PerspectiveProjection"); +var ImageTexture = require("awayjs-core/lib/textures/ImageTexture"); +var RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +var Debug = require("awayjs-core/lib/utils/Debug"); +var DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +var TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); +var TorusVortex = (function () { + function TorusVortex() { + Debug.THROW_ERRORS = false; + this._view = new View(new DefaultRenderer()); + this._view.backgroundColor = 0x000000; + this._view.camera.x = 130; + this._view.camera.y = 0; + this._view.camera.z = 0; + this._cameraAxis = new Vector3D(0, 0, 1); + this._view.camera.projection = new PerspectiveProjection(120); + this._view.camera.projection.near = 0.1; + this._cube = new PrimitiveCubePrefab(20.0, 20.0, 20.0); + this._torus = new PrimitiveTorusPrefab(150, 80, 32, 16, true); + this.loadResources(); + } + TorusVortex.prototype.loadResources = function () { + var _this = this; + var urlRequest = new URLRequest("assets/130909wall_big.png"); + var urlLoader = new URLLoader(); + urlLoader.dataFormat = URLLoaderDataFormat.BLOB; + urlLoader.addEventListener(Event.COMPLETE, function (event) { return _this.imageCompleteHandler(event); }); + urlLoader.load(urlRequest); + }; + TorusVortex.prototype.imageCompleteHandler = function (event) { + var _this = this; + var imageLoader = event.target; + this._image = ParserUtils.blobToImage(imageLoader.data); + this._image.onload = function (event) { return _this.onLoadComplete(event); }; + }; + TorusVortex.prototype.onLoadComplete = function (event) { + var _this = this; + var matTx = new TriangleMethodMaterial(new ImageTexture(this._image, false), true, true, false); + matTx.blendMode = BlendMode.ADD; + matTx.bothSides = true; + this._torus.material = matTx; + this._cube.material = matTx; + this._mesh = this._torus.getNewObject(); + this._mesh2 = this._cube.getNewObject(); + this._mesh2.x = 130; + this._mesh2.z = 40; + this._view.scene.addChild(this._mesh); + this._view.scene.addChild(this._mesh2); + this._raf = new RequestAnimationFrame(this.render, this); + this._raf.start(); + window.onresize = function (event) { return _this.onResize(event); }; + this.onResize(); + }; + TorusVortex.prototype.render = function (dt) { + if (dt === void 0) { dt = null; } + this._view.camera.rotate(this._cameraAxis, 1); + this._mesh.rotationY += 1; + this._mesh2.rotationX += 0.4; + this._mesh2.rotationY += 0.4; + this._view.render(); + }; + TorusVortex.prototype.onResize = function (event) { + if (event === void 0) { event = null; } + this._view.y = 0; + this._view.x = 0; + this._view.width = window.innerWidth; + this._view.height = window.innerHeight; + }; + return TorusVortex; +})(); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9iamVjdDNkL3RvcnVzdm9ydGV4LnRzIl0sIm5hbWVzIjpbIlRvcnVzVm9ydGV4IiwiVG9ydXNWb3J0ZXguY29uc3RydWN0b3IiLCJUb3J1c1ZvcnRleC5sb2FkUmVzb3VyY2VzIiwiVG9ydXNWb3J0ZXguaW1hZ2VDb21wbGV0ZUhhbmRsZXIiLCJUb3J1c1ZvcnRleC5vbkxvYWRDb21wbGV0ZSIsIlRvcnVzVm9ydGV4LnJlbmRlciIsIlRvcnVzVm9ydGV4Lm9uUmVzaXplIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFPLElBQUksV0FBaUIsaUNBQWlDLENBQUMsQ0FBQztBQUMvRCxJQUFPLFNBQVMsV0FBZSxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3RFLElBQU8sUUFBUSxXQUFnQixvQ0FBb0MsQ0FBQyxDQUFDO0FBQ3JFLElBQU8sU0FBUyxXQUFlLG9DQUFvQyxDQUFDLENBQUM7QUFDckUsSUFBTyxtQkFBbUIsV0FBYSw4Q0FBOEMsQ0FBQyxDQUFDO0FBQ3ZGLElBQU8sVUFBVSxXQUFlLHFDQUFxQyxDQUFDLENBQUM7QUFFdkUsSUFBTyxLQUFLLFdBQWdCLDhCQUE4QixDQUFDLENBQUM7QUFDNUQsSUFBTyxXQUFXLFdBQWUscUNBQXFDLENBQUMsQ0FBQztBQUN4RSxJQUFPLG1CQUFtQixXQUFhLDZDQUE2QyxDQUFDLENBQUM7QUFDdEYsSUFBTyxvQkFBb0IsV0FBYSw4Q0FBOEMsQ0FBQyxDQUFDO0FBQ3hGLElBQU8scUJBQXFCLFdBQVksbURBQW1ELENBQUMsQ0FBQztBQUM3RixJQUFPLFlBQVksV0FBZSx1Q0FBdUMsQ0FBQyxDQUFDO0FBQzNFLElBQU8scUJBQXFCLFdBQVksNkNBQTZDLENBQUMsQ0FBQztBQUN2RixJQUFPLEtBQUssV0FBZ0IsNkJBQTZCLENBQUMsQ0FBQztBQUUzRCxJQUFPLGVBQWUsV0FBYyxnREFBZ0QsQ0FBQyxDQUFDO0FBQ3RGLElBQU8sc0JBQXNCLFdBQVkscURBQXFELENBQUMsQ0FBQztBQUVoRyxJQUFNLFdBQVc7SUFhaEJBLFNBYktBLFdBQVdBO1FBZWZDLEtBQUtBLENBQUNBLFlBQVlBLEdBQUdBLEtBQUtBLENBQUNBO1FBRTNCQSxJQUFJQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxJQUFJQSxDQUFDQSxJQUFJQSxlQUFlQSxFQUFFQSxDQUFDQSxDQUFDQTtRQUU3Q0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsZUFBZUEsR0FBR0EsUUFBUUEsQ0FBQ0E7UUFDdENBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBLEdBQUdBLEdBQUdBLENBQUNBO1FBQzFCQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUN4QkEsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDeEJBLElBQUlBLENBQUNBLFdBQVdBLEdBQUdBLElBQUlBLFFBQVFBLENBQUNBLENBQUNBLEVBQUVBLENBQUNBLEVBQUVBLENBQUNBLENBQUNBLENBQUNBO1FBRXpDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxNQUFNQSxDQUFDQSxVQUFVQSxHQUFHQSxJQUFJQSxxQkFBcUJBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1FBQzlEQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxNQUFNQSxDQUFDQSxVQUFVQSxDQUFDQSxJQUFJQSxHQUFHQSxHQUFHQSxDQUFDQTtRQUV4Q0EsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsSUFBSUEsbUJBQW1CQSxDQUFDQSxJQUFJQSxFQUFFQSxJQUFJQSxFQUFFQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUN2REEsSUFBSUEsQ0FBQ0EsTUFBTUEsR0FBR0EsSUFBSUEsb0JBQW9CQSxDQUFDQSxHQUFHQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUU5REEsSUFBSUEsQ0FBQ0EsYUFBYUEsRUFBRUEsQ0FBQ0E7SUFDdEJB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QkEsQ0FBb0JBLENBQUNBO1FBRTFEQSxJQUFJQSxDQUFDQSxRQUFRQSxFQUFFQSxDQUFDQTtJQUNqQkEsQ0FBQ0E7SUFFTUosNEJBQU1BLEdBQWJBLFVBQWNBLEVBQWdCQTtRQUFoQkssa0JBQWdCQSxHQUFoQkEsU0FBZ0JBO1FBRzdCQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxNQUFNQSxDQUFDQSxNQUFNQSxDQUFDQSxJQUFJQSxDQUFDQSxXQUFXQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUM5Q0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsU0FBU0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFDMUJBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLFNBQVNBLElBQUlBLEdBQUdBLENBQUNBO1FBQzdCQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxTQUFTQSxJQUFJQSxHQUFHQSxDQUFDQTtRQUM3QkEsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsTUFBTUEsRUFBRUEsQ0FBQ0E7SUFDckJBLENBQUNBO0lBRU1MLDhCQUFRQSxHQUFmQSxVQUFnQkEsS0FBb0JBO1FBQXBCTSxxQkFBb0JBLEdBQXBCQSxZQUFvQkE7UUFFbkNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1FBQ2pCQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUVqQkEsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsS0FBS0EsR0FBR0EsTUFBTUEsQ0FBQ0EsVUFBVUEsQ0FBQ0E7UUFDckNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLE1BQU1BLEdBQUdBLE1BQU1BLENBQUNBLFdBQVdBLENBQUNBO0lBQ3hDQSxDQUFDQTtJQUNGTixrQkFBQ0E7QUFBREEsQ0E5RkEsQUE4RkNBLElBQUEiLCJmaWxlIjoib2JqZWN0M2QvVG9ydXNWb3J0ZXguanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL3JvYmJhdGVtYW4vV2Vic3Rvcm1Qcm9qZWN0cy9hd2F5anMtc3RhZ2VnbC8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlld1x0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvbnRhaW5lcnMvVmlld1wiKTtcbmltcG9ydCBCbGVuZE1vZGVcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvcmUvYmFzZS9CbGVuZE1vZGVcIik7XG5pbXBvcnQgVmVjdG9yM0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29yZS9nZW9tL1ZlY3RvcjNEXCIpO1xuaW1wb3J0IFVSTExvYWRlclx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29yZS9uZXQvVVJMTG9hZGVyXCIpO1xuaW1wb3J0IFVSTExvYWRlckRhdGFGb3JtYXRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29yZS9uZXQvVVJMTG9hZGVyRGF0YUZvcm1hdFwiKTtcbmltcG9ydCBVUkxSZXF1ZXN0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb3JlL25ldC9VUkxSZXF1ZXN0XCIpO1xuaW1wb3J0IE1lc2hcdFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9lbnRpdGllcy9NZXNoXCIpO1xuaW1wb3J0IEV2ZW50XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2V2ZW50cy9FdmVudFwiKTtcbmltcG9ydCBQYXJzZXJVdGlsc1x0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvcGFyc2Vycy9QYXJzZXJVdGlsc1wiKTtcbmltcG9ydCBQcmltaXRpdmVDdWJlUHJlZmFiXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3ByZWZhYnMvUHJpbWl0aXZlQ3ViZVByZWZhYlwiKTtcbmltcG9ydCBQcmltaXRpdmVUb3J1c1ByZWZhYlx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9wcmVmYWJzL1ByaW1pdGl2ZVRvcnVzUHJlZmFiXCIpO1xuaW1wb3J0IFBlcnNwZWN0aXZlUHJvamVjdGlvblx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvcHJvamVjdGlvbnMvUGVyc3BlY3RpdmVQcm9qZWN0aW9uXCIpO1xuaW1wb3J0IEltYWdlVGV4dHVyZVx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdGV4dHVyZXMvSW1hZ2VUZXh0dXJlXCIpO1xuaW1wb3J0IFJlcXVlc3RBbmltYXRpb25GcmFtZVx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvUmVxdWVzdEFuaW1hdGlvbkZyYW1lXCIpO1xuaW1wb3J0IERlYnVnXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3V0aWxzL0RlYnVnXCIpO1xuXG5pbXBvcnQgRGVmYXVsdFJlbmRlcmVyXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvY29yZS9yZW5kZXIvRGVmYXVsdFJlbmRlcmVyXCIpO1xuaW1wb3J0IFRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWxcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9UcmlhbmdsZU1ldGhvZE1hdGVyaWFsXCIpO1xuXG5jbGFzcyBUb3J1c1ZvcnRleFxue1xuXHRwcml2YXRlIF92aWV3OlZpZXc7XG5cblx0cHJpdmF0ZSBfY3ViZTpQcmltaXRpdmVDdWJlUHJlZmFiO1xuXHRwcml2YXRlIF90b3J1czpQcmltaXRpdmVUb3J1c1ByZWZhYjtcblx0cHJpdmF0ZSBfbWVzaDpNZXNoO1xuXHRwcml2YXRlIF9tZXNoMjpNZXNoO1xuXG5cdHByaXZhdGUgX3JhZjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5cdHByaXZhdGUgX2ltYWdlOkhUTUxJbWFnZUVsZW1lbnQ7XG5cdHByaXZhdGUgX2NhbWVyYUF4aXM6VmVjdG9yM0Q7XG5cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cdFx0RGVidWcuVEhST1dfRVJST1JTID0gZmFsc2U7XG5cblx0XHR0aGlzLl92aWV3ID0gbmV3IFZpZXcobmV3IERlZmF1bHRSZW5kZXJlcigpKTtcblxuXHRcdHRoaXMuX3ZpZXcuYmFja2dyb3VuZENvbG9yID0gMHgwMDAwMDA7XG5cdFx0dGhpcy5fdmlldy5jYW1lcmEueCA9IDEzMDtcblx0XHR0aGlzLl92aWV3LmNhbWVyYS55ID0gMDtcblx0XHR0aGlzLl92aWV3LmNhbWVyYS56ID0gMDtcblx0XHR0aGlzLl9jYW1lcmFBeGlzID0gbmV3IFZlY3RvcjNEKDAsIDAsIDEpO1xuXG5cdFx0dGhpcy5fdmlldy5jYW1lcmEucHJvamVjdGlvbiA9IG5ldyBQZXJzcGVjdGl2ZVByb2plY3Rpb24oMTIwKTtcblx0XHR0aGlzLl92aWV3LmNhbWVyYS5wcm9qZWN0aW9uLm5lYXIgPSAwLjE7XG5cblx0XHR0aGlzLl9jdWJlID0gbmV3IFByaW1pdGl2ZUN1YmVQcmVmYWIoMjAuMCwgMjAuMCwgMjAuMCk7XG5cdFx0dGhpcy5fdG9ydXMgPSBuZXcgUHJpbWl0aXZlVG9ydXNQcmVmYWIoMTUwLCA4MCwgMzIsIDE2LCB0cnVlKTtcblxuXHRcdHRoaXMubG9hZFJlc291cmNlcygpO1xuXHR9XG5cblx0cHJpdmF0ZSBsb2FkUmVzb3VyY2VzKClcblx0e1xuXHRcdHZhciB1cmxSZXF1ZXN0OlVSTFJlcXVlc3QgPSBuZXcgVVJMUmVxdWVzdCggXCJhc3NldHMvMTMwOTA5d2FsbF9iaWcucG5nXCIgKTtcblx0XHR2YXIgdXJsTG9hZGVyOlVSTExvYWRlciA9IG5ldyBVUkxMb2FkZXIoKTtcblx0XHR1cmxMb2FkZXIuZGF0YUZvcm1hdCA9IFVSTExvYWRlckRhdGFGb3JtYXQuQkxPQjtcblx0XHR1cmxMb2FkZXIuYWRkRXZlbnRMaXN0ZW5lcihFdmVudC5DT01QTEVURSwgKGV2ZW50OkV2ZW50KSA9PiB0aGlzLmltYWdlQ29tcGxldGVIYW5kbGVyKGV2ZW50KSk7XG5cdFx0dXJsTG9hZGVyLmxvYWQodXJsUmVxdWVzdCk7XG5cdH1cblxuXHRwcml2YXRlIGltYWdlQ29tcGxldGVIYW5kbGVyKGV2ZW50OkV2ZW50KVxuXHR7XG5cdFx0dmFyIGltYWdlTG9hZGVyOlVSTExvYWRlciA9IDxVUkxMb2FkZXI+IGV2ZW50LnRhcmdldDtcblx0XHR0aGlzLl9pbWFnZSA9IFBhcnNlclV0aWxzLmJsb2JUb0ltYWdlKGltYWdlTG9hZGVyLmRhdGEpO1xuXHRcdHRoaXMuX2ltYWdlLm9ubG9hZCA9IChldmVudCkgPT4gdGhpcy5vbkxvYWRDb21wbGV0ZShldmVudCk7XG5cdH1cblxuXHRwcml2YXRlIG9uTG9hZENvbXBsZXRlKGV2ZW50KVxuXHR7XG5cdFx0dmFyIG1hdFR4OlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwgPSBuZXcgVHJpYW5nbGVNZXRob2RNYXRlcmlhbChuZXcgSW1hZ2VUZXh0dXJlKHRoaXMuX2ltYWdlLCBmYWxzZSksIHRydWUsIHRydWUsIGZhbHNlKTtcblxuXHRcdG1hdFR4LmJsZW5kTW9kZSA9IEJsZW5kTW9kZS5BREQ7XG5cdFx0bWF0VHguYm90aFNpZGVzID0gdHJ1ZTtcblxuXHRcdHRoaXMuX3RvcnVzLm1hdGVyaWFsID0gbWF0VHg7XG5cdFx0dGhpcy5fY3ViZS5tYXRlcmlhbCA9IG1hdFR4O1xuXG5cdFx0dGhpcy5fbWVzaCA9IDxNZXNoPiB0aGlzLl90b3J1cy5nZXROZXdPYmplY3QoKTtcblx0XHR0aGlzLl9tZXNoMiA9IDxNZXNoPiB0aGlzLl9jdWJlLmdldE5ld09iamVjdCgpO1xuXHRcdHRoaXMuX21lc2gyLnggPSAxMzA7XG5cdFx0dGhpcy5fbWVzaDIueiA9IDQwO1xuXG5cdFx0dGhpcy5fdmlldy5zY2VuZS5hZGRDaGlsZCh0aGlzLl9tZXNoKTtcblx0XHR0aGlzLl92aWV3LnNjZW5lLmFkZENoaWxkKHRoaXMuX21lc2gyKTtcblxuXHRcdHRoaXMuX3JhZiA9IG5ldyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZW5kZXIsIHRoaXMpO1xuXHRcdHRoaXMuX3JhZi5zdGFydCgpO1xuXG5cdFx0d2luZG93Lm9ucmVzaXplID0gKGV2ZW50OlVJRXZlbnQpID0+IHRoaXMub25SZXNpemUoZXZlbnQpO1xuXG5cdFx0dGhpcy5vblJlc2l6ZSgpO1xuXHR9XG5cblx0cHVibGljIHJlbmRlcihkdDpudW1iZXIgPSBudWxsKTp2b2lkXG5cdHtcblxuXHRcdHRoaXMuX3ZpZXcuY2FtZXJhLnJvdGF0ZSh0aGlzLl9jYW1lcmFBeGlzLCAxKTtcblx0XHR0aGlzLl9tZXNoLnJvdGF0aW9uWSArPSAxO1xuXHRcdHRoaXMuX21lc2gyLnJvdGF0aW9uWCArPSAwLjQ7XG5cdFx0dGhpcy5fbWVzaDIucm90YXRpb25ZICs9IDAuNDtcblx0XHR0aGlzLl92aWV3LnJlbmRlcigpO1xuXHR9XG5cblx0cHVibGljIG9uUmVzaXplKGV2ZW50OlVJRXZlbnQgPSBudWxsKVxuXHR7XG5cdFx0dGhpcy5fdmlldy55ID0gMDtcblx0XHR0aGlzLl92aWV3LnggPSAwO1xuXG5cdFx0dGhpcy5fdmlldy53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRcdHRoaXMuX3ZpZXcuaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuXHR9XG59Il19 \ No newline at end of file diff --git a/tests/object3d/TorusVortex.ts b/tests/object3d/TorusVortex.ts new file mode 100644 index 00000000..2b673e74 --- /dev/null +++ b/tests/object3d/TorusVortex.ts @@ -0,0 +1,114 @@ +import View = require("awayjs-core/lib/containers/View"); +import BlendMode = require("awayjs-core/lib/core/base/BlendMode"); +import Vector3D = require("awayjs-core/lib/core/geom/Vector3D"); +import URLLoader = require("awayjs-core/lib/core/net/URLLoader"); +import URLLoaderDataFormat = require("awayjs-core/lib/core/net/URLLoaderDataFormat"); +import URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +import Mesh = require("awayjs-core/lib/entities/Mesh"); +import Event = require("awayjs-core/lib/events/Event"); +import ParserUtils = require("awayjs-core/lib/parsers/ParserUtils"); +import PrimitiveCubePrefab = require("awayjs-core/lib/prefabs/PrimitiveCubePrefab"); +import PrimitiveTorusPrefab = require("awayjs-core/lib/prefabs/PrimitiveTorusPrefab"); +import PerspectiveProjection = require("awayjs-core/lib/projections/PerspectiveProjection"); +import ImageTexture = require("awayjs-core/lib/textures/ImageTexture"); +import RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +import Debug = require("awayjs-core/lib/utils/Debug"); + +import DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +import TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); + +class TorusVortex +{ + private _view:View; + + private _cube:PrimitiveCubePrefab; + private _torus:PrimitiveTorusPrefab; + private _mesh:Mesh; + private _mesh2:Mesh; + + private _raf:RequestAnimationFrame; + private _image:HTMLImageElement; + private _cameraAxis:Vector3D; + + constructor() + { + Debug.THROW_ERRORS = false; + + this._view = new View(new DefaultRenderer()); + + this._view.backgroundColor = 0x000000; + this._view.camera.x = 130; + this._view.camera.y = 0; + this._view.camera.z = 0; + this._cameraAxis = new Vector3D(0, 0, 1); + + this._view.camera.projection = new PerspectiveProjection(120); + this._view.camera.projection.near = 0.1; + + this._cube = new PrimitiveCubePrefab(20.0, 20.0, 20.0); + this._torus = new PrimitiveTorusPrefab(150, 80, 32, 16, true); + + this.loadResources(); + } + + private loadResources() + { + var urlRequest:URLRequest = new URLRequest( "assets/130909wall_big.png" ); + var urlLoader:URLLoader = new URLLoader(); + urlLoader.dataFormat = URLLoaderDataFormat.BLOB; + urlLoader.addEventListener(Event.COMPLETE, (event:Event) => this.imageCompleteHandler(event)); + urlLoader.load(urlRequest); + } + + private imageCompleteHandler(event:Event) + { + var imageLoader:URLLoader = event.target; + this._image = ParserUtils.blobToImage(imageLoader.data); + this._image.onload = (event) => this.onLoadComplete(event); + } + + private onLoadComplete(event) + { + var matTx:TriangleMethodMaterial = new TriangleMethodMaterial(new ImageTexture(this._image, false), true, true, false); + + matTx.blendMode = BlendMode.ADD; + matTx.bothSides = true; + + this._torus.material = matTx; + this._cube.material = matTx; + + this._mesh = this._torus.getNewObject(); + this._mesh2 = this._cube.getNewObject(); + this._mesh2.x = 130; + this._mesh2.z = 40; + + this._view.scene.addChild(this._mesh); + this._view.scene.addChild(this._mesh2); + + this._raf = new RequestAnimationFrame(this.render, this); + this._raf.start(); + + window.onresize = (event:UIEvent) => this.onResize(event); + + this.onResize(); + } + + public render(dt:number = null):void + { + + this._view.camera.rotate(this._cameraAxis, 1); + this._mesh.rotationY += 1; + this._mesh2.rotationX += 0.4; + this._mesh2.rotationY += 0.4; + this._view.render(); + } + + public onResize(event:UIEvent = null) + { + this._view.y = 0; + this._view.x = 0; + + this._view.width = window.innerWidth; + this._view.height = window.innerHeight; + } +} \ No newline at end of file diff --git a/tests/primitives/PrimitivesTest.js b/tests/primitives/PrimitivesTest.js new file mode 100755 index 00000000..83b9cbb0 --- /dev/null +++ b/tests/primitives/PrimitivesTest.js @@ -0,0 +1,90 @@ +var View = require("awayjs-core/lib/containers/View"); +var Vector3D = require("awayjs-core/lib/core/geom/Vector3D"); +var DirectionalLight = require("awayjs-core/lib/entities/DirectionalLight"); +var StaticLightPicker = require("awayjs-core/lib/materials/lightpickers/StaticLightPicker"); +var PrimitiveCapsulePrefab = require("awayjs-core/lib/prefabs/PrimitiveCapsulePrefab"); +var PrimitiveConePrefab = require("awayjs-core/lib/prefabs/PrimitiveConePrefab"); +var PrimitiveCubePrefab = require("awayjs-core/lib/prefabs/PrimitiveCubePrefab"); +var PrimitiveCylinderPrefab = require("awayjs-core/lib/prefabs/PrimitiveCylinderPrefab"); +var PrimitivePlanePrefab = require("awayjs-core/lib/prefabs/PrimitivePlanePrefab"); +var PrimitiveSpherePrefab = require("awayjs-core/lib/prefabs/PrimitiveSpherePrefab"); +var PrimitiveTorusPrefab = require("awayjs-core/lib/prefabs/PrimitiveTorusPrefab"); +var RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +var Debug = require("awayjs-core/lib/utils/Debug"); +var DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +var TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); +var DefaultMaterialManager = require("awayjs-stagegl/lib/materials/utils/DefaultMaterialManager"); +var PrimitivesTest = (function () { + function PrimitivesTest() { + var _this = this; + this.meshes = new Array(); + this.radius = 400; + Debug.LOG_PI_ERRORS = false; + Debug.THROW_ERRORS = false; + this.view = new View(new DefaultRenderer()); + this.raf = new RequestAnimationFrame(this.render, this); + this.light = new DirectionalLight(); + this.light.color = 0xFFFFFF; + this.light.direction = new Vector3D(1, 1, 0); + this.light.ambient = 0; + this.light.ambientColor = 0xFFFFFF; + this.light.diffuse = 1; + this.light.specular = 1; + this.lightB = new DirectionalLight(); + this.lightB.color = 0xFF0000; + this.lightB.direction = new Vector3D(-1, 0, 1); + this.lightB.ambient = 0; + this.lightB.ambientColor = 0xFFFFFF; + this.lightB.diffuse = 1; + this.lightB.specular = 1; + this.staticLightPicker = new StaticLightPicker([this.light, this.lightB]); + this.view.scene.addChild(this.light); + this.view.scene.addChild(this.lightB); + this.view.backgroundColor = 0x222222; + window.onresize = function (event) { return _this.onResize(event); }; + this.initMeshes(); + this.raf.start(); + this.onResize(); + } + PrimitivesTest.prototype.initMeshes = function () { + var primitives = new Array(); + var material = new TriangleMethodMaterial(DefaultMaterialManager.getDefaultTexture()); + material.lightPicker = this.staticLightPicker; + material.smooth = false; + primitives.push(new PrimitiveTorusPrefab()); + primitives.push(new PrimitiveSpherePrefab()); + primitives.push(new PrimitiveCapsulePrefab()); + primitives.push(new PrimitiveCylinderPrefab()); + primitives.push(new PrimitivePlanePrefab()); + primitives.push(new PrimitiveConePrefab()); + primitives.push(new PrimitiveCubePrefab()); + var mesh; + for (var c = 0; c < primitives.length; c++) { + primitives[c].material = material; + var t = Math.PI * 2 * c / primitives.length; + mesh = primitives[c].getNewObject(); + mesh.x = Math.cos(t) * this.radius; + mesh.y = Math.sin(t) * this.radius; + mesh.z = 0; + mesh.transform.scale = new Vector3D(2, 2, 2); + this.view.scene.addChild(mesh); + this.meshes.push(mesh); + } + }; + PrimitivesTest.prototype.render = function () { + if (this.meshes) + for (var c = 0; c < this.meshes.length; c++) + this.meshes[c].rotationY += 1; + this.view.render(); + }; + PrimitivesTest.prototype.onResize = function (event) { + if (event === void 0) { event = null; } + this.view.y = 0; + this.view.x = 0; + this.view.width = window.innerWidth; + this.view.height = window.innerHeight; + }; + return PrimitivesTest; +})(); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInByaW1pdGl2ZXMvcHJpbWl0aXZlc3Rlc3QudHMiXSwibmFtZXMiOlsiUHJpbWl0aXZlc1Rlc3QiLCJQcmltaXRpdmVzVGVzdC5jb25zdHJ1Y3RvciIsIlByaW1pdGl2ZXNUZXN0LmluaXRNZXNoZXMiLCJQcmltaXRpdmVzVGVzdC5yZW5kZXIiLCJQcmltaXRpdmVzVGVzdC5vblJlc2l6ZSJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTyxJQUFJLFdBQWlCLGlDQUFpQyxDQUFDLENBQUM7QUFDL0QsSUFBTyxRQUFRLFdBQWdCLG9DQUFvQyxDQUFDLENBQUM7QUFFckUsSUFBTyxnQkFBZ0IsV0FBYywyQ0FBMkMsQ0FBQyxDQUFDO0FBRWxGLElBQU8saUJBQWlCLFdBQWEsMERBQTBELENBQUMsQ0FBQztBQUVqRyxJQUFPLHNCQUFzQixXQUFZLGdEQUFnRCxDQUFDLENBQUM7QUFDM0YsSUFBTyxtQkFBbUIsV0FBYSw2Q0FBNkMsQ0FBQyxDQUFDO0FBQ3RGLElBQU8sbUJBQW1CLFdBQWEsNkNBQTZDLENBQUMsQ0FBQztBQUN0RixJQUFPLHVCQUF1QixXQUFZLGlEQUFpRCxDQUFDLENBQUM7QUFDN0YsSUFBTyxvQkFBb0IsV0FBYSw4Q0FBOEMsQ0FBQyxDQUFDO0FBQ3hGLElBQU8scUJBQXFCLFdBQVksK0NBQStDLENBQUMsQ0FBQztBQUN6RixJQUFPLG9CQUFvQixXQUFhLDhDQUE4QyxDQUFDLENBQUM7QUFDeEYsSUFBTyxxQkFBcUIsV0FBWSw2Q0FBNkMsQ0FBQyxDQUFDO0FBQ3ZGLElBQU8sS0FBSyxXQUFnQiw2QkFBNkIsQ0FBQyxDQUFDO0FBRTNELElBQU8sZUFBZSxXQUFjLGdEQUFnRCxDQUFDLENBQUM7QUFDdEYsSUFBTyxzQkFBc0IsV0FBWSxxREFBcUQsQ0FBQyxDQUFDO0FBQ2hHLElBQU8sc0JBQXNCLFdBQVksMkRBQTJELENBQUMsQ0FBQztBQUV0RyxJQUFNLGNBQWM7SUFXbkJBLFNBWEtBLGNBQWNBO1FBQXBCQyxpQkF1R0NBO1FBbEdRQSxXQUFNQSxHQUFlQSxJQUFJQSxLQUFLQSxFQUFRQSxDQUFDQTtRQUl2Q0EsV0FBTUEsR0FBVUEsR0FBR0EsQ0FBQ0E7UUFLM0JBLEtBQUtBLENBQUNBLGFBQWFBLEdBQU1BLEtBQUtBLENBQUNBO1FBQy9CQSxLQUFLQSxDQUFDQSxZQUFZQSxHQUFPQSxLQUFLQSxDQUFDQTtRQUUvQkEsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsSUFBSUEsSUFBSUEsQ0FBQ0EsSUFBSUEsZUFBZUEsRUFBRUEsQ0FBQ0EsQ0FBQ0E7UUFDNUNBLElBQUlBLENBQUNBLEdBQUdBLEdBQUdBLElBQUlBLHFCQUFxQkEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsRUFBRUEsSUFBSUEsQ0FBQ0EsQ0FBQ0E7UUFFeERBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLElBQUlBLGdCQUFnQkEsRUFBRUEsQ0FBQ0E7UUFDcENBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLEtBQUtBLEdBQUdBLFFBQVFBLENBQUNBO1FBQzVCQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxTQUFTQSxHQUFHQSxJQUFJQSxRQUFRQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUM3Q0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsT0FBT0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDdkJBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFlBQVlBLEdBQUdBLFFBQVFBLENBQUNBO1FBQ25DQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxPQUFPQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUN2QkEsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsUUFBUUEsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFFeEJBLElBQUlBLENBQUNBLE1BQU1BLEdBQUdBLElBQUlBLGdCQUFnQkEsRUFBRUEsQ0FBQ0E7UUFDckNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLEtBQUtBLEdBQUdBLFFBQVFBLENBQUNBO1FBQzdCQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxTQUFTQSxHQUFHQSxJQUFJQSxRQUFRQSxDQUFFQSxDQUFDQSxDQUFDQSxFQUFHQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFFQSxDQUFDQTtRQUNsREEsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsT0FBT0EsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFDeEJBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLFlBQVlBLEdBQUdBLFFBQVFBLENBQUNBO1FBQ3BDQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxPQUFPQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUN4QkEsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsUUFBUUEsR0FBR0EsQ0FBQ0EsQ0FBQ0E7UUFFekJBLElBQUlBLENBQUNBLGlCQUFpQkEsR0FBR0EsSUFBSUEsaUJBQWlCQSxDQUFDQSxDQUFDQSxJQUFJQSxDQUFDQSxLQUFLQSxFQUFHQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUUzRUEsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsUUFBUUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsQ0FBQ0E7UUFDckNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLEtBQUtBLENBQUNBLFFBQVFBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLENBQUNBO1FBRXRDQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxlQUFlQSxHQUFHQSxRQUFRQSxDQUFDQTtRQUVyQ0EsTUFBTUEsQ0FBQ0EsUUFBUUEsR0FBR0EsVUFBQ0EsS0FBYUEsSUFBS0EsT0FBQUEsS0FBSUEsQ0FBQ0EsUUFBUUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsRUFBcEJBLENBQW9CQSxDQUFDQTtRQUUxREEsSUFBSUEsQ0FBQ0EsVUFBVUEsRUFBRUEsQ0FBQ0E7UUFDbEJBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLEtBQUtBLEVBQUVBLENBQUNBO1FBQ2pCQSxJQUFJQSxDQUFDQSxRQUFRQSxFQUFFQSxDQUFDQTtJQUNqQkEsQ0FBQ0E7SUFFT0QsbUNBQVVBLEdBQWxCQTtRQUdDRSxJQUFJQSxVQUFVQSxHQUE4QkEsSUFBSUEsS0FBS0EsRUFBdUJBLENBQUNBO1FBQzdFQSxJQUFJQSxRQUFRQSxHQUEwQkEsSUFBSUEsc0JBQXNCQSxDQUFDQSxzQkFBc0JBLENBQUNBLGlCQUFpQkEsRUFBRUEsQ0FBQ0EsQ0FBQ0E7UUFDN0dBLFFBQVFBLENBQUNBLFdBQVdBLEdBQUdBLElBQUlBLENBQUNBLGlCQUFpQkEsQ0FBQ0E7UUFDOUNBLFFBQVFBLENBQUNBLE1BQU1BLEdBQUdBLEtBQUtBLENBQUNBO1FBRXhCQSxVQUFVQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxvQkFBb0JBLEVBQUVBLENBQUNBLENBQUNBO1FBQzVDQSxVQUFVQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxxQkFBcUJBLEVBQUVBLENBQUNBLENBQUNBO1FBQzdDQSxVQUFVQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxzQkFBc0JBLEVBQUVBLENBQUNBLENBQUNBO1FBQzlDQSxVQUFVQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSx1QkFBdUJBLEVBQUVBLENBQUNBLENBQUNBO1FBQy9DQSxVQUFVQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxvQkFBb0JBLEVBQUVBLENBQUNBLENBQUNBO1FBQzVDQSxVQUFVQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxtQkFBbUJBLEVBQUVBLENBQUNBLENBQUNBO1FBQzNDQSxVQUFVQSxDQUFDQSxJQUFJQSxDQUFDQSxJQUFJQSxtQkFBbUJBLEVBQUVBLENBQUNBLENBQUNBO1FBRTNDQSxJQUFJQSxJQUFTQSxDQUFDQTtRQUVkQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQSxHQUFVQSxDQUFDQSxFQUFFQSxDQUFDQSxHQUFHQSxVQUFVQSxDQUFDQSxNQUFNQSxFQUFFQSxDQUFDQSxFQUFHQSxFQUFFQSxDQUFDQTtZQUNwREEsVUFBVUEsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsUUFBUUEsR0FBR0EsUUFBUUEsQ0FBQ0E7WUFFbENBLElBQUlBLENBQUNBLEdBQVVBLElBQUlBLENBQUNBLEVBQUVBLEdBQUNBLENBQUNBLEdBQUNBLENBQUNBLEdBQUNBLFVBQVVBLENBQUNBLE1BQU1BLENBQUNBO1lBRTdDQSxJQUFJQSxHQUFVQSxVQUFVQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxZQUFZQSxFQUFFQSxDQUFDQTtZQUMzQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7WUFDakNBLElBQUlBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBO1lBQ2pDQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtZQUNYQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxRQUFRQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUU3Q0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsUUFBUUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDL0JBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO1FBQ3hCQSxDQUFDQTtJQUdGQSxDQUFDQTtJQUVPRiwrQkFBTUEsR0FBZEE7UUFFQ0csRUFBRUEsQ0FBQ0EsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7WUFDZkEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBVUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsTUFBTUEsRUFBRUEsQ0FBQ0EsRUFBRUE7Z0JBQ2pEQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxTQUFTQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUVoQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsRUFBRUEsQ0FBQ0E7SUFDcEJBLENBQUNBO0lBRU1ILGlDQUFRQSxHQUFmQSxVQUFnQkEsS0FBb0JBO1FBQXBCSSxxQkFBb0JBLEdBQXBCQSxZQUFvQkE7UUFFbkNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1FBQ2hCQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUVoQkEsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsTUFBTUEsQ0FBQ0EsVUFBVUEsQ0FBQ0E7UUFDcENBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLEdBQUdBLE1BQU1BLENBQUNBLFdBQVdBLENBQUNBO0lBQ3ZDQSxDQUFDQTtJQUNGSixxQkFBQ0E7QUFBREEsQ0F2R0EsQUF1R0NBLElBQUEiLCJmaWxlIjoicHJpbWl0aXZlcy9QcmltaXRpdmVzVGVzdC5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvcm9iYmF0ZW1hbi9XZWJzdG9ybVByb2plY3RzL2F3YXlqcy1zdGFnZWdsLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBWaWV3XHRcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29udGFpbmVycy9WaWV3XCIpO1xuaW1wb3J0IFZlY3RvcjNEXHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvcmUvZ2VvbS9WZWN0b3IzRFwiKTtcbmltcG9ydCBNZXNoXHRcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZW50aXRpZXMvTWVzaFwiKTtcbmltcG9ydCBEaXJlY3Rpb25hbExpZ2h0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZW50aXRpZXMvRGlyZWN0aW9uYWxMaWdodFwiKTtcbmltcG9ydCBFdmVudFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9ldmVudHMvRXZlbnRcIik7XG5pbXBvcnQgU3RhdGljTGlnaHRQaWNrZXJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvbWF0ZXJpYWxzL2xpZ2h0cGlja2Vycy9TdGF0aWNMaWdodFBpY2tlclwiKTtcbmltcG9ydCBQcmltaXRpdmVQcmVmYWJCYXNlXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3ByZWZhYnMvUHJpbWl0aXZlUHJlZmFiQmFzZVwiKTtcbmltcG9ydCBQcmltaXRpdmVDYXBzdWxlUHJlZmFiXHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9wcmVmYWJzL1ByaW1pdGl2ZUNhcHN1bGVQcmVmYWJcIik7XG5pbXBvcnQgUHJpbWl0aXZlQ29uZVByZWZhYlx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9wcmVmYWJzL1ByaW1pdGl2ZUNvbmVQcmVmYWJcIik7XG5pbXBvcnQgUHJpbWl0aXZlQ3ViZVByZWZhYlx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9wcmVmYWJzL1ByaW1pdGl2ZUN1YmVQcmVmYWJcIik7XG5pbXBvcnQgUHJpbWl0aXZlQ3lsaW5kZXJQcmVmYWJcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3ByZWZhYnMvUHJpbWl0aXZlQ3lsaW5kZXJQcmVmYWJcIik7XG5pbXBvcnQgUHJpbWl0aXZlUGxhbmVQcmVmYWJcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvcHJlZmFicy9QcmltaXRpdmVQbGFuZVByZWZhYlwiKTtcbmltcG9ydCBQcmltaXRpdmVTcGhlcmVQcmVmYWJcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3ByZWZhYnMvUHJpbWl0aXZlU3BoZXJlUHJlZmFiXCIpO1xuaW1wb3J0IFByaW1pdGl2ZVRvcnVzUHJlZmFiXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3ByZWZhYnMvUHJpbWl0aXZlVG9ydXNQcmVmYWJcIik7XG5pbXBvcnQgUmVxdWVzdEFuaW1hdGlvbkZyYW1lXHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9SZXF1ZXN0QW5pbWF0aW9uRnJhbWVcIik7XG5pbXBvcnQgRGVidWdcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvRGVidWdcIik7XG5cbmltcG9ydCBEZWZhdWx0UmVuZGVyZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3JlbmRlci9EZWZhdWx0UmVuZGVyZXJcIik7XG5pbXBvcnQgVHJpYW5nbGVNZXRob2RNYXRlcmlhbFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL1RyaWFuZ2xlTWV0aG9kTWF0ZXJpYWxcIik7XG5pbXBvcnQgRGVmYXVsdE1hdGVyaWFsTWFuYWdlclx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtc3RhZ2VnbC9saWIvbWF0ZXJpYWxzL3V0aWxzL0RlZmF1bHRNYXRlcmlhbE1hbmFnZXJcIik7XG5cbmNsYXNzIFByaW1pdGl2ZXNUZXN0XG57XG5cblx0cHJpdmF0ZSB2aWV3OlZpZXc7XG5cdHByaXZhdGUgcmFmOlJlcXVlc3RBbmltYXRpb25GcmFtZTtcblx0cHJpdmF0ZSBtZXNoZXM6QXJyYXk8TWVzaD4gPSBuZXcgQXJyYXk8TWVzaD4oKTtcblx0cHJpdmF0ZSBsaWdodDpEaXJlY3Rpb25hbExpZ2h0O1xuXHRwcml2YXRlIGxpZ2h0QjpEaXJlY3Rpb25hbExpZ2h0O1xuXHRwcml2YXRlIHN0YXRpY0xpZ2h0UGlja2VyOlN0YXRpY0xpZ2h0UGlja2VyO1xuXHRwcml2YXRlIHJhZGl1czpudW1iZXIgPSA0MDA7XG5cblx0Y29uc3RydWN0b3IoKVxuXHR7XG5cblx0XHREZWJ1Zy5MT0dfUElfRVJST1JTICAgID0gZmFsc2U7XG5cdFx0RGVidWcuVEhST1dfRVJST1JTICAgICA9IGZhbHNlO1xuXG5cdFx0dGhpcy52aWV3ID0gbmV3IFZpZXcobmV3IERlZmF1bHRSZW5kZXJlcigpKTtcblx0XHR0aGlzLnJhZiA9IG5ldyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZW5kZXIsIHRoaXMpO1xuXG5cdFx0dGhpcy5saWdodCA9IG5ldyBEaXJlY3Rpb25hbExpZ2h0KCk7XG5cdFx0dGhpcy5saWdodC5jb2xvciA9IDB4RkZGRkZGO1xuXHRcdHRoaXMubGlnaHQuZGlyZWN0aW9uID0gbmV3IFZlY3RvcjNEKDEsIDEsIDApO1xuXHRcdHRoaXMubGlnaHQuYW1iaWVudCA9IDA7XG5cdFx0dGhpcy5saWdodC5hbWJpZW50Q29sb3IgPSAweEZGRkZGRjtcblx0XHR0aGlzLmxpZ2h0LmRpZmZ1c2UgPSAxO1xuXHRcdHRoaXMubGlnaHQuc3BlY3VsYXIgPSAxO1xuXG5cdFx0dGhpcy5saWdodEIgPSBuZXcgRGlyZWN0aW9uYWxMaWdodCgpO1xuXHRcdHRoaXMubGlnaHRCLmNvbG9yID0gMHhGRjAwMDA7XG5cdFx0dGhpcy5saWdodEIuZGlyZWN0aW9uID0gbmV3IFZlY3RvcjNEKCAtMSAsIDAgLDEgKTtcblx0XHR0aGlzLmxpZ2h0Qi5hbWJpZW50ID0gMDtcblx0XHR0aGlzLmxpZ2h0Qi5hbWJpZW50Q29sb3IgPSAweEZGRkZGRjtcblx0XHR0aGlzLmxpZ2h0Qi5kaWZmdXNlID0gMTtcblx0XHR0aGlzLmxpZ2h0Qi5zcGVjdWxhciA9IDE7XG5cblx0XHR0aGlzLnN0YXRpY0xpZ2h0UGlja2VyID0gbmV3IFN0YXRpY0xpZ2h0UGlja2VyKFt0aGlzLmxpZ2h0ICwgdGhpcy5saWdodEJdKTtcblxuXHRcdHRoaXMudmlldy5zY2VuZS5hZGRDaGlsZCh0aGlzLmxpZ2h0KTtcblx0XHR0aGlzLnZpZXcuc2NlbmUuYWRkQ2hpbGQodGhpcy5saWdodEIpO1xuXG5cdFx0dGhpcy52aWV3LmJhY2tncm91bmRDb2xvciA9IDB4MjIyMjIyO1xuXG5cdFx0d2luZG93Lm9ucmVzaXplID0gKGV2ZW50OlVJRXZlbnQpID0+IHRoaXMub25SZXNpemUoZXZlbnQpO1xuXG5cdFx0dGhpcy5pbml0TWVzaGVzKCk7XG5cdFx0dGhpcy5yYWYuc3RhcnQoKTtcblx0XHR0aGlzLm9uUmVzaXplKCk7XG5cdH1cblxuXHRwcml2YXRlIGluaXRNZXNoZXMoKTp2b2lkXG5cdHtcblxuXHRcdHZhciBwcmltaXRpdmVzOkFycmF5PFByaW1pdGl2ZVByZWZhYkJhc2U+ID0gbmV3IEFycmF5PFByaW1pdGl2ZVByZWZhYkJhc2U+KCk7XG5cdFx0dmFyIG1hdGVyaWFsOlRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWwgPSBuZXcgVHJpYW5nbGVNZXRob2RNYXRlcmlhbChEZWZhdWx0TWF0ZXJpYWxNYW5hZ2VyLmdldERlZmF1bHRUZXh0dXJlKCkpO1xuXHRcdG1hdGVyaWFsLmxpZ2h0UGlja2VyID0gdGhpcy5zdGF0aWNMaWdodFBpY2tlcjtcblx0XHRtYXRlcmlhbC5zbW9vdGggPSBmYWxzZTtcblxuXHRcdHByaW1pdGl2ZXMucHVzaChuZXcgUHJpbWl0aXZlVG9ydXNQcmVmYWIoKSk7XG5cdFx0cHJpbWl0aXZlcy5wdXNoKG5ldyBQcmltaXRpdmVTcGhlcmVQcmVmYWIoKSk7XG5cdFx0cHJpbWl0aXZlcy5wdXNoKG5ldyBQcmltaXRpdmVDYXBzdWxlUHJlZmFiKCkpO1xuXHRcdHByaW1pdGl2ZXMucHVzaChuZXcgUHJpbWl0aXZlQ3lsaW5kZXJQcmVmYWIoKSk7XG5cdFx0cHJpbWl0aXZlcy5wdXNoKG5ldyBQcmltaXRpdmVQbGFuZVByZWZhYigpKTtcblx0XHRwcmltaXRpdmVzLnB1c2gobmV3IFByaW1pdGl2ZUNvbmVQcmVmYWIoKSk7XG5cdFx0cHJpbWl0aXZlcy5wdXNoKG5ldyBQcmltaXRpdmVDdWJlUHJlZmFiKCkpO1xuXG5cdFx0dmFyIG1lc2g6TWVzaDtcblxuXHRcdGZvciAodmFyIGM6bnVtYmVyID0gMDsgYyA8IHByaW1pdGl2ZXMubGVuZ3RoOyBjICsrKSB7XG5cdFx0XHRwcmltaXRpdmVzW2NdLm1hdGVyaWFsID0gbWF0ZXJpYWw7XG5cblx0XHRcdHZhciB0Om51bWJlciA9IE1hdGguUEkqMipjL3ByaW1pdGl2ZXMubGVuZ3RoO1xuXG5cdFx0XHRtZXNoID0gPE1lc2g+IHByaW1pdGl2ZXNbY10uZ2V0TmV3T2JqZWN0KCk7XG5cdFx0XHRtZXNoLnggPSBNYXRoLmNvcyh0KSp0aGlzLnJhZGl1cztcblx0XHRcdG1lc2gueSA9IE1hdGguc2luKHQpKnRoaXMucmFkaXVzO1xuXHRcdFx0bWVzaC56ID0gMDtcblx0XHRcdG1lc2gudHJhbnNmb3JtLnNjYWxlID0gbmV3IFZlY3RvcjNEKDIsIDIsIDIpO1xuXG5cdFx0XHR0aGlzLnZpZXcuc2NlbmUuYWRkQ2hpbGQobWVzaCk7XG5cdFx0XHR0aGlzLm1lc2hlcy5wdXNoKG1lc2gpO1xuXHRcdH1cblxuXG5cdH1cblxuXHRwcml2YXRlIHJlbmRlcigpXG5cdHtcblx0XHRpZiAodGhpcy5tZXNoZXMpXG5cdFx0XHRmb3IgKHZhciBjOm51bWJlciA9IDA7IGMgPCB0aGlzLm1lc2hlcy5sZW5ndGg7IGMrKylcblx0XHRcdFx0dGhpcy5tZXNoZXNbY10ucm90YXRpb25ZICs9IDE7XG5cblx0XHR0aGlzLnZpZXcucmVuZGVyKCk7XG5cdH1cblxuXHRwdWJsaWMgb25SZXNpemUoZXZlbnQ6VUlFdmVudCA9IG51bGwpXG5cdHtcblx0XHR0aGlzLnZpZXcueSA9IDA7XG5cdFx0dGhpcy52aWV3LnggPSAwO1xuXG5cdFx0dGhpcy52aWV3LndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG5cdFx0dGhpcy52aWV3LmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0fVxufSJdfQ== \ No newline at end of file diff --git a/tests/primitives/PrimitivesTest.ts b/tests/primitives/PrimitivesTest.ts new file mode 100644 index 00000000..d3f17b82 --- /dev/null +++ b/tests/primitives/PrimitivesTest.ts @@ -0,0 +1,125 @@ +import View = require("awayjs-core/lib/containers/View"); +import Vector3D = require("awayjs-core/lib/core/geom/Vector3D"); +import Mesh = require("awayjs-core/lib/entities/Mesh"); +import DirectionalLight = require("awayjs-core/lib/entities/DirectionalLight"); +import Event = require("awayjs-core/lib/events/Event"); +import StaticLightPicker = require("awayjs-core/lib/materials/lightpickers/StaticLightPicker"); +import PrimitivePrefabBase = require("awayjs-core/lib/prefabs/PrimitivePrefabBase"); +import PrimitiveCapsulePrefab = require("awayjs-core/lib/prefabs/PrimitiveCapsulePrefab"); +import PrimitiveConePrefab = require("awayjs-core/lib/prefabs/PrimitiveConePrefab"); +import PrimitiveCubePrefab = require("awayjs-core/lib/prefabs/PrimitiveCubePrefab"); +import PrimitiveCylinderPrefab = require("awayjs-core/lib/prefabs/PrimitiveCylinderPrefab"); +import PrimitivePlanePrefab = require("awayjs-core/lib/prefabs/PrimitivePlanePrefab"); +import PrimitiveSpherePrefab = require("awayjs-core/lib/prefabs/PrimitiveSpherePrefab"); +import PrimitiveTorusPrefab = require("awayjs-core/lib/prefabs/PrimitiveTorusPrefab"); +import RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +import Debug = require("awayjs-core/lib/utils/Debug"); + +import DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +import TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); +import DefaultMaterialManager = require("awayjs-stagegl/lib/materials/utils/DefaultMaterialManager"); + +class PrimitivesTest +{ + + private view:View; + private raf:RequestAnimationFrame; + private meshes:Array = new Array(); + private light:DirectionalLight; + private lightB:DirectionalLight; + private staticLightPicker:StaticLightPicker; + private radius:number = 400; + + constructor() + { + + Debug.LOG_PI_ERRORS = false; + Debug.THROW_ERRORS = false; + + this.view = new View(new DefaultRenderer()); + this.raf = new RequestAnimationFrame(this.render, this); + + this.light = new DirectionalLight(); + this.light.color = 0xFFFFFF; + this.light.direction = new Vector3D(1, 1, 0); + this.light.ambient = 0; + this.light.ambientColor = 0xFFFFFF; + this.light.diffuse = 1; + this.light.specular = 1; + + this.lightB = new DirectionalLight(); + this.lightB.color = 0xFF0000; + this.lightB.direction = new Vector3D( -1 , 0 ,1 ); + this.lightB.ambient = 0; + this.lightB.ambientColor = 0xFFFFFF; + this.lightB.diffuse = 1; + this.lightB.specular = 1; + + this.staticLightPicker = new StaticLightPicker([this.light , this.lightB]); + + this.view.scene.addChild(this.light); + this.view.scene.addChild(this.lightB); + + this.view.backgroundColor = 0x222222; + + window.onresize = (event:UIEvent) => this.onResize(event); + + this.initMeshes(); + this.raf.start(); + this.onResize(); + } + + private initMeshes():void + { + + var primitives:Array = new Array(); + var material:TriangleMethodMaterial = new TriangleMethodMaterial(DefaultMaterialManager.getDefaultTexture()); + material.lightPicker = this.staticLightPicker; + material.smooth = false; + + primitives.push(new PrimitiveTorusPrefab()); + primitives.push(new PrimitiveSpherePrefab()); + primitives.push(new PrimitiveCapsulePrefab()); + primitives.push(new PrimitiveCylinderPrefab()); + primitives.push(new PrimitivePlanePrefab()); + primitives.push(new PrimitiveConePrefab()); + primitives.push(new PrimitiveCubePrefab()); + + var mesh:Mesh; + + for (var c:number = 0; c < primitives.length; c ++) { + primitives[c].material = material; + + var t:number = Math.PI*2*c/primitives.length; + + mesh = primitives[c].getNewObject(); + mesh.x = Math.cos(t)*this.radius; + mesh.y = Math.sin(t)*this.radius; + mesh.z = 0; + mesh.transform.scale = new Vector3D(2, 2, 2); + + this.view.scene.addChild(mesh); + this.meshes.push(mesh); + } + + + } + + private render() + { + if (this.meshes) + for (var c:number = 0; c < this.meshes.length; c++) + this.meshes[c].rotationY += 1; + + this.view.render(); + } + + public onResize(event:UIEvent = null) + { + this.view.y = 0; + this.view.x = 0; + + this.view.width = window.innerWidth; + this.view.height = window.innerHeight; + } +} \ No newline at end of file diff --git a/tests/primitives/WireframePrimitiveTest.js b/tests/primitives/WireframePrimitiveTest.js new file mode 100755 index 00000000..73f4658d --- /dev/null +++ b/tests/primitives/WireframePrimitiveTest.js @@ -0,0 +1,66 @@ +var View = require("awayjs-core/lib/containers/View"); +var Vector3D = require("awayjs-core/lib/core/geom/Vector3D"); +var PrimitivePolygonPrefab = require("awayjs-core/lib/prefabs/PrimitivePolygonPrefab"); +var PrimitiveConePrefab = require("awayjs-core/lib/prefabs/PrimitiveConePrefab"); +var PrimitiveCubePrefab = require("awayjs-core/lib/prefabs/PrimitiveCubePrefab"); +var PrimitiveCylinderPrefab = require("awayjs-core/lib/prefabs/PrimitiveCylinderPrefab"); +var PrimitivePlanePrefab = require("awayjs-core/lib/prefabs/PrimitivePlanePrefab"); +var PrimitiveSpherePrefab = require("awayjs-core/lib/prefabs/PrimitiveSpherePrefab"); +var RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +var Debug = require("awayjs-core/lib/utils/Debug"); +var DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +var ContextGLProfile = require("awayjs-stagegl/lib/core/stagegl/ContextGLProfile"); +var WireframePrimitiveTest = (function () { + function WireframePrimitiveTest() { + var _this = this; + this.meshes = new Array(); + this.radius = 400; + Debug.LOG_PI_ERRORS = false; + Debug.THROW_ERRORS = false; + this.view = new View(new DefaultRenderer(false, ContextGLProfile.BASELINE)); + this.raf = new RequestAnimationFrame(this.render, this); + this.view.backgroundColor = 0x222222; + window.onresize = function (event) { return _this.onResize(event); }; + this.initMeshes(); + this.raf.start(); + this.onResize(); + } + WireframePrimitiveTest.prototype.initMeshes = function () { + var primitives = new Array(); + primitives.push(new PrimitivePolygonPrefab()); + primitives.push(new PrimitiveSpherePrefab()); + primitives.push(new PrimitiveSpherePrefab()); + primitives.push(new PrimitiveCylinderPrefab()); + primitives.push(new PrimitivePlanePrefab()); + primitives.push(new PrimitiveConePrefab()); + primitives.push(new PrimitiveCubePrefab()); + var mesh; + for (var c = 0; c < primitives.length; c++) { + primitives[c].geometryType = "lineSubGeometry"; + var t = Math.PI * 2 * c / primitives.length; + mesh = primitives[c].getNewObject(); + mesh.x = Math.cos(t) * this.radius; + mesh.y = Math.sin(t) * this.radius; + mesh.z = 0; + mesh.transform.scale = new Vector3D(2, 2, 2); + this.view.scene.addChild(mesh); + this.meshes.push(mesh); + } + }; + WireframePrimitiveTest.prototype.render = function () { + if (this.meshes) + for (var c = 0; c < this.meshes.length; c++) + this.meshes[c].rotationY += 1; + this.view.render(); + }; + WireframePrimitiveTest.prototype.onResize = function (event) { + if (event === void 0) { event = null; } + this.view.y = 0; + this.view.x = 0; + this.view.width = window.innerWidth; + this.view.height = window.innerHeight; + }; + return WireframePrimitiveTest; +})(); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInByaW1pdGl2ZXMvd2lyZWZyYW1lcHJpbWl0aXZldGVzdC50cyJdLCJuYW1lcyI6WyJXaXJlZnJhbWVQcmltaXRpdmVUZXN0IiwiV2lyZWZyYW1lUHJpbWl0aXZlVGVzdC5jb25zdHJ1Y3RvciIsIldpcmVmcmFtZVByaW1pdGl2ZVRlc3QuaW5pdE1lc2hlcyIsIldpcmVmcmFtZVByaW1pdGl2ZVRlc3QucmVuZGVyIiwiV2lyZWZyYW1lUHJpbWl0aXZlVGVzdC5vblJlc2l6ZSJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTyxJQUFJLFdBQWlCLGlDQUFpQyxDQUFDLENBQUM7QUFDL0QsSUFBTyxRQUFRLFdBQWdCLG9DQUFvQyxDQUFDLENBQUM7QUFHckUsSUFBTyxzQkFBc0IsV0FBWSxnREFBZ0QsQ0FBQyxDQUFDO0FBQzNGLElBQU8sbUJBQW1CLFdBQWEsNkNBQTZDLENBQUMsQ0FBQztBQUN0RixJQUFPLG1CQUFtQixXQUFhLDZDQUE2QyxDQUFDLENBQUM7QUFDdEYsSUFBTyx1QkFBdUIsV0FBWSxpREFBaUQsQ0FBQyxDQUFDO0FBQzdGLElBQU8sb0JBQW9CLFdBQWEsOENBQThDLENBQUMsQ0FBQztBQUN4RixJQUFPLHFCQUFxQixXQUFZLCtDQUErQyxDQUFDLENBQUM7QUFDekYsSUFBTyxxQkFBcUIsV0FBWSw2Q0FBNkMsQ0FBQyxDQUFDO0FBQ3ZGLElBQU8sS0FBSyxXQUFnQiw2QkFBNkIsQ0FBQyxDQUFDO0FBRTNELElBQU8sZUFBZSxXQUFjLGdEQUFnRCxDQUFDLENBQUM7QUFDdEYsSUFBTyxnQkFBZ0IsV0FBYyxrREFBa0QsQ0FBQyxDQUFDO0FBSXpGLElBQU0sc0JBQXNCO0lBUTNCQSxTQVJLQSxzQkFBc0JBO1FBQTVCQyxpQkEwRUNBO1FBdEVRQSxXQUFNQSxHQUFlQSxJQUFJQSxLQUFLQSxFQUFRQSxDQUFDQTtRQUV2Q0EsV0FBTUEsR0FBVUEsR0FBR0EsQ0FBQ0E7UUFJM0JBLEtBQUtBLENBQUNBLGFBQWFBLEdBQUdBLEtBQUtBLENBQUNBO1FBQzVCQSxLQUFLQSxDQUFDQSxZQUFZQSxHQUFHQSxLQUFLQSxDQUFDQTtRQUUzQkEsSUFBSUEsQ0FBQ0EsSUFBSUEsR0FBR0EsSUFBSUEsSUFBSUEsQ0FBQ0EsSUFBSUEsZUFBZUEsQ0FBQ0EsS0FBS0EsRUFBRUEsZ0JBQWdCQSxDQUFDQSxRQUFRQSxDQUFDQSxDQUFDQSxDQUFDQTtRQUM1RUEsSUFBSUEsQ0FBQ0EsR0FBR0EsR0FBR0EsSUFBSUEscUJBQXFCQSxDQUFDQSxJQUFJQSxDQUFDQSxNQUFNQSxFQUFFQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUV4REEsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsZUFBZUEsR0FBR0EsUUFBUUEsQ0FBQ0E7UUFFckNBLE1BQU1BLENBQUNBLFFBQVFBLEdBQUdBLFVBQUNBLEtBQWFBLElBQUtBLE9BQUFBLEtBQUlBLENBQUNBLFFBQVFBLENBQUNBLEtBQUtBLENBQUNBLEVBQXBCQSxDQUFvQkEsQ0FBQ0E7UUFFMURBLElBQUlBLENBQUNBLFVBQVVBLEVBQUVBLENBQUNBO1FBQ2xCQSxJQUFJQSxDQUFDQSxHQUFHQSxDQUFDQSxLQUFLQSxFQUFFQSxDQUFDQTtRQUNqQkEsSUFBSUEsQ0FBQ0EsUUFBUUEsRUFBRUEsQ0FBQ0E7SUFDakJBLENBQUNBO0lBRU9ELDJDQUFVQSxHQUFsQkE7UUFHQ0UsSUFBSUEsVUFBVUEsR0FBOEJBLElBQUlBLEtBQUtBLEVBQXVCQSxDQUFDQTtRQUM3RUEsVUFBVUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsc0JBQXNCQSxFQUFFQSxDQUFDQSxDQUFDQTtRQUM5Q0EsVUFBVUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEscUJBQXFCQSxFQUFFQSxDQUFDQSxDQUFDQTtRQUM3Q0EsVUFBVUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEscUJBQXFCQSxFQUFFQSxDQUFDQSxDQUFDQTtRQUM3Q0EsVUFBVUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsdUJBQXVCQSxFQUFFQSxDQUFDQSxDQUFDQTtRQUMvQ0EsVUFBVUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsb0JBQW9CQSxFQUFFQSxDQUFDQSxDQUFDQTtRQUM1Q0EsVUFBVUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsbUJBQW1CQSxFQUFFQSxDQUFDQSxDQUFDQTtRQUMzQ0EsVUFBVUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsbUJBQW1CQSxFQUFFQSxDQUFDQSxDQUFDQTtRQUUzQ0EsSUFBSUEsSUFBU0EsQ0FBQ0E7UUFFZEEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBVUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsVUFBVUEsQ0FBQ0EsTUFBTUEsRUFBRUEsQ0FBQ0EsRUFBRUEsRUFBRUEsQ0FBQ0E7WUFDbkRBLFVBQVVBLENBQUNBLENBQUNBLENBQUNBLENBQUNBLFlBQVlBLEdBQUdBLGlCQUFpQkEsQ0FBQ0E7WUFFL0NBLElBQUlBLENBQUNBLEdBQVVBLElBQUlBLENBQUNBLEVBQUVBLEdBQUNBLENBQUNBLEdBQUNBLENBQUNBLEdBQUNBLFVBQVVBLENBQUNBLE1BQU1BLENBQUNBO1lBRTdDQSxJQUFJQSxHQUFVQSxVQUFVQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxZQUFZQSxFQUFFQSxDQUFDQTtZQUMzQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsQ0FBQ0EsR0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7WUFDakNBLElBQUlBLENBQUNBLENBQUNBLEdBQUdBLElBQUlBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBLENBQUNBLEdBQUNBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBO1lBQ2pDQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtZQUNYQSxJQUFJQSxDQUFDQSxTQUFTQSxDQUFDQSxLQUFLQSxHQUFHQSxJQUFJQSxRQUFRQSxDQUFDQSxDQUFDQSxFQUFFQSxDQUFDQSxFQUFFQSxDQUFDQSxDQUFDQSxDQUFDQTtZQUU3Q0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsUUFBUUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsQ0FBQ0E7WUFDL0JBLElBQUlBLENBQUNBLE1BQU1BLENBQUNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLENBQUNBO1FBQ3hCQSxDQUFDQTtJQUdGQSxDQUFDQTtJQUVPRix1Q0FBTUEsR0FBZEE7UUFFQ0csRUFBRUEsQ0FBQUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0E7WUFDZEEsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBR0EsQ0FBQ0EsQ0FBQ0EsR0FBVUEsQ0FBQ0EsRUFBRUEsQ0FBQ0EsR0FBR0EsSUFBSUEsQ0FBQ0EsTUFBTUEsQ0FBQ0EsTUFBTUEsRUFBRUEsQ0FBQ0EsRUFBRUE7Z0JBQ2pEQSxJQUFJQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxDQUFDQSxDQUFDQSxTQUFTQSxJQUFJQSxDQUFDQSxDQUFDQTtRQUVoQ0EsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsTUFBTUEsRUFBRUEsQ0FBQ0E7SUFDcEJBLENBQUNBO0lBRU1ILHlDQUFRQSxHQUFmQSxVQUFnQkEsS0FBb0JBO1FBQXBCSSxxQkFBb0JBLEdBQXBCQSxZQUFvQkE7UUFFbkNBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLENBQUNBLEdBQUdBLENBQUNBLENBQUNBO1FBQ2hCQSxJQUFJQSxDQUFDQSxJQUFJQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxDQUFDQTtRQUVoQkEsSUFBSUEsQ0FBQ0EsSUFBSUEsQ0FBQ0EsS0FBS0EsR0FBR0EsTUFBTUEsQ0FBQ0EsVUFBVUEsQ0FBQ0E7UUFDcENBLElBQUlBLENBQUNBLElBQUlBLENBQUNBLE1BQU1BLEdBQUdBLE1BQU1BLENBQUNBLFdBQVdBLENBQUNBO0lBQ3ZDQSxDQUFDQTtJQUNGSiw2QkFBQ0E7QUFBREEsQ0ExRUEsQUEwRUNBLElBQUEiLCJmaWxlIjoicHJpbWl0aXZlcy9XaXJlZnJhbWVQcmltaXRpdmVUZXN0LmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9yb2JiYXRlbWFuL1dlYnN0b3JtUHJvamVjdHMvYXdheWpzLXN0YWdlZ2wvIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZpZXdcdFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb250YWluZXJzL1ZpZXdcIik7XG5pbXBvcnQgVmVjdG9yM0RcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29yZS9nZW9tL1ZlY3RvcjNEXCIpO1xuaW1wb3J0IE1lc2hcdFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9lbnRpdGllcy9NZXNoXCIpO1xuaW1wb3J0IFByaW1pdGl2ZVByZWZhYkJhc2VcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvcHJlZmFicy9QcmltaXRpdmVQcmVmYWJCYXNlXCIpO1xuaW1wb3J0IFByaW1pdGl2ZVBvbHlnb25QcmVmYWJcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3ByZWZhYnMvUHJpbWl0aXZlUG9seWdvblByZWZhYlwiKTtcbmltcG9ydCBQcmltaXRpdmVDb25lUHJlZmFiXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3ByZWZhYnMvUHJpbWl0aXZlQ29uZVByZWZhYlwiKTtcbmltcG9ydCBQcmltaXRpdmVDdWJlUHJlZmFiXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3ByZWZhYnMvUHJpbWl0aXZlQ3ViZVByZWZhYlwiKTtcbmltcG9ydCBQcmltaXRpdmVDeWxpbmRlclByZWZhYlx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvcHJlZmFicy9QcmltaXRpdmVDeWxpbmRlclByZWZhYlwiKTtcbmltcG9ydCBQcmltaXRpdmVQbGFuZVByZWZhYlx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9wcmVmYWJzL1ByaW1pdGl2ZVBsYW5lUHJlZmFiXCIpO1xuaW1wb3J0IFByaW1pdGl2ZVNwaGVyZVByZWZhYlx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvcHJlZmFicy9QcmltaXRpdmVTcGhlcmVQcmVmYWJcIik7XG5pbXBvcnQgUmVxdWVzdEFuaW1hdGlvbkZyYW1lXHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9SZXF1ZXN0QW5pbWF0aW9uRnJhbWVcIik7XG5pbXBvcnQgRGVidWdcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvRGVidWdcIik7XG5cbmltcG9ydCBEZWZhdWx0UmVuZGVyZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3JlbmRlci9EZWZhdWx0UmVuZGVyZXJcIik7XG5pbXBvcnQgQ29udGV4dEdMUHJvZmlsZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL2NvcmUvc3RhZ2VnbC9Db250ZXh0R0xQcm9maWxlXCIpO1xuaW1wb3J0IFRyaWFuZ2xlTWV0aG9kTWF0ZXJpYWxcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy9UcmlhbmdsZU1ldGhvZE1hdGVyaWFsXCIpO1xuaW1wb3J0IERlZmF1bHRNYXRlcmlhbE1hbmFnZXJcdFx0PSByZXF1aXJlKFwiYXdheWpzLXN0YWdlZ2wvbGliL21hdGVyaWFscy91dGlscy9EZWZhdWx0TWF0ZXJpYWxNYW5hZ2VyXCIpO1xuXG5jbGFzcyBXaXJlZnJhbWVQcmltaXRpdmVUZXN0XG57XG5cdHByaXZhdGUgdmlldzpWaWV3O1xuXHRwcml2YXRlIHJhZjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5cdHByaXZhdGUgbWVzaGVzOkFycmF5PE1lc2g+ID0gbmV3IEFycmF5PE1lc2g+KCk7XG5cblx0cHJpdmF0ZSByYWRpdXM6bnVtYmVyID0gNDAwO1xuXG5cdGNvbnN0cnVjdG9yKClcblx0e1xuXHRcdERlYnVnLkxPR19QSV9FUlJPUlMgPSBmYWxzZTtcblx0XHREZWJ1Zy5USFJPV19FUlJPUlMgPSBmYWxzZTtcblxuXHRcdHRoaXMudmlldyA9IG5ldyBWaWV3KG5ldyBEZWZhdWx0UmVuZGVyZXIoZmFsc2UsIENvbnRleHRHTFByb2ZpbGUuQkFTRUxJTkUpKTtcblx0XHR0aGlzLnJhZiA9IG5ldyBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZW5kZXIsIHRoaXMpO1xuXG5cdFx0dGhpcy52aWV3LmJhY2tncm91bmRDb2xvciA9IDB4MjIyMjIyO1xuXG5cdFx0d2luZG93Lm9ucmVzaXplID0gKGV2ZW50OlVJRXZlbnQpID0+IHRoaXMub25SZXNpemUoZXZlbnQpO1xuXG5cdFx0dGhpcy5pbml0TWVzaGVzKCk7XG5cdFx0dGhpcy5yYWYuc3RhcnQoKTtcblx0XHR0aGlzLm9uUmVzaXplKCk7XG5cdH1cblxuXHRwcml2YXRlIGluaXRNZXNoZXMoKTp2b2lkXG5cdHtcblxuXHRcdHZhciBwcmltaXRpdmVzOkFycmF5PFByaW1pdGl2ZVByZWZhYkJhc2U+ID0gbmV3IEFycmF5PFByaW1pdGl2ZVByZWZhYkJhc2U+KCk7XG5cdFx0cHJpbWl0aXZlcy5wdXNoKG5ldyBQcmltaXRpdmVQb2x5Z29uUHJlZmFiKCkpO1xuXHRcdHByaW1pdGl2ZXMucHVzaChuZXcgUHJpbWl0aXZlU3BoZXJlUHJlZmFiKCkpO1xuXHRcdHByaW1pdGl2ZXMucHVzaChuZXcgUHJpbWl0aXZlU3BoZXJlUHJlZmFiKCkpO1xuXHRcdHByaW1pdGl2ZXMucHVzaChuZXcgUHJpbWl0aXZlQ3lsaW5kZXJQcmVmYWIoKSk7XG5cdFx0cHJpbWl0aXZlcy5wdXNoKG5ldyBQcmltaXRpdmVQbGFuZVByZWZhYigpKTtcblx0XHRwcmltaXRpdmVzLnB1c2gobmV3IFByaW1pdGl2ZUNvbmVQcmVmYWIoKSk7XG5cdFx0cHJpbWl0aXZlcy5wdXNoKG5ldyBQcmltaXRpdmVDdWJlUHJlZmFiKCkpO1xuXG5cdFx0dmFyIG1lc2g6TWVzaDtcblxuXHRcdGZvciAodmFyIGM6bnVtYmVyID0gMDsgYyA8IHByaW1pdGl2ZXMubGVuZ3RoOyBjKyspIHtcblx0XHRcdHByaW1pdGl2ZXNbY10uZ2VvbWV0cnlUeXBlID0gXCJsaW5lU3ViR2VvbWV0cnlcIjtcblxuXHRcdFx0dmFyIHQ6bnVtYmVyID0gTWF0aC5QSSoyKmMvcHJpbWl0aXZlcy5sZW5ndGg7XG5cblx0XHRcdG1lc2ggPSA8TWVzaD4gcHJpbWl0aXZlc1tjXS5nZXROZXdPYmplY3QoKTtcblx0XHRcdG1lc2gueCA9IE1hdGguY29zKHQpKnRoaXMucmFkaXVzO1xuXHRcdFx0bWVzaC55ID0gTWF0aC5zaW4odCkqdGhpcy5yYWRpdXM7XG5cdFx0XHRtZXNoLnogPSAwO1xuXHRcdFx0bWVzaC50cmFuc2Zvcm0uc2NhbGUgPSBuZXcgVmVjdG9yM0QoMiwgMiwgMik7XG5cblx0XHRcdHRoaXMudmlldy5zY2VuZS5hZGRDaGlsZChtZXNoKTtcblx0XHRcdHRoaXMubWVzaGVzLnB1c2gobWVzaCk7XG5cdFx0fVxuXG5cblx0fVxuXG5cdHByaXZhdGUgcmVuZGVyKClcblx0e1xuXHRcdGlmKHRoaXMubWVzaGVzKVxuXHRcdFx0Zm9yICh2YXIgYzpudW1iZXIgPSAwOyBjIDwgdGhpcy5tZXNoZXMubGVuZ3RoOyBjKyspXG5cdFx0XHRcdHRoaXMubWVzaGVzW2NdLnJvdGF0aW9uWSArPSAxO1xuXG5cdFx0dGhpcy52aWV3LnJlbmRlcigpO1xuXHR9XG5cblx0cHVibGljIG9uUmVzaXplKGV2ZW50OlVJRXZlbnQgPSBudWxsKVxuXHR7XG5cdFx0dGhpcy52aWV3LnkgPSAwO1xuXHRcdHRoaXMudmlldy54ID0gMDtcblxuXHRcdHRoaXMudmlldy53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRcdHRoaXMudmlldy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdH1cbn0iXX0= \ No newline at end of file diff --git a/tests/primitives/WireframePrimitiveTest.ts b/tests/primitives/WireframePrimitiveTest.ts new file mode 100644 index 00000000..12b034b4 --- /dev/null +++ b/tests/primitives/WireframePrimitiveTest.ts @@ -0,0 +1,93 @@ +import View = require("awayjs-core/lib/containers/View"); +import Vector3D = require("awayjs-core/lib/core/geom/Vector3D"); +import Mesh = require("awayjs-core/lib/entities/Mesh"); +import PrimitivePrefabBase = require("awayjs-core/lib/prefabs/PrimitivePrefabBase"); +import PrimitivePolygonPrefab = require("awayjs-core/lib/prefabs/PrimitivePolygonPrefab"); +import PrimitiveConePrefab = require("awayjs-core/lib/prefabs/PrimitiveConePrefab"); +import PrimitiveCubePrefab = require("awayjs-core/lib/prefabs/PrimitiveCubePrefab"); +import PrimitiveCylinderPrefab = require("awayjs-core/lib/prefabs/PrimitiveCylinderPrefab"); +import PrimitivePlanePrefab = require("awayjs-core/lib/prefabs/PrimitivePlanePrefab"); +import PrimitiveSpherePrefab = require("awayjs-core/lib/prefabs/PrimitiveSpherePrefab"); +import RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +import Debug = require("awayjs-core/lib/utils/Debug"); + +import DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +import ContextGLProfile = require("awayjs-stagegl/lib/core/stagegl/ContextGLProfile"); +import TriangleMethodMaterial = require("awayjs-stagegl/lib/materials/TriangleMethodMaterial"); +import DefaultMaterialManager = require("awayjs-stagegl/lib/materials/utils/DefaultMaterialManager"); + +class WireframePrimitiveTest +{ + private view:View; + private raf:RequestAnimationFrame; + private meshes:Array = new Array(); + + private radius:number = 400; + + constructor() + { + Debug.LOG_PI_ERRORS = false; + Debug.THROW_ERRORS = false; + + this.view = new View(new DefaultRenderer(false, ContextGLProfile.BASELINE)); + this.raf = new RequestAnimationFrame(this.render, this); + + this.view.backgroundColor = 0x222222; + + window.onresize = (event:UIEvent) => this.onResize(event); + + this.initMeshes(); + this.raf.start(); + this.onResize(); + } + + private initMeshes():void + { + + var primitives:Array = new Array(); + primitives.push(new PrimitivePolygonPrefab()); + primitives.push(new PrimitiveSpherePrefab()); + primitives.push(new PrimitiveSpherePrefab()); + primitives.push(new PrimitiveCylinderPrefab()); + primitives.push(new PrimitivePlanePrefab()); + primitives.push(new PrimitiveConePrefab()); + primitives.push(new PrimitiveCubePrefab()); + + var mesh:Mesh; + + for (var c:number = 0; c < primitives.length; c++) { + primitives[c].geometryType = "lineSubGeometry"; + + var t:number = Math.PI*2*c/primitives.length; + + mesh = primitives[c].getNewObject(); + mesh.x = Math.cos(t)*this.radius; + mesh.y = Math.sin(t)*this.radius; + mesh.z = 0; + mesh.transform.scale = new Vector3D(2, 2, 2); + + this.view.scene.addChild(mesh); + this.meshes.push(mesh); + } + + + } + + private render() + { + if(this.meshes) + for (var c:number = 0; c < this.meshes.length; c++) + this.meshes[c].rotationY += 1; + + this.view.render(); + } + + public onResize(event:UIEvent = null) + { + this.view.y = 0; + this.view.x = 0; + + this.view.width = window.innerWidth; + this.view.height = window.innerHeight; + } +} \ No newline at end of file diff --git a/tests/textures/CubeTextures.js b/tests/textures/CubeTextures.js new file mode 100755 index 00000000..88086dd6 --- /dev/null +++ b/tests/textures/CubeTextures.js @@ -0,0 +1,54 @@ +var View = require("awayjs-core/lib/containers/View"); +var URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +var AssetLibrary = require("awayjs-core/lib/core/library/AssetLibrary"); +var Skybox = require("awayjs-core/lib/entities/Skybox"); +var LoaderEvent = require("awayjs-core/lib/events/LoaderEvent"); +var RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +var Debug = require("awayjs-core/lib/utils/Debug"); +var DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +var SkyboxMaterial = require("awayjs-stagegl/lib/materials/SkyboxMaterial"); +var CubeTextures = (function () { + function CubeTextures() { + var _this = this; + Debug.LOG_PI_ERRORS = false; + Debug.THROW_ERRORS = false; + this._view = new View(new DefaultRenderer()); + this._view.camera.z = -500; + this._view.camera.y = 250; + this._view.camera.rotationX = 20; + this._view.camera.projection.near = 0.5; + this._view.camera.projection.far = 14000; + this._view.backgroundColor = 0x2c2c32; + var token = AssetLibrary.load(new URLRequest('assets/CubeTextureTest.cube')); + token.addEventListener(LoaderEvent.RESOURCE_COMPLETE, function (event) { return _this.onResourceComplete(event); }); + window.onresize = function (event) { return _this.onResize(event); }; + this.onResize(); + this._timer = new RequestAnimationFrame(this.render, this); + this._timer.start(); + } + CubeTextures.prototype.onResourceComplete = function (event) { + var loader = event.target; + switch (event.url) { + case 'assets/CubeTextureTest.cube': + this._skyboxCubeTexture = loader.baseDependency.assets[0]; + this._skyboxMaterial = new SkyboxMaterial(this._skyboxCubeTexture); + this._skybox = new Skybox(this._skyboxMaterial); + this._view.scene.addChild(this._skybox); + break; + } + }; + CubeTextures.prototype.render = function (dt) { + this._view.camera.rotationY += 0.01 * dt; + this._view.render(); + }; + CubeTextures.prototype.onResize = function (event) { + if (event === void 0) { event = null; } + this._view.y = 0; + this._view.x = 0; + this._view.width = window.innerWidth; + this._view.height = window.innerHeight; + }; + return CubeTextures; +})(); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRleHR1cmVzL2N1YmV0ZXh0dXJlcy50cyJdLCJuYW1lcyI6WyJDdWJlVGV4dHVyZXMiLCJDdWJlVGV4dHVyZXMuY29uc3RydWN0b3IiLCJDdWJlVGV4dHVyZXMub25SZXNvdXJjZUNvbXBsZXRlIiwiQ3ViZVRleHR1cmVzLnJlbmRlciIsIkN1YmVUZXh0dXJlcy5vblJlc2l6ZSJdLCJtYXBwaW5ncyI6IkFBQUEsSUFBTyxJQUFJLFdBQWlCLGlDQUFpQyxDQUFDLENBQUM7QUFFL0QsSUFBTyxVQUFVLFdBQWUscUNBQXFDLENBQUMsQ0FBQztBQUN2RSxJQUFPLFlBQVksV0FBZSwyQ0FBMkMsQ0FBQyxDQUFDO0FBSy9FLElBQU8sTUFBTSxXQUFnQixpQ0FBaUMsQ0FBQyxDQUFDO0FBQ2hFLElBQU8sV0FBVyxXQUFlLG9DQUFvQyxDQUFDLENBQUM7QUFHdkUsSUFBTyxxQkFBcUIsV0FBWSw2Q0FBNkMsQ0FBQyxDQUFDO0FBQ3ZGLElBQU8sS0FBSyxXQUFnQiw2QkFBNkIsQ0FBQyxDQUFDO0FBRTNELElBQU8sZUFBZSxXQUFjLGdEQUFnRCxDQUFDLENBQUM7QUFDdEYsSUFBTyxjQUFjLFdBQWMsNkNBQTZDLENBQUMsQ0FBQztBQUVsRixJQUFNLFlBQVk7SUFTakJBLFNBVEtBLFlBQVlBO1FBQWxCQyxpQkE4RENBO1FBbkRDQSxLQUFLQSxDQUFDQSxhQUFhQSxHQUFNQSxLQUFLQSxDQUFDQTtRQUMvQkEsS0FBS0EsQ0FBQ0EsWUFBWUEsR0FBT0EsS0FBS0EsQ0FBQ0E7UUFFL0JBLElBQUlBLENBQUNBLEtBQUtBLEdBQUdBLElBQUlBLElBQUlBLENBQUNBLElBQUlBLGVBQWVBLEVBQUVBLENBQUNBLENBQUNBO1FBQzdDQSxJQUFJQSxDQUFDQSxLQUFLQSxDQUFDQSxNQUFNQSxDQUFDQSxDQUFDQSxHQUFHQSxDQUFDQSxHQUFHQSxDQUFDQTtRQUMzQkEsSUFBSUEsQ0FBQ0EsS0FBS0EsQ0FBQ0EsTUFBTUEsQ0FBQ0EsQ0FBQ0EsR0FBR0EsR0FBR0EsQ0FBQ0E7UUFD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S0FBS0EsQ0FBQ0EsTUFBTUEsR0FBR0EsTUFBTUEsQ0FBQ0EsV0FBV0EsQ0FBQ0E7SUFDeENBLENBQUNBO0lBQ0ZKLG1CQUFDQTtBQUFEQSxDQTlEQSxBQThEQ0EsSUFBQSIsImZpbGUiOiJ0ZXh0dXJlcy9DdWJlVGV4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL3JvYmJhdGVtYW4vV2Vic3Rvcm1Qcm9qZWN0cy9hd2F5anMtc3RhZ2VnbC8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlld1x0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvbnRhaW5lcnMvVmlld1wiKTtcbmltcG9ydCBWZWN0b3IzRFx0XHRcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi9jb3JlL2dlb20vVmVjdG9yM0RcIik7XG5pbXBvcnQgVVJMUmVxdWVzdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29yZS9uZXQvVVJMUmVxdWVzdFwiKTtcbmltcG9ydCBBc3NldExpYnJhcnlcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvcmUvbGlicmFyeS9Bc3NldExpYnJhcnlcIik7XG5pbXBvcnQgQXNzZXRMb2FkZXJcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2NvcmUvbGlicmFyeS9Bc3NldExvYWRlclwiKTtcbmltcG9ydCBBc3NldExvYWRlclRva2VuXHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvY29yZS9saWJyYXJ5L0Fzc2V0TG9hZGVyVG9rZW5cIik7XG5pbXBvcnQgRGlyZWN0aW9uYWxMaWdodFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2VudGl0aWVzL0RpcmVjdGlvbmFsTGlnaHRcIik7XG5pbXBvcnQgTWVzaFx0XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2VudGl0aWVzL01lc2hcIik7XG5pbXBvcnQgU2t5Ym94XHRcdFx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL2VudGl0aWVzL1NreWJveFwiKTtcbmltcG9ydCBMb2FkZXJFdmVudFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvZXZlbnRzL0xvYWRlckV2ZW50XCIpO1xuaW1wb3J0IFByaW1pdGl2ZVRvcnVzUHJlZmFiXHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3ByZWZhYnMvUHJpbWl0aXZlVG9ydXNQcmVmYWJcIik7XG5pbXBvcnQgSW1hZ2VDdWJlVGV4dHVyZVx0XHRcdFx0PSByZXF1aXJlKFwiYXdheWpzLWNvcmUvbGliL3RleHR1cmVzL0ltYWdlQ3ViZVRleHR1cmVcIik7XG5pbXBvcnQgUmVxdWVzdEFuaW1hdGlvbkZyYW1lXHRcdD0gcmVxdWlyZShcImF3YXlqcy1jb3JlL2xpYi91dGlscy9SZXF1ZXN0QW5pbWF0aW9uRnJhbWVcIik7XG5pbXBvcnQgRGVidWdcdFx0XHRcdFx0XHQ9IHJlcXVpcmUoXCJhd2F5anMtY29yZS9saWIvdXRpbHMvRGVidWdcIik7XG5cbmltcG9ydCBEZWZhdWx0UmVuZGVyZXJcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9jb3JlL3JlbmRlci9EZWZhdWx0UmVuZGVyZXJcIik7XG5pbXBvcnQgU2t5Ym94TWF0ZXJpYWxcdFx0XHRcdD0gcmVxdWlyZShcImF3YXlqcy1zdGFnZWdsL2xpYi9tYXRlcmlhbHMvU2t5Ym94TWF0ZXJpYWxcIik7XG5cbmNsYXNzIEN1YmVUZXh0dXJlc1xue1xuXHRwcml2YXRlIF92aWV3OlZpZXc7XG5cdHByaXZhdGUgX3RpbWVyOlJlcXVlc3RBbmltYXRpb25GcmFtZTtcblx0cHJpdmF0ZSBfc2t5Ym94Q3ViZVRleHR1cmU6SW1hZ2VDdWJlVGV4dHVyZTtcblx0cHJpdmF0ZSBfc2t5Ym94TWF0ZXJpYWw6U2t5Ym94TWF0ZXJpYWw7XG5cblx0cHJpdmF0ZSBfc2t5Ym94OlNreWJveDtcblxuXHRjb25zdHJ1Y3RvcigpXG5cdHtcblx0XHREZWJ1Zy5MT0dfUElfRVJST1JTICAgID0gZmFsc2U7XG5cdFx0RGVidWcuVEhST1dfRVJST1JTICAgICA9IGZhbHNlO1xuXG5cdFx0dGhpcy5fdmlldyA9IG5ldyBWaWV3KG5ldyBEZWZhdWx0UmVuZGVyZXIoKSk7XG5cdFx0dGhpcy5fdmlldy5jYW1lcmEueiA9IC01MDA7XG5cdFx0dGhpcy5fdmlldy5jYW1lcmEueVx0PSAyNTA7XG5cdFx0dGhpcy5fdmlldy5jYW1lcmEucm90YXRpb25YID0gMjA7XG5cdFx0dGhpcy5fdmlldy5jYW1lcmEucHJvamVjdGlvbi5uZWFyID0gMC41O1xuXHRcdHRoaXMuX3ZpZXcuY2FtZXJhLnByb2plY3Rpb24uZmFyID0gMTQwMDA7XG5cdFx0dGhpcy5fdmlldy5iYWNrZ3JvdW5kQ29sb3IgPSAweDJjMmMzMjtcblxuXHRcdHZhciB0b2tlbjpBc3NldExvYWRlclRva2VuID0gQXNzZXRMaWJyYXJ5LmxvYWQoIG5ldyBVUkxSZXF1ZXN0KCdhc3NldHMvQ3ViZVRleHR1cmVUZXN0LmN1YmUnKSk7XG5cdFx0dG9rZW4uYWRkRXZlbnRMaXN0ZW5lcihMb2FkZXJFdmVudC5SRVNPVVJDRV9DT01QTEVURSwgKGV2ZW50OkxvYWRlckV2ZW50KSA9PiB0aGlzLm9uUmVzb3VyY2VDb21wbGV0ZShldmVudCkpO1xuXG5cdFx0d2luZG93Lm9ucmVzaXplID0gKGV2ZW50OlVJRXZlbnQpID0+IHRoaXMub25SZXNpemUoZXZlbnQpO1xuXG5cdFx0dGhpcy5vblJlc2l6ZSgpO1xuXG5cdFx0dGhpcy5fdGltZXIgPSBuZXcgUmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmVuZGVyLCB0aGlzKTtcblx0XHR0aGlzLl90aW1lci5zdGFydCgpO1xuXHR9XG5cblx0cHVibGljIG9uUmVzb3VyY2VDb21wbGV0ZShldmVudDpMb2FkZXJFdmVudClcblx0e1xuXHRcdHZhciBsb2FkZXI6QXNzZXRMb2FkZXIgPSA8QXNzZXRMb2FkZXI+IGV2ZW50LnRhcmdldDtcblxuXHRcdHN3aXRjaChldmVudC51cmwpIHtcblx0XHRcdGNhc2UgJ2Fzc2V0cy9DdWJlVGV4dHVyZVRlc3QuY3ViZSc6XG5cdFx0XHRcdHRoaXMuX3NreWJveEN1YmVUZXh0dXJlID0gPEltYWdlQ3ViZVRleHR1cmU+IGxvYWRlci5iYXNlRGVwZW5kZW5jeS5hc3NldHNbMF07XG5cdFx0XHRcdHRoaXMuX3NreWJveE1hdGVyaWFsID0gbmV3IFNreWJveE1hdGVyaWFsKHRoaXMuX3NreWJveEN1YmVUZXh0dXJlKTtcblxuXHRcdFx0XHR0aGlzLl9za3lib3ggPSBuZXcgU2t5Ym94KHRoaXMuX3NreWJveE1hdGVyaWFsKTtcblx0XHRcdFx0dGhpcy5fdmlldy5zY2VuZS5hZGRDaGlsZCh0aGlzLl9za3lib3gpO1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgcmVuZGVyKGR0Om51bWJlcilcblx0e1xuXHRcdHRoaXMuX3ZpZXcuY2FtZXJhLnJvdGF0aW9uWSArPSAwLjAxICogZHQ7XG5cdFx0dGhpcy5fdmlldy5yZW5kZXIoKTtcblx0fVxuXG5cdHB1YmxpYyBvblJlc2l6ZShldmVudDpVSUV2ZW50ID0gbnVsbClcblx0e1xuXHRcdHRoaXMuX3ZpZXcueSA9IDA7XG5cdFx0dGhpcy5fdmlldy54ID0gMDtcblx0XHR0aGlzLl92aWV3LndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG5cdFx0dGhpcy5fdmlldy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdH1cbn0iXX0= \ No newline at end of file diff --git a/tests/textures/CubeTextures.ts b/tests/textures/CubeTextures.ts new file mode 100644 index 00000000..e85cb881 --- /dev/null +++ b/tests/textures/CubeTextures.ts @@ -0,0 +1,81 @@ +import View = require("awayjs-core/lib/containers/View"); +import Vector3D = require("awayjs-core/lib/core/geom/Vector3D"); +import URLRequest = require("awayjs-core/lib/core/net/URLRequest"); +import AssetLibrary = require("awayjs-core/lib/core/library/AssetLibrary"); +import AssetLoader = require("awayjs-core/lib/core/library/AssetLoader"); +import AssetLoaderToken = require("awayjs-core/lib/core/library/AssetLoaderToken"); +import DirectionalLight = require("awayjs-core/lib/entities/DirectionalLight"); +import Mesh = require("awayjs-core/lib/entities/Mesh"); +import Skybox = require("awayjs-core/lib/entities/Skybox"); +import LoaderEvent = require("awayjs-core/lib/events/LoaderEvent"); +import PrimitiveTorusPrefab = require("awayjs-core/lib/prefabs/PrimitiveTorusPrefab"); +import ImageCubeTexture = require("awayjs-core/lib/textures/ImageCubeTexture"); +import RequestAnimationFrame = require("awayjs-core/lib/utils/RequestAnimationFrame"); +import Debug = require("awayjs-core/lib/utils/Debug"); + +import DefaultRenderer = require("awayjs-stagegl/lib/core/render/DefaultRenderer"); +import SkyboxMaterial = require("awayjs-stagegl/lib/materials/SkyboxMaterial"); + +class CubeTextures +{ + private _view:View; + private _timer:RequestAnimationFrame; + private _skyboxCubeTexture:ImageCubeTexture; + private _skyboxMaterial:SkyboxMaterial; + + private _skybox:Skybox; + + constructor() + { + Debug.LOG_PI_ERRORS = false; + Debug.THROW_ERRORS = false; + + this._view = new View(new DefaultRenderer()); + this._view.camera.z = -500; + this._view.camera.y = 250; + this._view.camera.rotationX = 20; + this._view.camera.projection.near = 0.5; + this._view.camera.projection.far = 14000; + this._view.backgroundColor = 0x2c2c32; + + var token:AssetLoaderToken = AssetLibrary.load( new URLRequest('assets/CubeTextureTest.cube')); + token.addEventListener(LoaderEvent.RESOURCE_COMPLETE, (event:LoaderEvent) => this.onResourceComplete(event)); + + window.onresize = (event:UIEvent) => this.onResize(event); + + this.onResize(); + + this._timer = new RequestAnimationFrame(this.render, this); + this._timer.start(); + } + + public onResourceComplete(event:LoaderEvent) + { + var loader:AssetLoader = event.target; + + switch(event.url) { + case 'assets/CubeTextureTest.cube': + this._skyboxCubeTexture = loader.baseDependency.assets[0]; + this._skyboxMaterial = new SkyboxMaterial(this._skyboxCubeTexture); + + this._skybox = new Skybox(this._skyboxMaterial); + this._view.scene.addChild(this._skybox); + + break; + } + } + + private render(dt:number) + { + this._view.camera.rotationY += 0.01 * dt; + this._view.render(); + } + + public onResize(event:UIEvent = null) + { + this._view.y = 0; + this._view.x = 0; + this._view.width = window.innerWidth; + this._view.height = window.innerHeight; + } +} \ No newline at end of file