OSDN Git Service

749b6e0896b63144824205c5f076e6fc3a2fd0f0
[meshio/pymeshio.git] / examples / opengl / vertexarray.py
1 #!/usr/bin/python\r
2 # coding: utf-8\r
3 \r
4 from OpenGL.GL import *\r
5 \r
6 '''\r
7 頂点配列\r
8 \r
9 ====\r
10 属性\r
11 ====\r
12 * 位置\r
13 '''\r
14 class VertexArray(object):\r
15     def __init__(self, vertices):\r
16         self.vertices=vertices\r
17 \r
18     def __str__(self):\r
19         return "<VertexArray %d>" % len(self.vertices)\r
20 \r
21     def draw(self):\r
22         # 位置属性\r
23         glEnableClientState(GL_VERTEX_ARRAY)\r
24         glVertexPointer(3, GL_FLOAT, 0, self.vertices)\r
25         # 描画\r
26         glDrawArrays(GL_TRIANGLES, 0, len(self.vertices))\r
27         # 後始末\r
28         glDisableClientState(GL_VERTEX_ARRAY)\r
29 \r
30 \r
31 \r
32 '''\r
33 頂点配列\r
34 \r
35 ====\r
36 属性\r
37 ====\r
38 * 位置\r
39 * UV\r
40 '''\r
41 class VertexArrayWithUV(object):\r
42     def __init__(self, vertices, uvarray):\r
43         self.vertices=vertices\r
44         self.uvarray=uvarray\r
45 \r
46     def __str__(self):\r
47         return "<VertexArrayWithUV %d>" % len(self.vertices)\r
48 \r
49     def draw(self):\r
50         # 位置属性\r
51         glEnableClientState(GL_VERTEX_ARRAY)\r
52         glVertexPointer(3, GL_FLOAT, 0, self.vertices)\r
53         # UV属性\r
54         glEnableClientState(GL_TEXTURE_COORD_ARRAY)\r
55         glTexCoordPointer(2, GL_FLOAT, 0, self.uvarray)\r
56         # 描画\r
57         triangle_count=int(len(self.vertices)/3)\r
58         glDrawArrays(GL_TRIANGLES, 0, triangle_count)\r
59         # 後始末\r
60         glDisableClientState(GL_TEXTURE_COORD_ARRAY)\r
61         glDisableClientState(GL_VERTEX_ARRAY)\r
62 \r
63 \r
64 '''\r
65 インデックス参照頂点配列\r
66 \r
67 ====\r
68 属性\r
69 ====\r
70 * 位置\r
71 '''\r
72 class IndexedVertexArray(object):\r
73     def __init__(self, vertices, indices):\r
74         self.vertices=vertices\r
75         self.indices=indices\r
76 \r
77     def draw(self):\r
78         # 位置属性\r
79         glEnableClientState(GL_VERTEX_ARRAY)\r
80         glVertexPointer(3, GL_FLOAT, 0, self.vertices)\r
81         # indexによる描画\r
82         glDrawElements(GL_TRIANGLES, len(self.indices),\r
83                 GL_UNSIGNED_INT, self.indices)\r
84         # 後始末\r
85         glDisableClientState(GL_VERTEX_ARRAY)\r
86 \r
87 \r
88 '''\r
89 インデックス参照頂点配列\r
90 \r
91 ====\r
92 属性\r
93 ====\r
94 * 位置\r
95 * 色\r
96 '''\r
97 class IndexedVertexArrayWithColor(object):\r
98     def __init__(self, vertices, colors, indices):\r
99         self.vertices=vertices\r
100         self.colors=colors\r
101         self.indices=indices\r
102 \r
103     def draw(self):\r
104         # 位置属性\r
105         glEnableClientState(GL_VERTEX_ARRAY)\r
106         glVertexPointer(3, GL_FLOAT, 0, self.vertices)\r
107         # 色属性\r
108         glEnableClientState(GL_COLOR_ARRAY)\r
109         glColorPointer(3, GL_FLOAT, 0, self.colors)\r
110         # indexによる描画\r
111         glDrawElements(GL_TRIANGLES, len(self.indices),\r
112                 GL_UNSIGNED_INT, self.indices)\r
113         # 後始末\r
114         glDisableClientState(GL_COLOR_ARRAY)\r
115         glDisableClientState(GL_VERTEX_ARRAY)\r
116 \r