Comments 48
Ну какое это гиперпространство, это виденье Лукаса как будут выглядеть звезды на высоких скоростях, а на самом деле это совсем не правда ведь :-) Эффект Доплера никто еще не отменял.
Да, я прекрасно понимаю что в реальности все должно выглядеть по другому, но согласитесь эффект узнаваем и, за счет фильмов про звездные перелеты, ожидаем.
А как на самом деле это должно выглядеть?
Что за вопрос, любой школьник знает как на самом деле выглядит гиперпространство :)
www.youtube.com/watch?v=lD08CuUi_Ek
где-то около 6:45 именно на эту тему
где-то около 6:45 именно на эту тему
Во-первых, вы капельку ошиблись со временем. Во-вторых, ю-тюб позволяет давать ссылки на конкретное время в ролике. По ссылке ниже — кусок вашего видео про путешествие от Земли к Луне со скоростью, близкой к скорости света. www.youtube.com/watch?feature=player_detailpage&v=lD08CuUi_Ek#t=469s
Чем ближе к скорости света, тем меньше вы сможете увидеть по краям, а будет видно при взгляде по направлению движения, при увеличении скорости в направлении источника света, волна будет становиться короче и соответственно будет смещаться в фиолетовую сторону, по сути будет фиолетовое пятно по направлению движения, если наоборот двигаться от источника света, то смещаться будет в сторону красного цвета, длинна волны будет увеличиваться. В итоге летите, впереди фиолетовое пятно, сзади красное, по бокам чернота.
Время замедлится на скоростях близких к скорости света, поэтому человек вероятнее всего ничего не увидет, а записывающее устройство не успеет сработать :)
У меня почему-то дикие тормоза при просмотре примера на libCanvas. А так всё очень даже хорошо!
У меня с libcanvas заметно тормозит, еще и все серое. (Chromium 25.0.1364.160 Ubuntu 12.04)
С pure JS все красиво и плавно работает.
С pure JS все красиво и плавно работает.
В libCanvas это я поставил цвет звезд серый, когда писал — думала только на время, но в итоге забыл поставить обратно белый, сейчас исправлю.
У меня нативный вариант все равно работает раз в 5 быстрее.
Опера 12.15
В Chrome видно разницу на глаз, но не так разительно как в Опера.
Опера 12.15
В Chrome видно разницу на глаз, но не так разительно как в Опера.
IE10 версия libCanvas не работает вообще.
Сценарий из raw.github.com/theshock/libcanvas/master/libcanvas-full-compiled.js был заблокирован из-за несоответствия типа MIME
Исправить очень легко — брать файлы с другого места:
jsfiddle.net/UM3vR/27/
Но это очередной фейл IE, имхо.
Пророчу выходные различных гиперпространств на JS.
Странно, что точки резко останавливаются на определенном месте и ждут, когда хвост растворится. По идее, «голова» тоже должна плавно растворяться, не прекращая движения.
Сразу вспомнился скринсейвер звезды в windows 3.1 и 9.x
Гиперпространство это когда мы перемещаемся не с большой скоростью, а когда мы перемещаемся в другом пространстве. А у Лукаса и у вас получилась просто скорость света типа. Вот в Вавилоне 5 было гиперпространство.
Я примерно такого же эффекта добивался вот в этой визуализации (только визуализация без версии).
Тут только не звезды а денежные займы от одной стране к другой. Библиотека d3.js для расчета физики.
Тут только не звезды а денежные займы от одной стране к другой. Библиотека d3.js для расчета физики.
Отличная идея и реализация.
Почему у вас африканские займы идут куда-то в Гренландию? Я сначала прифигел, как страна денег гребет :)
По каким то причинам у некоторых стран в БД world bank корректных координат или допустим данные по всему региону… поэтому я не могу привязать правильно координаты столицы странны и вывожу подобные страны вверху, там где ничего нет.
Было бы круто добавить интерактива — новые вычисления запускать относительно последнего положения курсора ( или по вектору).
Как-то так? jsfiddle.net/agegorin/gdK8Z/
Эх, как будто космонавтов больше нет, одни астронавты… У нас в городе даже как-то раз повесили рекламу на английском, вместо шоссе Космонавтов написали Astronauts avenue.
Позвольте внести правки в ваш код на LibCanvas
результат — значительное повышение скорости.
Прикол в том, что по-умолчанию библиотека считает «Dirty Rectangles», что в даном случае, очевидно, не очень выгодный подход в плане производительности.
Ну и несколько мелочей — вместо Path можно использовать Polygon
Вместо getRandomInt использовать встроенную Number.random
Вместо setInterval atom.frame.add
jsfiddle.net/UM3vR/15/
Жаль, что функциональность не совсем та, что в оригинальных примерах, а в целом — прикольно)
helper = new App.Light(new Size( width, height ));
// =>
helper = new App.Light(new Size( width, height), { intersection: 'full' });
результат — значительное повышение скорости.
Прикол в том, что по-умолчанию библиотека считает «Dirty Rectangles», что в даном случае, очевидно, не очень выгодный подход в плане производительности.
Ну и несколько мелочей — вместо Path можно использовать Polygon
Вместо getRandomInt использовать встроенную Number.random
Вместо setInterval atom.frame.add
jsfiddle.net/UM3vR/15/
Жаль, что функциональность не совсем та, что в оригинальных примерах, а в целом — прикольно)
Вот именно этого комментария я и ждал. =)
Так и знал что я что-то упустил при написании кода.
Спасибо, буду дальше углубляться в LibCanvas и Atom.
Так и знал что я что-то упустил при написании кода.
Спасибо, буду дальше углубляться в LibCanvas и Atom.
Ну тогда я бы сделал это так:
Вынес создание и настройки звезды в отдельный класс, дал бы ей различные скорость, цвет и время жизни, со временем определённые звёзды удалял бы:
Изначально звёзд создать поменьше, а потом добавлять в каджом кадре
Код стал лаконичнее и читабельнее. В браузере выглядит красиво и работает быстро. Особенно приятно смотрится fullScreen
Добавите в топик обновлённый код?
Не против, если я добавлю этот пример в репозиторий примеров на ГитХабе?
Вынес создание и настройки звезды в отдельный класс, дал бы ей различные скорость, цвет и время жизни, со временем определённые звёзды удалял бы:
atom.declare( 'Star', App.Element, {
progress: 0,
opacity: 1,
configure: function () {
var screenRectangle = this.layer.ctx.rectangle;
this.animate = new atom.Animatable(this).animate;
this.from = screenRectangle.getRandomPoint();
this.shape = new Polygon(this.from.clone(), this.from.clone(), this.from.clone());
this.angle = -this.from.angleTo(screenRectangle.center);
this.sin = this.angle.sin();
this.cos = this.angle.cos();
this.progressSpeed = Math.random() + 0.5;
this.color = new atom.Color(128, 128, Number.random(128, 192)).toString();
setTimeout(this.fadeOut.bind(this), Number.random(1000, 8000));
},
fadeOut: function () {
this.animate({
time: 2000,
props: { opacity: 0 },
onComplete: this.destroy
});
},
onUpdate: function () {
var sin = this.sin, cos = this.cos, p = this.shape.points;
this.progress += this.progressSpeed;
p[1].x = p[0].x + this.progress * cos;
p[1].y = p[0].y - this.progress * sin;
p[2].x = p[1].x + 2 * sin;
p[2].y = p[1].y + 2 * cos;
this.redraw();
},
renderTo: function (ctx) {
ctx.save();
if (this.opacity < 1) ctx.set({ globalAlpha: this.opacity });
ctx.fill( this.shape, this.color );
ctx.restore();
}
});
Изначально звёзд создать поменьше, а потом добавлять в каджом кадре
new function () {
var helper = new App.Light(
new Size(document.width || 800, document.height || 800),
{ intersection: 'full', invoke: true }
);
for(i = 0; i < 200; i++) new Star(helper.layer);
atom.frame.add(function () {
new Star(helper.layer);
});
};
Код стал лаконичнее и читабельнее. В браузере выглядит красиво и работает быстро. Особенно приятно смотрится fullScreen
Добавите в топик обновлённый код?
Не против, если я добавлю этот пример в репозиторий примеров на ГитХабе?
Да, сейчас добавлю Ваш вариант в статью.
И нет, я не против того, что бы пример был в репозитории. Буду даже польщен =)
И нет, я не против того, что бы пример был в репозитории. Буду даже польщен =)
Я на самом деле забыл добавить зависимости от времени:
Например, теперь при открытии другой вкладки и возвращении не будет пустое поле. Прикол в том, что браузеры замедляют обновление до «раз в секунду» в неактивных вкладках, потому это стоит отдельно просчитывать.
Например, теперь при открытии другой вкладки и возвращении не будет пустое поле. Прикол в том, что браузеры замедляют обновление до «раз в секунду» в неактивных вкладках, потому это стоит отдельно просчитывать.
Час ждал, но обломки Алдерана так и не появились. FireFox 20.0.1, прошу пофиксить
После вашей демки захотелось космический симулятор вроде Descent: freespace, но в браузере.
когда вижу словосочетание canvas + анимация, вместе с примером наслаждаюсь графиком CPU
Нашел у знакомого в Твиттере: slonique.net
Может кому-то пригодится: реализация варп-прыжка
Sign up to leave a comment.
Гиперпространство на JavaScript