392ac980 |
1 | // Created on: 2013-10-10 |
2 | // Created by: Denis BOGOLEPOV |
d5f74e42 |
3 | // Copyright (c) 2013-2014 OPEN CASCADE SAS |
392ac980 |
4 | // |
973c2be1 |
5 | // This file is part of Open CASCADE Technology software library. |
392ac980 |
6 | // |
d5f74e42 |
7 | // This library is free software; you can redistribute it and/or modify it under |
8 | // the terms of the GNU Lesser General Public License version 2.1 as published |
973c2be1 |
9 | // by the Free Software Foundation, with special exception defined in the file |
10 | // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT |
11 | // distribution for complete text of the license and disclaimer of any warranty. |
392ac980 |
12 | // |
973c2be1 |
13 | // Alternatively, this file may be used under the terms of Open CASCADE |
14 | // commercial license or contractual agreement. |
392ac980 |
15 | |
5495fa7e |
16 | varying vec3 View; //!< Direction to the viewer |
17 | varying vec3 Normal; //!< Vertex normal in view space |
18 | varying vec4 Position; //!< Vertex position in view space |
19 | varying vec4 PositionWorld; //!< Vertex position in world space |
392ac980 |
20 | |
12381341 |
21 | //! Computes the normal in view space |
392ac980 |
22 | vec3 TransformNormal (in vec3 theNormal) |
23 | { |
12381341 |
24 | vec4 aResult = occWorldViewMatrixInverseTranspose |
25 | * occModelWorldMatrixInverseTranspose |
26 | * vec4 (theNormal, 0.0); |
392ac980 |
27 | return normalize (aResult.xyz); |
28 | } |
29 | |
12381341 |
30 | //! Entry point to the Vertex Shader |
392ac980 |
31 | void main() |
32 | { |
5495fa7e |
33 | PositionWorld = occModelWorldMatrix * occVertex; |
34 | Position = occWorldViewMatrix * PositionWorld; |
35 | Normal = TransformNormal (occNormal); |
12381341 |
36 | |
37 | // Note: The specified view vector is absolutely correct only for the orthogonal projection. |
38 | // For perspective projection it will be approximate, but it is in good agreement with the OpenGL calculations. |
392ac980 |
39 | View = vec3 (0.0, 0.0, 1.0); |
40 | |
41 | // Do fixed functionality vertex transform |
42 | gl_Position = occProjectionMatrix * occWorldViewMatrix * occModelWorldMatrix * occVertex; |
43 | } |