framework2

Форк
0
107 строк · 4.1 Кб
1
/*
2
 *  ZoomBlurPass.cpp
3
 *
4
 *  Copyright (c) 2013, satcy, http://satcy.net
5
 *  All rights reserved. 
6
 *  
7
 *  Redistribution and use in source and binary forms, with or without 
8
 *  modification, are permitted provided that the following conditions are met: 
9
 *  
10
 *  * Redistributions of source code must retain the above copyright notice, 
11
 *    this list of conditions and the following disclaimer. 
12
 *  * Redistributions in binary form must reproduce the above copyright 
13
 *    notice, this list of conditions and the following disclaimer in the 
14
 *    documentation and/or other materials provided with the distribution. 
15
 *  * Neither the name of Neil Mendoza nor the names of its contributors may be used 
16
 *    to endorse or promote products derived from this software without 
17
 *    specific prior written permission. 
18
 *  
19
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
20
 *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
21
 *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
22
 *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
23
 *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
24
 *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
25
 *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
26
 *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
27
 *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
28
 *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
29
 *  POSSIBILITY OF SUCH DAMAGE. 
30
 *
31
 */
32
#include "ZoomBlurPass.h"
33
#include "ofMain.h"
34

35
namespace itg
36
{
37
    ZoomBlurPass::ZoomBlurPass(const ofVec2f& aspect, bool arb, float centerX, float centerY,
38
                                   float exposure, float decay, float density,
39
                                   float weight, float clamp) :
40
        centerX(centerX), centerY(centerY), exposure(exposure), decay(decay), density(density), weight(weight), clamp(clamp), RenderPass(aspect, arb, "zoomblur")
41
    {
42
        
43
        string fragShaderSrc = STRINGIFY(
44
            uniform sampler2D tDiffuse;
45

46
            uniform float fX;
47
            uniform float fY;
48
            uniform float fExposure;
49
            uniform float fDecay;
50
            uniform float fDensity;
51
            uniform float fWeight;
52
            uniform float fClamp;
53

54
            const int iSamples = 20;
55

56
            void main()
57
            {
58
                vec2 vUv = gl_TexCoord[0].st;
59
                vec2 deltaTextCoord = vec2(vUv - vec2(fX,fY));
60
                deltaTextCoord *= 1.0 /  float(iSamples) * fDensity;
61
                vec2 coord = vUv;
62
                float illuminationDecay = 1.0;
63
                vec4 FragColor = vec4(0.0);
64

65
                for(int i=0; i < iSamples ; i++)
66
                {
67
                    coord -= deltaTextCoord;
68
                    vec4 texel = texture2D(tDiffuse, coord);
69
                    texel *= illuminationDecay * fWeight;
70

71
                    FragColor += texel;
72

73
                    illuminationDecay *= fDecay;
74
                }
75
                FragColor *= fExposure;
76
                FragColor = clamp(FragColor, 0.0, fClamp);
77
                gl_FragColor = FragColor;
78
            }
79
        );
80
        
81
        shader.setupShaderFromSource(GL_FRAGMENT_SHADER, fragShaderSrc);
82
        shader.linkProgram();
83
        
84
    }
85
    
86
    void ZoomBlurPass::render(ofFbo& readFbo, ofFbo& writeFbo, ofTexture& depthTex)
87
    {
88
        writeFbo.begin();
89
        
90
        
91
        shader.begin();
92
        
93
        shader.setUniformTexture("tDiffuse", readFbo.getTexture(), 0);
94
        shader.setUniform1f("fX", centerX);
95
        shader.setUniform1f("fY", centerY);
96
        shader.setUniform1f("fExposure", exposure);
97
        shader.setUniform1f("fDecay", decay);
98
        shader.setUniform1f("fDensity", density);
99
        shader.setUniform1f("fWeight", weight);
100
        shader.setUniform1f("fClamp", clamp);
101
        
102
        texturedQuad(0, 0, writeFbo.getWidth(), writeFbo.getHeight());
103
        
104
        shader.end();
105
        writeFbo.end();
106
    }
107
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.