8e0a2b19 |
1 | puts "========" |
2 | puts "0029074: Visualization, TKOpenGl - support Geometry Shader definition" |
3 | puts "========" |
4 | |
5 | pload MODELING VISUALIZATION |
6 | |
7 | set aShaderVert " |
8 | out vec4 VertColor; |
9 | void main() { |
10 | VertColor = occColor; |
11 | gl_Position = occVertex; |
12 | }" |
13 | |
14 | # define a Geometry shader drawing shrinked triangles |
15 | set aShaderGeom " |
16 | layout(triangles) in; |
17 | layout(triangle_strip, max_vertices=3) out; |
18 | in vec4 VertColor\[3\]; |
19 | out vec4 Color; |
20 | void main() { |
21 | mat4 aMat = occProjectionMatrix * occWorldViewMatrix * occModelWorldMatrix; |
22 | vec3 aCenter = vec3 (0.0, 0.0, 0.0); |
23 | for (int aTriVertIter = 0; aTriVertIter < 3; ++aTriVertIter) { |
24 | aCenter += gl_in\[aTriVertIter\].gl_Position.xyz; |
25 | } |
26 | aCenter /= 3.0; |
27 | for (int aTriVertIter = 0; aTriVertIter < 3; ++aTriVertIter) { |
28 | vec3 aVec = gl_in\[aTriVertIter\].gl_Position.xyz - aCenter; |
29 | vec3 aVertRes = aCenter + normalize (aVec) * length (aVec) * 0.75; |
30 | gl_Position = aMat * vec4 (aVertRes, 1.0); |
31 | Color = VertColor\[aTriVertIter\] * 2.0; |
32 | EmitVertex(); |
33 | } |
34 | EndPrimitive(); |
35 | }" |
36 | |
37 | set aShaderFrag " |
38 | in vec4 Color; |
39 | void main() { |
40 | occFragColor = Color; |
41 | }" |
42 | |
43 | # draw a box |
44 | box b 1 2 3 |
45 | vcaps -core |
46 | vclear |
47 | vinit View1 |
48 | vaxo |
49 | vdisplay -dispMode 1 -mutable b |
50 | vfit |
51 | vrotate 0.2 0.0 0.0 |
52 | vdump $::imagedir/${::casename}_normal.png |
53 | |
54 | vshaderprog b -vert $aShaderVert -geom $aShaderGeom -frag $aShaderFrag |
55 | vdump $::imagedir/${::casename}_geom.png |