質問編集履歴

2

文章を修正しました。

2021/10/09 03:47

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
 
4
4
 
5
+ Github: https://github.com/Shigurechan/GL (Line.cpp Draw()関数部)
6
+
7
+
8
+
5
9
  ![イメージ説明](f8309a0d5434d87ce8f07420c6c6e93d.png)
6
10
 
7
11
 

1

文章を修正

2021/10/09 03:47

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- opengl 頂点と頂点の真んの座標算出したい。
1
+ opengl 頂点と頂点の中中心に頂点を回転させる方法
test CHANGED
@@ -1,6 +1,4 @@
1
- 提示コードですがコメント部内部の関数ですがこれは二つの頂点を使って線を描画しているのですがその頂点の真ん中の線を中心に回転させいたいのですがそれをするにはどうすればいいのでしょうか?頂点と頂点の真ん中の座標をの算出方法が知りたいです。
1
+ 提示コードですがコメント部内部の関数ですがこれは二つの頂点を使って線を描画しているのですがその頂点の真ん中を中心に頂点を回転させるにはどうすればいいのでしょうか?
2
-
3
-
4
2
 
5
3
 
6
4
 
@@ -8,6 +6,8 @@
8
6
 
9
7
 
10
8
 
9
+ 下記のようにやってみましたが上手く実装できません。
10
+
11
11
  ```
12
12
 
13
13
 
@@ -32,6 +32,152 @@
32
32
 
33
33
  glLineWidth(width); //太さ
34
34
 
35
+ glm::vec2 size = glm::abs(glm::vec2(end.x - start.x,end.y - start.y)) / 2.0f;
36
+
37
+ glm::vec2 center = glm::vec2(end.x + start.x,end.y + start.y) / 2.0f;
38
+
39
+
40
+
41
+
42
+
43
+ vertex->at(0).position[0] = start.x;
44
+
45
+ vertex->at(0).position[1] = start.y;
46
+
47
+
48
+
49
+ vertex->at(1).position[0] = +end.x;
50
+
51
+ vertex->at(1).position[1] = +end.y;
52
+
53
+
54
+
55
+
56
+
57
+ if(rotate != r)
58
+
59
+ {
60
+
61
+ //setPosition(center); //座標
62
+
63
+
64
+
65
+ rotate = r;
66
+
67
+ vertex->at(0).position[0] = (cos(r) * size.x) * center.x;
68
+
69
+ vertex->at(0).position[1] = (sin(r) * size.y) * center.y;
70
+
71
+
72
+
73
+ vertex->at(1).position[0] = (cos(r) * size.x) * center.x;
74
+
75
+ vertex->at(1).position[1] = (sin(r) * size.y) * center.y;
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+ vertex->at(0).position[0] += start.x;
84
+
85
+ vertex->at(0).position[1] += start.y;
86
+
87
+
88
+
89
+ vertex->at(1).position[0] += end.x;
90
+
91
+ vertex->at(1).position[1] += end.y;
92
+
93
+
94
+
95
+
96
+
97
+ }
98
+
99
+ else
100
+
101
+ {
102
+
103
+ }
104
+
105
+
106
+
107
+ setPosition(glm::vec2(0,0)); //座標
108
+
109
+
110
+
111
+
112
+
113
+ //Transform
114
+
115
+
116
+
117
+
118
+
119
+ setScale(glm::vec2(1,1)); //スケール
120
+
121
+ setRotate(0); //回転
122
+
123
+
124
+
125
+ shader->setEnable();
126
+
127
+ shader->setUniformMatrix4fv("uTranslate", getMatTranslation());
128
+
129
+ shader->setUniformMatrix4fv("uRotate", getMatRotate());
130
+
131
+ shader->setUniformMatrix4fv("uScale", getMatScale());
132
+
133
+ shader->setUniformMatrix4fv("uViewProjection", glm::ortho(0.0f, FrameWork::windowContext->getSize().x, FrameWork::windowContext->getSize().y, 0.0f, -1.0f, 1.0f));
134
+
135
+ shader->setUniform4f("uFragment",color);
136
+
137
+ glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(VertexAttribute) * vertex->size(), vertex->data());
138
+
139
+ glDrawArrays(GL_LINES, 0, vertex->size());
140
+
141
+ shader->setDisable();
142
+
143
+
144
+
145
+ //バインド解除
146
+
147
+ glBindVertexArray(0);
148
+
149
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
150
+
151
+ glBindTexture(GL_TEXTURE_2D, 0);
152
+
153
+ }
154
+
155
+ ```
156
+
157
+ ```
158
+
159
+
160
+
161
+ // ##################################### 描画 #####################################
162
+
163
+ void FrameWork::Line::Draw(glm::vec2 start, glm::vec2 end,glm::vec4 color,unsigned short width, float r)
164
+
165
+ {
166
+
167
+
168
+
169
+ glBindVertexArray(vao);
170
+
171
+ glBindBuffer(GL_ARRAY_BUFFER, vbo);
172
+
173
+
174
+
175
+ vertex->resize(2);
176
+
177
+
178
+
179
+ glLineWidth(width); //太さ
180
+
35
181
  glm::vec2 size = glm::abs(end - start) / 2.0f;
36
182
 
37
183