framework2

Форк
0
103 строки · 4.1 Кб
1
/*
2
 *  RimHighlightingPass.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 "RimHighlightingPass.h"
33

34
namespace itg
35
{
36
    RimHighlightingPass::RimHighlightingPass(const ofVec2f& aspect, bool arb) :
37
        RenderPass(aspect, arb, "rimhighlighting")
38
    {
39
        string vertShaderSrc = STRINGIFY(
40
                                         varying vec3 normal;
41
                                         varying vec3 sides;
42
                                         varying vec2 v_texCoord;
43
                                         varying vec4 v_color;
44
                                         
45
                                         void main()
46
        {
47
            normal = gl_NormalMatrix * gl_Normal;
48
            gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
49
            sides = gl_Position.xyz;
50
            sides.x = sides.x - 128.0;
51
            
52
            v_texCoord = vec2(gl_MultiTexCoord0);
53
            v_color = gl_Color;
54
        }
55
                                         );
56
        
57
        string fragShaderSrc = STRINGIFY(
58
                                         varying vec3 normal;
59
                                         varying vec3 sides;
60
                                         varying vec2 v_texCoord;
61
                                         uniform sampler2D myTexture;
62
                                         varying vec4 v_color;
63
                                         
64
                                         void main()
65
        {
66
            float intensity;
67
            vec3 n = normalize(normal);
68
            vec4 color;
69
            intensity = dot(sides,n);
70
            
71
            gl_FragColor = texture2D(myTexture, v_texCoord);
72
            if (intensity >= 64.0)
73
            {
74
                gl_FragColor.b = gl_FragColor.b / 1.5;
75
                gl_FragColor.r = gl_FragColor.r * 1.5;
76
                gl_FragColor.g = gl_FragColor.g * 1.25;
77
            }
78
            else
79
            {
80
                gl_FragColor = gl_FragColor * v_color;
81
            }
82
        }
83
        );
84
        
85
        shader.setupShaderFromSource(GL_VERTEX_SHADER, vertShaderSrc);
86
        shader.setupShaderFromSource(GL_FRAGMENT_SHADER, fragShaderSrc);
87
        shader.linkProgram();
88

89
    }
90
    
91
    void RimHighlightingPass::render(ofFbo& readFbo, ofFbo& writeFbo)
92
    {
93
        writeFbo.begin();
94
        
95
        shader.begin();
96
        shader.setUniformTexture("myTexture", readFbo.getTexture(), 0);
97
        
98
        texturedQuad(0, 0, writeFbo.getWidth(), writeFbo.getHeight());
99
        
100
        shader.end();
101
        writeFbo.end();
102
    }
103
}
104

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

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

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

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