ゲームグラフィックス特論 第14回

2,433 views
2,400 views

Published on

geometry shader

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,433
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
81
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

ゲームグラフィックス特論 第14回

  1. 1. 14
  2. 2. GPU 2
  3. 3. 3 out in out inoutin ラスタライザ ラスタライザ バーテックス シェーダ フラグメント シェーダ バーテックス シェーダ ジオメトリシ ェーダ フラグメント シェーダ
  4. 4. OpenGL 4 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5
  5. 5. 0 1 2 3 4 5 GL_TRIANGLE_STRIP_ADJACENCY 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 910 11 6 7 8 9 10 11 GL_TRIANGLES_ADJACENCY GL_LINE_STRIP_ADJACENCYGL_LINES_ADJACENCY 5
  6. 6. 6 GL_LINES GL_LINES_ADJACENCY GL_TRIANGLES GL_POINTS GL_LINE_STRIP GL_TRIANGLES_ADJACENCY GL_TRIANGLE_STRIP GL_POINTS
  7. 7. 7 描画する基本図形 GL_LINE_STRIP 入力基本図形 GL_LINES 出力基本図形 GL_LINE_STRIP ジオメトリ シェーダ バーテックス シェーダ 0 1 2 3 0 1 1 2 2 3 0 1 1 2 2 3
  8. 8. 8 描画する基本図形 GL_LINE_STRIP_ ADJACENCY 入力基本図形 GL_LINES_ADJA CENCY 出力基本図形 GL_LINE_STRIP ジオメトリ シェーダ バーテックス シェーダ 0 5 0 2 3 1 2 3 4 1 5 2 3 4 2 1 2 3 3 4 2 3 4 1
  9. 9. GL_POINTS GL_POINTS 1 GL_LINES GL_LINES 2GL_LINE_STRIP GL_LINE_LOOP GL_LINES_ADJACENCY GL_LINES_ADJACENCY 4 GL_LINE_STRIP_ADJACENCY GL_TRIANGLES GL_TRIANGLES 3GL_TRIANGLE_FAN GL_TRIANGLE_STRIP GL_TRIANGLES_ADJACENCY GL_TRIANGLES_ADJACENCY 6 GL_TRIANGLE_STRIP_ADJACENCY 9
  10. 10. •  •  GLint vertices, components;! •  •  glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES, &vertices); •  •  glGetIntegerv(GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPON ENTS, &components); •  •  •  components÷( ) vertices 10
  11. 11. // ! … ! ! // ! glProgramParameteri(program, GL_GEOMETRY_INPUT_TYPE, input);! // ! glProgramParameteri(program, GL_GEOMETRY_OUTPUT_TYPE, output);! // ! GLint vertices, components;! // ! glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES, &vertices);! // ! glGetIntegerv(GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, &components);! components /= 12; // out vec4 × 3 ! // ! if (vertices > components) vertices = components;! glProgramParameteri(program, GL_GEOMETRY_VERTICES_OUT, vertices);! ! // ! …! 11
  12. 12. •  GL_MAX_GEOMETRY_OUTPUT_VERTICES 1024 GL_GEOMETRY_VERTICES_OUT •  •  EmitVertex() •  GL_GEOMETRY_VERTICES_OUT out •  EmitVertex() out •  12 layout(triangles) in;! layout(triangle_strip, max_vertices = 10) out;!
  13. 13. #version 150 core! #extension GL_ARB_explicit_attrib_location : enable! ! uniform mat4 mc; // ! ! layout (location = 0) in vec4 pv; // ! layout (location = 1) in vec4 cv; // ! ! out vec4 vc; // ! ! void main(void)! {! vc = cv; // ! gl_Position = mc * pv; // ! }! 13
  14. 14. #version 150 core! ! layout (triangles) in;! layout (triangle_strip, max_vertices = 16) out;! ! in vec4 vc[]; // ! out vec4 cf; // ! ! void main(void)! {! for (int i = 0; i < gl_in.length(); ++i)! {! cf = vc[i]; // ! gl_Position = gl_in[i].gl_Position; // ! EmitVertex();! }! EndPrimitive();! }! 14
  15. 15. in , out 15 out in out inoutin ラスタライザ ラスタライザ バーテックス シェーダ フラグメント シェーダ バーテックス シェーダ ジオメトリシ ェーダ フラグメント シェーダ
  16. 16. #version 150 core! #extension GL_ARB_explicit_attrib_location : enable! ! in vec4 cf; // ! ! layout (location = 0) out vec4 fc; // ! ! void main(void)! {! fc = cf;! }! 16
  17. 17. gl_in.length() •  •  •  GL_GEOMETRY_INPUT_TYPE •  GL_POINTS •  gl_in.length() = 1 •  GL_LINES •  gl_in.length() = 2 •  GL_LINES_ADJACENCY •  gl_in.length() = 4 •  GL_TRIANGLES •  gl_in.length() = 3 •  GL_TRIANGLES_ADJACENCY •  gl_in.length() = 6 17
  18. 18. EmitVertex() •  •  gl_Position out •  GL_GEOMETRY_OUTPUT_TYPE •  GL_POINTS •  EmitVertex() 1 •  GL_LINE_STRIP •  EmitVertex() 2 •  GL_TRIANGLE_STRIP •  EmitVertex() 3 •  EmitVertex() 18
  19. 19. EndPrimitive() EndPrimitive() EndPrimitive() 19 EmitVertex() EmitVertex() EmitVertex() EmitVertex() EmitVertex() EmitVertex() EmitVertex() EmitVertex() EmitVertex() EmitVertex() EmitVertex() EmitVertex() EmitVertex() EmitVertex() EndPrimitive()GL_LINE_STRIP GL_TRIANGLE_STRIP
  20. 20. •  GL_POINTS •  https://github.com/tokoik/ggsample14 •  sphere.geom •  point.geom •  A601/A803 PC 85 •  point.geom •  sphere.geom •  tokoi@sys.wakayama-u.ac.jp 20
  21. 21. (0, 0, 1) (0, 0, -1) (-1, 0, 0) (0, 1, 0) (0, -1, 0) (1, 0, 0) •  •  •  GL_TRIANGLE_ST RIP 21

×