![]() |
|
||||||||||
|
|||||
|
Регистрация: Sep 2009
Сообщений: 127
|
Привет всем, в общем, возникла необходимость сделать эффект лупы, как в играх жанра hidden object, типа вот этой - http://vkontakte.ru/app1995682, но сколько не бился, так и не смог понять, как это вообще сделать.
Чувствую, что решение очень простое, но не идет, и все тут.. |
|
|||||
|
Регистрация: Mar 2011
Сообщений: 21
|
Например, такой вариант. Создаем увеличенное изображение и накладываем круглую маску с размерами лупы. При движении лупы двигаем маску. В итоге лупа показывает увеличенное изображение.
__________________
Пытаюсь делать игры для детей |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Не самый лучший вариант. Изображение еще и двигать нужно будет.
Здесь по-лучше: http://active.tutsplus.com/tutorials...tionscript-30/ |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 127
|
goodguy, вариант не подойдет, потому что то, что внутри лупы будет размазанным и нечетким
![]() dodoaav, думаю, стоит попробовать, спасибо за идею, но все равно думаю, есть какая-то более простой способ, этот может быть очень затратным, особенно, если придется передвигать крупный объект.. |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
|
|
|||||
|
Регистрация: Sep 2009
Сообщений: 127
|
goodguy, как я понял, увеличивается не часть изображения, а берется рисуется битмапка, и затем она увеличивается. Это неплохо, когда увеличение должно быть небольшое, но когда нужно значительно увеличить часть уменьшенного изображения, это неподходит
Просто сравните, какой пример у него и как это сделано в приложении-рефференсе.Добавлено через 31 секунду Впрочем, я могу ошибаться ^^ |
|
|||||
|
Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
|
|
|
|||||
|
Регистрация: Sep 2009
Сообщений: 127
|
Хороший вариант, но я посмотрел исходники - он берет пиксели, которые отображаются на экране, а не пиксели исходного изображение, как следствие, при увеличении в 2 раза (как в рефференсе), видна пикселизация.
Добавлено через 20 минут Нашел неплохое готовое решение, ИМХО, то, что нужно: http://www.flabell.com/products/thanks_user/218 Добавлено через 36 минут Мда, похоже, это тот же самый вариант, который предлагал dodoaav... Придется писать велосипед ^^ |
|
|||||
|
Регистрация: Oct 2010
Адрес: Новосиб
Сообщений: 122
|
да вы правы =(
Тогда такой вариант... фильтр должен не увеличивать а уменьшать всё что за окружностью, сейчас набросаю.. <languageVersion : 1.0;>
kernel NewFilter
< namespace : "lense filter";
vendor : "kseniya_slyazina@mail.ru";
version : 1;
description : "lense";
>
{
parameter float r_index
<
minValue: -1.0;
maxValue: 1.0;
defaultValue: -1.0;
description: "";
>;
parameter float thickness
<
minValue: 2.0;
maxValue: 300.0;
defaultValue: 200.0;
description: "";
>;
parameter float radius
<
minValue: 0.0;
maxValue: 2880.0;
defaultValue: 0.0;
description: "";
>;
input image4 source;
output pixel4 result;
parameter float2 center
<
minValue: float2(0.0);
maxValue: float2(2880.0);
defaultValue: float2(230.0,172.8);
description: "";
>;
const float sqrt_2 = 1.414213562;
const float pi = 3.14159265;
void evaluatePixel()
{
float2 out_cor = outCoord();
float2 out_vector = out_cor - center;
float len = length( out_vector );
if( len > radius - thickness/2.0 && len > radius + thickness/2.0 ){
float d_center = len - radius;
float z = sqrt( thickness*thickness + d_center+d_center );
out_cor -= out_vector/len*z*tan( atan(d_center/z)*r_index);
}
result = sampleLinear(source,out_cor);
}
}
Последний раз редактировалось kseniya; 03.04.2011 в 21:49. |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 127
|
kseniya, к сожалению, я не очень разбираюсь в PixelBender, попробовал адаптировать ваш код под ваш пример, но картинка осталось такой же..
|
![]() |
![]() |
Часовой пояс GMT +4, время: 10:45. |
|
|
« Предыдущая тема | Следующая тема » |
|
|