teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

修正したコードを追記

2019/04/23 20:29

投稿

Bongo
Bongo

スコア10816

answer CHANGED
@@ -10,4 +10,83 @@
10
10
  }
11
11
  ```
12
12
 
13
- ではどうでしょうか。なにか他にエラーが発生するようでしたらコメントいただけると助かります。
13
+ ではどうでしょうか。なにか他にエラーが発生するようでしたらコメントいただけると助かります。
14
+
15
+ #追記
16
+ 下記部分を変更してみたところ...
17
+
18
+ **main**
19
+ ```C++
20
+ // 省略
21
+
22
+ bool readShaderSource(const char *name, std::vector<GLchar> &buffer)
23
+ {
24
+ // 省略
25
+
26
+ // 最後にストリームを閉じて戻る部分が欠落していたようなので追加しました
27
+ file.close();
28
+ return true;
29
+ }
30
+
31
+ // 省略
32
+
33
+ // 頂点位置の順序を逆Z字形に変更
34
+ Object::Vertex vertex[] = {
35
+ 0.5f, 0.5f,
36
+ -0.5f, 0.5f,
37
+ 0.5f, -0.5f,
38
+ -0.5f, -0.5f,
39
+ };
40
+
41
+ // UVの順序を逆Z字形に変更
42
+ Object::Vertex uv[] = {
43
+ 1.0f, 0.0f,
44
+ 0.0f, 0.0f,
45
+ 1.0f, 1.0f,
46
+ 0.0f, 1.0f,
47
+ };
48
+
49
+ // 省略
50
+ ```
51
+
52
+ **Object**
53
+ ```C++
54
+ // 省略
55
+
56
+ Object(GLint size, GLsizei vertexcount, const Vertex *vertex, const GLuint program, const Vertex *uv, std::string texname)
57
+ {
58
+ // 省略
59
+
60
+ glBindBuffer(GL_ARRAY_BUFFER, vbo[1]);
61
+
62
+ // 2 * sizeof(Vertex)をvertexcount * sizeof(Vertex)に変更
63
+ glBufferData(GL_ARRAY_BUFFER, vertexcount * sizeof(Vertex), uv, GL_STATIC_DRAW);
64
+
65
+ int uvLocation = glGetAttribLocation(program, "uv");
66
+ glVertexAttribPointer(uvLocation, 2, GL_FLOAT, GL_FALSE, 0, 0);
67
+
68
+ // 省略
69
+ }
70
+
71
+ // 省略
72
+ ```
73
+
74
+ **Shape**
75
+ ```C++
76
+ // 省略
77
+
78
+ virtual void execute() const
79
+ {
80
+ // 折れ線で描画する
81
+ glBindTexture(GL_TEXTURE_2D, object->texID);
82
+
83
+ // GL_LINE_LOOPをGL_TRIANGLE_STRIPに変更
84
+ glDrawArrays(GL_TRIANGLE_STRIP, 0, vertexcount);
85
+ }
86
+
87
+ // 省略
88
+ ```
89
+
90
+ 下図のような描画結果が得られました。
91
+
92
+ ![結果](87d4274fe83b2aa95a955e300ace735f.png)