Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Программный эффект лупы (http://www.flasher.ru/forum/showthread.php?t=153470)

ratin 03.04.2011 15:31

Программный эффект лупы
 
Привет всем, в общем, возникла необходимость сделать эффект лупы, как в играх жанра hidden object, типа вот этой - http://vkontakte.ru/app1995682, но сколько не бился, так и не смог понять, как это вообще сделать.

Чувствую, что решение очень простое, но не идет, и все тут..

dodoaav 03.04.2011 15:35

Например, такой вариант. Создаем увеличенное изображение и накладываем круглую маску с размерами лупы. При движении лупы двигаем маску. В итоге лупа показывает увеличенное изображение.

goodguy 03.04.2011 15:56

Не самый лучший вариант. Изображение еще и двигать нужно будет.
Здесь по-лучше: http://active.tutsplus.com/tutorials...tionscript-30/

ratin 03.04.2011 17:27

goodguy, вариант не подойдет, потому что то, что внутри лупы будет размазанным и нечетким:(

dodoaav, думаю, стоит попробовать, спасибо за идею, но все равно думаю, есть какая-то более простой способ, этот может быть очень затратным, особенно, если придется передвигать крупный объект..

goodguy 03.04.2011 17:56

Цитата:

goodguy, вариант не подойдет, потому что то, что внутри лупы будет размазанным и нечетким
С чего бы это?

ratin 03.04.2011 18:10

goodguy, как я понял, увеличивается не часть изображения, а берется рисуется битмапка, и затем она увеличивается. Это неплохо, когда увеличение должно быть небольшое, но когда нужно значительно увеличить часть уменьшенного изображения, это неподходит:( Просто сравните, какой пример у него и как это сделано в приложении-рефференсе.

Добавлено через 31 секунду
Впрочем, я могу ошибаться ^^

kseniya 03.04.2011 19:27

http://www.adobe.com/cfusion/exchang...extid=1698089#

ratin 03.04.2011 20:25

Хороший вариант, но я посмотрел исходники - он берет пиксели, которые отображаются на экране, а не пиксели исходного изображение, как следствие, при увеличении в 2 раза (как в рефференсе), видна пикселизация.

Добавлено через 20 минут
Нашел неплохое готовое решение, ИМХО, то, что нужно: http://www.flabell.com/products/thanks_user/218

Добавлено через 36 минут
Мда, похоже, это тот же самый вариант, который предлагал dodoaav... Придется писать велосипед ^^

kseniya 03.04.2011 21:09

да вы правы =(
Тогда такой вариант... фильтр должен не увеличивать а уменьшать всё что за окружностью, сейчас набросаю..

Код:

<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);
    }
}


ratin 03.04.2011 22:32

kseniya, к сожалению, я не очень разбираюсь в PixelBender, попробовал адаптировать ваш код под ваш пример, но картинка осталось такой же..


Часовой пояс GMT +4, время: 19:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.